conduit-0.3.17/0000777000175000017500000000000011326117101010245 500000000000000conduit-0.3.17/COPYING0000644000175000017500000004311011172176633011231 00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 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. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, 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 software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, 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 redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's 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 give any other recipients of the Program a copy of this License along with the Program. 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 Program or any portion of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, 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 Program, 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 Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) 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; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, 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 executable. 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. If distribution of executable or 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 counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program 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. 5. 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 Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program 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. 7. 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 Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program 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 Program. 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. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program 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. 9. The Free Software Foundation may publish revised and/or new versions of the 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 Program 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 Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, 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 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "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 PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. 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 PROGRAM 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 PROGRAM (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 PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 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 Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. 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. Copyright (C) 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 Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. conduit-0.3.17/TODO0000644000175000017500000000000111172176633010656 00000000000000 conduit-0.3.17/m4/0000777000175000017500000000000011326117100010564 500000000000000conduit-0.3.17/m4/python.m40000644000175000017500000002202311172176633012301 00000000000000## ------------------------ -*- Autoconf -*- ## Python file handling ## From Andrew Dalke ## Updated by James Henstridge ## ------------------------ # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # --------------------------------------------------------------------------- # Adds support for distributing Python modules and packages. To # install modules, copy them to $(pythondir), using the python_PYTHON # automake variable. To install a package with the same name as the # automake package, install to $(pkgpythondir), or use the # pkgpython_PYTHON automake variable. # # The variables $(pyexecdir) and $(pkgpyexecdir) are provided as # locations to install python extension modules (shared libraries). # Another macro is required to find the appropriate flags to compile # extension modules. # # If your package is configured with a different prefix to python, # users will have to add the install directory to the PYTHONPATH # environment variable, or create a .pth file (see the python # documentation for details). # # If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will # cause an error if the version of python installed on the system # doesn't meet the requirement. MINIMUM-VERSION should consist of # numbers and dots only. AC_DEFUN([AM_PATH_PYTHON], [ dnl Find a Python interpreter. Python versions prior to 1.5 are not dnl supported because the default installation locations changed from dnl $prefix/lib/site-python in 1.4 to $prefix/lib/python1.5/site-packages dnl in 1.5. m4_define_default([_AM_PYTHON_INTERPRETER_LIST], [python python2 python2.5 python2.4 python2.3 python2.2 dnl python2.1 python2.0 python1.6 python1.5]) m4_if([$1],[],[ dnl No version check is needed. # Find any Python interpreter. if test -z "$PYTHON"; then AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) fi am_display_PYTHON=python ], [ dnl A version check is needed. if test -n "$PYTHON"; then # If the user set $PYTHON, use it and don't search something else. AC_MSG_CHECKING([whether $PYTHON version >= $1]) AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], [AC_MSG_RESULT(yes)], [AC_MSG_ERROR(too old)]) am_display_PYTHON=$PYTHON else # Otherwise, try each interpreter until we find one that satisfies # VERSION. AC_CACHE_CHECK([for a Python interpreter with version >= $1], [am_cv_pathless_PYTHON],[ for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do test "$am_cv_pathless_PYTHON" = none && break AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) done]) # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. if test "$am_cv_pathless_PYTHON" = none; then PYTHON=: else AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) fi am_display_PYTHON=$am_cv_pathless_PYTHON fi ]) if test "$PYTHON" = :; then dnl Run any user-specified action, or abort. m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) else dnl Query Python for its version number. Getting [:3] seems to be dnl the best way to do this; it's what "site.py" does in the standard dnl library. AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], [am_cv_python_version=`$PYTHON -c "import sys; print sys.version[[:3]]"`]) AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) dnl Use the values of $prefix and $exec_prefix for the corresponding dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made dnl distinct variables so they can be overridden if need be. However, dnl general consensus is that you shouldn't need this ability. AC_SUBST([PYTHON_PREFIX], ['${prefix}']) AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) dnl At times (like when building shared libraries) you may want dnl to know which OS platform Python thinks this is. AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], [am_cv_python_platform=`$PYTHON -c "import sys; print sys.platform"`]) AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) dnl Set up 4 directories: dnl pythondir -- where to install python scripts. This is the dnl site-packages directory, not the python standard library dnl directory like in previous automake betas. This behavior dnl is more consistent with lispdir.m4 for example. dnl Query distutils for this directory. distutils does not exist in dnl Python 1.5, so we fall back to the hardcoded directory if it dnl doesn't work. AC_CACHE_CHECK([for $am_display_PYTHON script directory], [am_cv_python_pythondir], [am_cv_python_pythondir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(0,0,prefix='$PYTHON_PREFIX')" 2>/dev/null || echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"`]) AC_SUBST([pythondir], [$am_cv_python_pythondir]) dnl pkgpythondir -- $PACKAGE directory under pythondir. Was dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is dnl more consistent with the rest of automake. AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) dnl pyexecdir -- directory for installing python extension modules dnl (shared libraries) dnl Query distutils for this directory. distutils does not exist in dnl Python 1.5, so we fall back to the hardcoded directory if it dnl doesn't work. AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], [am_cv_python_pyexecdir], [am_cv_python_pyexecdir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(1,0,prefix='$PYTHON_EXEC_PREFIX')" 2>/dev/null || echo "${PYTHON_EXEC_PREFIX}/lib/python${PYTHON_VERSION}/site-packages"`]) AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) dnl Run any user-specified action. $2 fi ]) # AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # --------------------------------------------------------------------------- # Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION. # Run ACTION-IF-FALSE otherwise. # This test uses sys.hexversion instead of the string equivalent (first # word of sys.version), in order to cope with versions such as 2.2c1. # hexversion has been introduced in Python 1.5.2; it's probably not # worth to support older versions (1.5.1 was released on October 31, 1998). AC_DEFUN([AM_PYTHON_CHECK_VERSION], [prog="import sys, string # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. minver = map(int, string.split('$2', '.')) + [[0, 0, 0]] minverhex = 0 for i in xrange(0, 4): minverhex = (minverhex << 8) + minver[[i]] sys.exit(sys.hexversion < minverhex)" AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) ## this one is commonly used with AM_PATH_PYTHONDIR ... dnl AM_CHECK_PYMOD(MODNAME [,SYMBOL [,ACTION-IF-FOUND [,ACTION-IF-NOT-FOUND]]]) dnl Check if a module containing a given symbol is visible to python. AC_DEFUN([AM_CHECK_PYMOD], [AC_REQUIRE([AM_PATH_PYTHON]) py_mod_var=`echo $1['_']$2 | sed 'y%./+-%__p_%'` AC_MSG_CHECKING(for ifelse([$2],[],,[$2 in ])python module $1) AC_CACHE_VAL(py_cv_mod_$py_mod_var, [ ifelse([$2],[], [prog=" import sys try: import $1 except ImportError: sys.exit(1) except: sys.exit(0) sys.exit(0)"], [prog=" import $1 $1.$2"]) if $PYTHON -c "$prog" 1>&AC_FD_CC 2>&AC_FD_CC then eval "py_cv_mod_$py_mod_var=yes" else eval "py_cv_mod_$py_mod_var=no" fi ]) py_val=`eval "echo \`echo '$py_cv_mod_'$py_mod_var\`"` if test "x$py_val" != xno; then AC_MSG_RESULT(yes) ifelse([$3], [],, [$3 ])dnl else AC_MSG_RESULT(no) ifelse([$4], [],, [$4 ])dnl fi ]) dnl AM_CHECK_PYMOD_VERSION(MODNAME, MEMBER-THAT-GIVES-VERSION, MINIMUM-VERSION [,ACTION-IF-SATISFIED [,ACTION-IF-NOT-SATISFIED]]) dnl Imports the module MODNAME, looks at MODNAME.MEMBER-THAT-GIVES-VERSION and makes sure it is not less than MINIMUM-VERSION dnl Note: This assumes the version is a tuple like (0,8,0). MINIMUM-VERSION should be in human form though. E.g. "0.8.0". dnl Originally written to check pygoocanvas' version. Adapted to support modules that have their version as a string in dnl the form 'a.b.c' (e.g. pysqlite) AC_DEFUN([AM_CHECK_PYMOD_VERSION], [AC_REQUIRE([AM_CHECK_PYMOD]) v=`echo $3 | sed -e "s/\./,/g"` AC_MSG_CHECKING(for $3 of $1) prog=" import $1 ver = $1.$2 if type(ver) == str: ver = ver.split('.') ver = map(int,ver) ver = tuple(ver) elif type(ver) == tuple: pass else: raise Exception if ver >= ($v): print 'yes' " out=`$PYTHON -c "$prog"` if test "x$out" = xyes; then AC_MSG_RESULT([yes]) ifelse([$4], [],, [$4 ])dnl else AC_MSG_RESULT([no]) ifelse([$5], [],, [$5 ])dnl fi ]) conduit-0.3.17/m4/acinclude.m40000644000175000017500000000170711172176633012715 00000000000000dnl AS_AC_EXPAND(VAR, CONFIGURE_VAR) dnl dnl example dnl AS_AC_EXPAND(SYSCONFDIR, $sysconfdir) dnl will set SYSCONFDIR to /usr/local/etc if prefix=/usr/local AC_DEFUN([AS_AC_EXPAND], [ EXP_VAR=[$1] FROM_VAR=[$2] dnl first expand prefix and exec_prefix if necessary prefix_save=$prefix exec_prefix_save=$exec_prefix dnl if no prefix given, then use /usr/local, the default prefix if test "x$prefix" = "xNONE"; then prefix=$ac_default_prefix fi dnl if no exec_prefix given, then use prefix if test "x$exec_prefix" = "xNONE"; then exec_prefix=$prefix fi full_var="$FROM_VAR" dnl loop until it doesn't change anymore while true; do new_full_var="`eval echo $full_var`" if test "x$new_full_var"="x$full_var"; then break; fi full_var=$new_full_var done dnl clean up full_var=$new_full_var AC_SUBST([$1], "$full_var") dnl restore prefix and exec_prefix prefix=$prefix_save exec_prefix=$exec_prefix_save ]) conduit-0.3.17/m4/gnome-doc-utils.m40000644000175000017500000000342311326116724013765 00000000000000dnl Do not call GNOME_DOC_DEFINES directly. It is split out from dnl GNOME_DOC_INIT to allow gnome-doc-utils to bootstrap off itself. AC_DEFUN([GNOME_DOC_DEFINES], [ AC_ARG_WITH([help-dir], AC_HELP_STRING([--with-help-dir=DIR], [path to help docs]),, [with_help_dir='${datadir}/gnome/help']) HELP_DIR="$with_help_dir" AC_SUBST(HELP_DIR) AC_ARG_WITH([omf-dir], AC_HELP_STRING([--with-omf-dir=DIR], [path to OMF files]),, [with_omf_dir='${datadir}/omf']) OMF_DIR="$with_omf_dir" AC_SUBST(OMF_DIR) AC_ARG_WITH([help-formats], AC_HELP_STRING([--with-help-formats=FORMATS], [list of formats]),, [with_help_formats='']) DOC_USER_FORMATS="$with_help_formats" AC_SUBST(DOC_USER_FORMATS) AC_ARG_ENABLE([scrollkeeper], [AC_HELP_STRING([--disable-scrollkeeper], [do not make updates to the scrollkeeper database])],, enable_scrollkeeper=yes) AM_CONDITIONAL([ENABLE_SK],[test "$gdu_cv_have_gdu" = "yes" -a "$enable_scrollkeeper" = "yes"]) dnl disable scrollkeeper automatically for distcheck DISTCHECK_CONFIGURE_FLAGS="--disable-scrollkeeper $DISTCHECK_CONFIGURE_FLAGS" AC_SUBST(DISTCHECK_CONFIGURE_FLAGS) AM_CONDITIONAL([HAVE_GNOME_DOC_UTILS],[test "$gdu_cv_have_gdu" = "yes"]) ]) # GNOME_DOC_INIT ([MINIMUM-VERSION],[ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) # AC_DEFUN([GNOME_DOC_INIT], [AC_REQUIRE([AC_PROG_LN_S])dnl ifelse([$1],,[gdu_cv_version_required=0.3.2],[gdu_cv_version_required=$1]) AC_MSG_CHECKING([gnome-doc-utils >= $gdu_cv_version_required]) PKG_CHECK_EXISTS([gnome-doc-utils >= $gdu_cv_version_required], [gdu_cv_have_gdu=yes],[gdu_cv_have_gdu=no]) if test "$gdu_cv_have_gdu" = "yes"; then AC_MSG_RESULT([yes]) ifelse([$2],,[:],[$2]) else AC_MSG_RESULT([no]) ifelse([$3],,[AC_MSG_ERROR([gnome-doc-utils >= $gdu_cv_version_required not found])],[$3]) fi GNOME_DOC_DEFINES ]) conduit-0.3.17/m4/intltool.m40000644000175000017500000002421511326116723012624 00000000000000## intltool.m4 - Configure intltool for the target system. -*-Shell-script-*- ## Copyright (C) 2001 Eazel, Inc. ## Author: Maciej Stachowiak ## Kenneth Christiansen ## ## 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. ## ## As a special exception to the GNU General Public License, if you ## distribute this file as part of a program that contains a ## configuration script generated by Autoconf, you may include it under ## the same distribution terms that you use for the rest of that program. dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml]) # serial 40 IT_PROG_INTLTOOL AC_DEFUN([IT_PROG_INTLTOOL], [ AC_PREREQ([2.50])dnl AC_REQUIRE([AM_NLS])dnl case "$am__api_version" in 1.[01234]) AC_MSG_ERROR([Automake 1.5 or newer is required to use intltool]) ;; *) ;; esac if test -n "$1"; then AC_MSG_CHECKING([for intltool >= $1]) INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` [INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` ] AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found]) test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || AC_MSG_ERROR([Your intltool is too old. You need intltool $1 or later.]) fi AC_PATH_PROG(INTLTOOL_UPDATE, [intltool-update]) AC_PATH_PROG(INTLTOOL_MERGE, [intltool-merge]) AC_PATH_PROG(INTLTOOL_EXTRACT, [intltool-extract]) if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then AC_MSG_ERROR([The intltool scripts were not found. Please install intltool.]) fi INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< [$]@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< [$]@' INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' _IT_SUBST(INTLTOOL_DESKTOP_RULE) _IT_SUBST(INTLTOOL_DIRECTORY_RULE) _IT_SUBST(INTLTOOL_KEYS_RULE) _IT_SUBST(INTLTOOL_PROP_RULE) _IT_SUBST(INTLTOOL_OAF_RULE) _IT_SUBST(INTLTOOL_PONG_RULE) _IT_SUBST(INTLTOOL_SERVER_RULE) _IT_SUBST(INTLTOOL_SHEET_RULE) _IT_SUBST(INTLTOOL_SOUNDLIST_RULE) _IT_SUBST(INTLTOOL_UI_RULE) _IT_SUBST(INTLTOOL_XAM_RULE) _IT_SUBST(INTLTOOL_KBD_RULE) _IT_SUBST(INTLTOOL_XML_RULE) _IT_SUBST(INTLTOOL_XML_NOMERGE_RULE) _IT_SUBST(INTLTOOL_CAVES_RULE) _IT_SUBST(INTLTOOL_SCHEMAS_RULE) _IT_SUBST(INTLTOOL_THEME_RULE) _IT_SUBST(INTLTOOL_SERVICE_RULE) _IT_SUBST(INTLTOOL_POLICY_RULE) # Check the gettext tools to make sure they are GNU AC_PATH_PROG(XGETTEXT, xgettext) AC_PATH_PROG(MSGMERGE, msgmerge) AC_PATH_PROG(MSGFMT, msgfmt) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi AC_PATH_PROG(INTLTOOL_PERL, perl) if test -z "$INTLTOOL_PERL"; then AC_MSG_ERROR([perl not found]) fi AC_MSG_CHECKING([for perl >= 5.8.1]) $INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1 if test $? -ne 0; then AC_MSG_ERROR([perl 5.8.1 is required for intltool]) else IT_PERL_VERSION="`$INTLTOOL_PERL -e \"printf '%vd', $^V\"`" AC_MSG_RESULT([$IT_PERL_VERSION]) fi if test "x$2" != "xno-xml"; then AC_MSG_CHECKING([for XML::Parser]) if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then AC_MSG_RESULT([ok]) else AC_MSG_ERROR([XML::Parser perl module is required for intltool]) fi fi # Substitute ALL_LINGUAS so we can use it in po/Makefile AC_SUBST(ALL_LINGUAS) # Set DATADIRNAME correctly if it is not set yet # (copied from glib-gettext.m4) if test -z "$DATADIRNAME"; then AC_LINK_IFELSE( [AC_LANG_PROGRAM([[]], [[extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr]])], [DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share dnl in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [DATADIRNAME=share], [DATADIRNAME=lib]) ;; *) [DATADIRNAME=lib] ;; esac]) fi AC_SUBST(DATADIRNAME) IT_PO_SUBDIR([po]) ]) # IT_PO_SUBDIR(DIRNAME) # --------------------- # All po subdirs have to be declared with this macro; the subdir "po" is # declared by IT_PROG_INTLTOOL. # AC_DEFUN([IT_PO_SUBDIR], [AC_PREREQ([2.53])dnl We use ac_top_srcdir inside AC_CONFIG_COMMANDS. dnl dnl The following CONFIG_COMMANDS should be exetuted at the very end dnl of config.status. AC_CONFIG_COMMANDS_PRE([ AC_CONFIG_COMMANDS([$1/stamp-it], [ if [ ! grep "^# INTLTOOL_MAKEFILE$" "$1/Makefile.in" > /dev/null ]; then AC_MSG_ERROR([$1/Makefile.in.in was not created by intltoolize.]) fi rm -f "$1/stamp-it" "$1/stamp-it.tmp" "$1/POTFILES" "$1/Makefile.tmp" >"$1/stamp-it.tmp" [sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/$1/POTFILES.in" | sed '$!s/$/ \\/' >"$1/POTFILES" ] [sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r $1/POTFILES } ' "$1/Makefile.in" >"$1/Makefile"] rm -f "$1/Makefile.tmp" mv "$1/stamp-it.tmp" "$1/stamp-it" ]) ])dnl ]) # _IT_SUBST(VARIABLE) # ------------------- # Abstract macro to do either _AM_SUBST_NOTMAKE or AC_SUBST # AC_DEFUN([_IT_SUBST], [ AC_SUBST([$1]) m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([$1])]) ] ) # deprecated macros AU_ALIAS([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL]) # A hint is needed for aclocal from Automake <= 1.9.4: # AC_DEFUN([AC_PROG_INTLTOOL], ...) conduit-0.3.17/ChangeLog0000644000175000017500000006004411326115107011743 00000000000000commit ed62e4727804aede8dd2b1e645a8e3f455a2978d Author: John Stowers Date: 2010-01-21 fix build M INSTALL M configure.ac commit d05e197f546b4aa440a9e24f83324b8b2b3d6fcc Author: John Stowers Date: 2010-01-07 fix dbus configuration M conduit/DBus.py commit 61ba6e24d80d36ba2d5e7b2faa496a78bda43979 Author: Aron Xu Date: 2010-01-19 Add Simplified Chinese help translation. M help/Makefile.am A help/zh_CN/zh_CN.po commit b47dcfe75541504aea729a792c40dff3ee90f683 Author: Andrej Žnidaršič Date: 2010-01-18 Updated Slovenian translation M po/sl.po commit 47b2c0007851989bacbe62354542753c21815562 Author: Petr Kovar Date: 2010-01-12 Updated Czech translation by Marek Cernocky and Petr Kovar M po/cs.po commit 363a321bacbc9a70c14d59eeafe4670f7d53aca9 Author: John Stowers Date: 2010-01-11 Protect a crast at startup * Should fix lunchpad 506110 M conduit/gtkui/Tree.py commit 91d259a5e7b1c09e87ce3207ea29ac9bf717c582 Author: Daniel Nylander Date: 2010-01-10 Updated Swedish translation M po/sv.po commit 4f1b8040c974e1402794501b47657d87d66408b4 Author: Jorge González Date: 2010-01-09 Updated Spanish translation M po/es.po commit 541edd805a01762995b430bb0aa376f97b3f7536 Author: John Stowers Date: 2010-01-09 Remove translation traces of glade files fixes bug 606397 M po/POTFILES.in M po/POTFILES.skip commit 3cba683db76e613e42c568b0331001a35ddc0443 Author: John Stowers Date: 2010-01-07 fix xml serialization from outside SyncSet M conduit/ModuleWrapper.py M conduit/SyncSet.py M conduit/XMLSerialization.py M conduit/dataproviders/DataProvider.py commit 0eac727854170cffe8150d601807ac055f56fbad Author: John Stowers Date: 2010-01-07 update script that fetches 3rd party libs M scripts/update-3rdparty-libs.sh commit 4d37d0d25e930486ba57882e82e3b3ff0be16d40 Author: John Stowers Date: 2010-01-07 use system gdata M conduit/modules/GoogleModule/Makefile.am D conduit/modules/GoogleModule/atom/Makefile.am D conduit/modules/GoogleModule/atom/__init__.py D conduit/modules/GoogleModule/atom/auth.py D conduit/modules/GoogleModule/atom/client.py D conduit/modules/GoogleModule/atom/core.py D conduit/modules/GoogleModule/atom/http.py D conduit/modules/GoogleModule/atom/http_core.py D conduit/modules/GoogleModule/atom/http_interface.py D conduit/modules/GoogleModule/atom/mock_http.py D conduit/modules/GoogleModule/atom/mock_http_core.py D conduit/modules/GoogleModule/atom/mock_service.py D conduit/modules/GoogleModule/atom/service.py D conduit/modules/GoogleModule/atom/token_store.py D conduit/modules/GoogleModule/atom/url.py D conduit/modules/GoogleModule/calendar-config.glade D conduit/modules/GoogleModule/gdata/Crypto/Cipher/AES.pyd D conduit/modules/GoogleModule/gdata/Crypto/Cipher/ARC2.pyd D conduit/modules/GoogleModule/gdata/Crypto/Cipher/ARC4.pyd D conduit/modules/GoogleModule/gdata/Crypto/Cipher/Blowfish.pyd D conduit/modules/GoogleModule/gdata/Crypto/Cipher/CAST.pyd D conduit/modules/GoogleModule/gdata/Crypto/Cipher/DES.pyd D conduit/modules/GoogleModule/gdata/Crypto/Cipher/DES3.pyd D conduit/modules/GoogleModule/gdata/Crypto/Cipher/IDEA.pyd D conduit/modules/GoogleModule/gdata/Crypto/Cipher/RC5.pyd D conduit/modules/GoogleModule/gdata/Crypto/Cipher/XOR.pyd D conduit/modules/GoogleModule/gdata/Crypto/Cipher/__init__.py D conduit/modules/GoogleModule/gdata/Crypto/Hash/HMAC.py D conduit/modules/GoogleModule/gdata/Crypto/Hash/MD2.pyd D conduit/modules/GoogleModule/gdata/Crypto/Hash/MD4.pyd D conduit/modules/GoogleModule/gdata/Crypto/Hash/MD5.py D conduit/modules/GoogleModule/gdata/Crypto/Hash/RIPEMD.pyd D conduit/modules/GoogleModule/gdata/Crypto/Hash/SHA.py D conduit/modules/GoogleModule/gdata/Crypto/Hash/SHA256.pyd D conduit/modules/GoogleModule/gdata/Crypto/Hash/__init__.py D conduit/modules/GoogleModule/gdata/Crypto/Protocol/AllOrNothing.py D conduit/modules/GoogleModule/gdata/Crypto/Protocol/Chaffing.py D conduit/modules/GoogleModule/gdata/Crypto/Protocol/__init__.py D conduit/modules/GoogleModule/gdata/Crypto/PublicKey/DSA.py D conduit/modules/GoogleModule/gdata/Crypto/PublicKey/ElGamal.py D conduit/modules/GoogleModule/gdata/Crypto/PublicKey/RSA.py D conduit/modules/GoogleModule/gdata/Crypto/PublicKey/__init__.py D conduit/modules/GoogleModule/gdata/Crypto/PublicKey/pubkey.py D conduit/modules/GoogleModule/gdata/Crypto/PublicKey/qNEW.py D conduit/modules/GoogleModule/gdata/Crypto/Util/RFC1751.py D conduit/modules/GoogleModule/gdata/Crypto/Util/__init__.py D conduit/modules/GoogleModule/gdata/Crypto/Util/number.py D conduit/modules/GoogleModule/gdata/Crypto/Util/randpool.py D conduit/modules/GoogleModule/gdata/Crypto/Util/test.py D conduit/modules/GoogleModule/gdata/Crypto/__init__.py D conduit/modules/GoogleModule/gdata/Crypto/test.py D conduit/modules/GoogleModule/gdata/Makefile.am D conduit/modules/GoogleModule/gdata/__init__.py D conduit/modules/GoogleModule/gdata/alt/__init__.py D conduit/modules/GoogleModule/gdata/alt/appengine.py D conduit/modules/GoogleModule/gdata/apps/Makefile.am D conduit/modules/GoogleModule/gdata/apps/__init__.py D conduit/modules/GoogleModule/gdata/apps/emailsettings/__init__.py D conduit/modules/GoogleModule/gdata/apps/emailsettings/service.py D conduit/modules/GoogleModule/gdata/apps/migration/__init__.py D conduit/modules/GoogleModule/gdata/apps/migration/service.py D conduit/modules/GoogleModule/gdata/apps/service.py D conduit/modules/GoogleModule/gdata/auth.py D conduit/modules/GoogleModule/gdata/base/Makefile.am D conduit/modules/GoogleModule/gdata/base/__init__.py D conduit/modules/GoogleModule/gdata/base/service.py D conduit/modules/GoogleModule/gdata/blogger/Makefile.am D conduit/modules/GoogleModule/gdata/blogger/__init__.py D conduit/modules/GoogleModule/gdata/blogger/service.py D conduit/modules/GoogleModule/gdata/calendar/Makefile.am D conduit/modules/GoogleModule/gdata/calendar/__init__.py D conduit/modules/GoogleModule/gdata/calendar/service.py D conduit/modules/GoogleModule/gdata/client.py D conduit/modules/GoogleModule/gdata/codesearch/Makefile.am D conduit/modules/GoogleModule/gdata/codesearch/__init__.py D conduit/modules/GoogleModule/gdata/codesearch/service.py D conduit/modules/GoogleModule/gdata/contacts/Makefile.am D conduit/modules/GoogleModule/gdata/contacts/__init__.py D conduit/modules/GoogleModule/gdata/contacts/service.py D conduit/modules/GoogleModule/gdata/docs/Makefile.am D conduit/modules/GoogleModule/gdata/docs/__init__.py D conduit/modules/GoogleModule/gdata/docs/service.py D conduit/modules/GoogleModule/gdata/exif/Makefile.am D conduit/modules/GoogleModule/gdata/exif/__init__.py D conduit/modules/GoogleModule/gdata/geo/Makefile.am D conduit/modules/GoogleModule/gdata/geo/__init__.py D conduit/modules/GoogleModule/gdata/media/Makefile.am D conduit/modules/GoogleModule/gdata/media/__init__.py D conduit/modules/GoogleModule/gdata/oauth/CHANGES.txt D conduit/modules/GoogleModule/gdata/oauth/__init__.py D conduit/modules/GoogleModule/gdata/oauth/rsa.py D conduit/modules/GoogleModule/gdata/photos/Makefile.am D conduit/modules/GoogleModule/gdata/photos/__init__.py D conduit/modules/GoogleModule/gdata/photos/service.py D conduit/modules/GoogleModule/gdata/service.py D conduit/modules/GoogleModule/gdata/spreadsheet/Makefile.am D conduit/modules/GoogleModule/gdata/spreadsheet/__init__.py D conduit/modules/GoogleModule/gdata/spreadsheet/service.py D conduit/modules/GoogleModule/gdata/spreadsheet/text_db.py D conduit/modules/GoogleModule/gdata/test_data.py D conduit/modules/GoogleModule/gdata/tlslite/BaseDB.py D conduit/modules/GoogleModule/gdata/tlslite/Checker.py D conduit/modules/GoogleModule/gdata/tlslite/FileObject.py D conduit/modules/GoogleModule/gdata/tlslite/HandshakeSettings.py D conduit/modules/GoogleModule/gdata/tlslite/Session.py D conduit/modules/GoogleModule/gdata/tlslite/SessionCache.py D conduit/modules/GoogleModule/gdata/tlslite/SharedKeyDB.py D conduit/modules/GoogleModule/gdata/tlslite/TLSConnection.py D conduit/modules/GoogleModule/gdata/tlslite/TLSRecordLayer.py D conduit/modules/GoogleModule/gdata/tlslite/VerifierDB.py D conduit/modules/GoogleModule/gdata/tlslite/X509.py D conduit/modules/GoogleModule/gdata/tlslite/X509CertChain.py D conduit/modules/GoogleModule/gdata/tlslite/__init__.py D conduit/modules/GoogleModule/gdata/tlslite/api.py D conduit/modules/GoogleModule/gdata/tlslite/constants.py D conduit/modules/GoogleModule/gdata/tlslite/errors.py D conduit/modules/GoogleModule/gdata/tlslite/integration/AsyncStateMachine.py D conduit/modules/GoogleModule/gdata/tlslite/integration/ClientHelper.py D conduit/modules/GoogleModule/gdata/tlslite/integration/HTTPTLSConnection.py D conduit/modules/GoogleModule/gdata/tlslite/integration/IMAP4_TLS.py D conduit/modules/GoogleModule/gdata/tlslite/integration/IntegrationHelper.py D conduit/modules/GoogleModule/gdata/tlslite/integration/POP3_TLS.py D conduit/modules/GoogleModule/gdata/tlslite/integration/SMTP_TLS.py D conduit/modules/GoogleModule/gdata/tlslite/integration/TLSAsyncDispatcherMixIn.py D conduit/modules/GoogleModule/gdata/tlslite/integration/TLSSocketServerMixIn.py D conduit/modules/GoogleModule/gdata/tlslite/integration/TLSTwistedProtocolWrapper.py D conduit/modules/GoogleModule/gdata/tlslite/integration/XMLRPCTransport.py D conduit/modules/GoogleModule/gdata/tlslite/integration/__init__.py D conduit/modules/GoogleModule/gdata/tlslite/mathtls.py D conduit/modules/GoogleModule/gdata/tlslite/messages.py D conduit/modules/GoogleModule/gdata/tlslite/utils/AES.py D conduit/modules/GoogleModule/gdata/tlslite/utils/ASN1Parser.py D conduit/modules/GoogleModule/gdata/tlslite/utils/Cryptlib_AES.py D conduit/modules/GoogleModule/gdata/tlslite/utils/Cryptlib_RC4.py D conduit/modules/GoogleModule/gdata/tlslite/utils/Cryptlib_TripleDES.py D conduit/modules/GoogleModule/gdata/tlslite/utils/OpenSSL_AES.py D conduit/modules/GoogleModule/gdata/tlslite/utils/OpenSSL_RC4.py D conduit/modules/GoogleModule/gdata/tlslite/utils/OpenSSL_RSAKey.py D conduit/modules/GoogleModule/gdata/tlslite/utils/OpenSSL_TripleDES.py D conduit/modules/GoogleModule/gdata/tlslite/utils/PyCrypto_AES.py D conduit/modules/GoogleModule/gdata/tlslite/utils/PyCrypto_RC4.py D conduit/modules/GoogleModule/gdata/tlslite/utils/PyCrypto_RSAKey.py D conduit/modules/GoogleModule/gdata/tlslite/utils/PyCrypto_TripleDES.py D conduit/modules/GoogleModule/gdata/tlslite/utils/Python_AES.py D conduit/modules/GoogleModule/gdata/tlslite/utils/Python_RC4.py D conduit/modules/GoogleModule/gdata/tlslite/utils/Python_RSAKey.py D conduit/modules/GoogleModule/gdata/tlslite/utils/RC4.py D conduit/modules/GoogleModule/gdata/tlslite/utils/RSAKey.py D conduit/modules/GoogleModule/gdata/tlslite/utils/TripleDES.py D conduit/modules/GoogleModule/gdata/tlslite/utils/__init__.py D conduit/modules/GoogleModule/gdata/tlslite/utils/cipherfactory.py D conduit/modules/GoogleModule/gdata/tlslite/utils/codec.py D conduit/modules/GoogleModule/gdata/tlslite/utils/compat.py D conduit/modules/GoogleModule/gdata/tlslite/utils/cryptomath.py D conduit/modules/GoogleModule/gdata/tlslite/utils/dateFuncs.py D conduit/modules/GoogleModule/gdata/tlslite/utils/entropy.c D conduit/modules/GoogleModule/gdata/tlslite/utils/hmac.py D conduit/modules/GoogleModule/gdata/tlslite/utils/jython_compat.py D conduit/modules/GoogleModule/gdata/tlslite/utils/keyfactory.py D conduit/modules/GoogleModule/gdata/tlslite/utils/rijndael.py D conduit/modules/GoogleModule/gdata/tlslite/utils/win32prng.c D conduit/modules/GoogleModule/gdata/tlslite/utils/xmltools.py D conduit/modules/GoogleModule/gdata/urlfetch.py D conduit/modules/GoogleModule/gdata/webmastertools/__init__.py D conduit/modules/GoogleModule/gdata/webmastertools/service.py D conduit/modules/GoogleModule/gdata/youtube/Makefile.am D conduit/modules/GoogleModule/gdata/youtube/__init__.py D conduit/modules/GoogleModule/gdata/youtube/service.py commit ebb089a4086298a4680e68997767a160f5c8940a Author: Christian.Kirbach Date: 2010-01-08 Updated German translation M po/de.po commit 74733c92e3b3575f7b5d49fc784f832dbd81eccb Author: John Stowers Date: 2010-01-07 code clean, provate functionss listed before publin ones M conduit/gtkui/Canvas.py M conduit/gtkui/UI.py commit 35befb14b15eb56419a9e386e3fd704bebe85fb9 Author: John Stowers Date: 2010-01-07 show more appropriate hints when adding preconfigured conduits M conduit/gtkui/Canvas.py commit 5514ee85973a5dd7db0156aaa1916fad103a938b Author: John Stowers Date: 2010-01-07 update db tester to gtkbuilder M tools/test-db-wrapper/main.py R065 tools/test-db-wrapper/main.glade tools/test-db-wrapper/main.ui commit 058296007d0736686a9a9dba6c6b34ffa4f62f70 Author: John Stowers Date: 2010-01-07 remove a few more traces of glade M conduit/gtkui/Canvas.py M conduit/gtkui/ConfigContainer.py M conduit/gtkui/ConfigItems.py M conduit/gtkui/EmbedConfigurator.py M conduit/gtkui/UI.py M conduit/gtkui/WindowConfigurator.py commit 92d3989ae151bd43866b74babf65f05f98d4b0c2 Author: John Stowers Date: 2009-11-21 Port to gtkbuilder M conduit/gtkui/Canvas.py M conduit/gtkui/ConflictResolver.py M conduit/gtkui/UI.py M data/Makefile.am R062 data/conduit.glade data/conduit.ui commit 30593bd3af61822cb8ca3f15e9a7bbdc3636fcd2 Author: John Stowers Date: 2010-01-06 move preferences management into its own object M conduit/gtkui/UI.py commit 3b055823bfb25750c8f8450ef1781ec87ace9884 Author: John Stowers Date: 2010-01-06 move autostart management into a utility class M conduit/gtkui/UI.py A conduit/utils/AutostartManager.py M conduit/utils/Makefile.am commit 4fe74d492f7fa665dcee6ecd519ea2238f0e0325 Author: John Stowers Date: 2010-01-06 update to newest gnome-doc-utils M m4/gnome-doc-utils.m4 commit 6a4f38b35796666ba30590100637a86ccbb85c19 Author: John Stowers Date: 2010-01-06 Add more synchronization examples M conduit/Knowledge.py commit 78e9b62f4a429159d75cf276bb6439f6d90f1b10 Author: John Stowers Date: 2010-01-06 clean up preconfigured conduit handling M conduit/gtkui/UI.py commit ca3658a27de96cc50380b67e24c7077e17b92738 Author: Nils-Christoph Fiedler Date: 2010-01-06 Added LowGerman translation A po/nds.po commit e9a4c839963ca74589cb1465c59c64f22d9e45d2 Author: Nils-Christoph Fiedler Date: 2010-01-06 Added LowGerman translation M po/LINGUAS commit 3aad1c099dc5806f8b87ccce35f15034a69e7367 Author: Aron Xu Date: 2009-12-09 Add Simplified Chinese translation. M po/LINGUAS A po/zh_CN.po commit 2ba206942fbd310b420b07d87d14d9663806232f Author: Andrej Žnidaršič Date: 2009-11-23 Updated Slovenian translation M po/sl.po commit 42ba1f38cae62547e45350456cd7b755592129d3 Author: John Stowers Date: 2009-11-22 use system installed flickrapi >= 1.2 M conduit/modules/FlickrModule/FlickrModule.py M conduit/modules/FlickrModule/Makefile.am D conduit/modules/FlickrModule/flickrapi/LICENSE D conduit/modules/FlickrModule/flickrapi/Makefile.am D conduit/modules/FlickrModule/flickrapi/__init__.py D conduit/modules/FlickrModule/flickrapi/cache.py D conduit/modules/FlickrModule/flickrapi/exceptions.py D conduit/modules/FlickrModule/flickrapi/multipart.py D conduit/modules/FlickrModule/flickrapi/reportinghttp.py D conduit/modules/FlickrModule/flickrapi/tokencache.py D conduit/modules/FlickrModule/flickrapi/xmlnode.py M configure.ac commit 7cb6c7ad8c320dca887242030ce02cf9993aeb7d Author: John Stowers Date: 2009-11-22 update pyfacebook M conduit/modules/FacebookModule/pyfacebook/__init__.py M scripts/update-3rdparty-libs.sh commit 9ac3d372ec8d771dc2409f1d1e5526f2c08efb92 Author: John Stowers Date: 2009-11-20 set text factory to stop unicode errors M conduit/Database.py commit 5b45bf35e421bf273a3aed42079ad389b8f3e08b Author: John Stowers Date: 2009-11-20 don't die fatally on sqlite errors M conduit/Database.py commit 021d03233c86cd092b738063f8952003886ecdae Author: Jens Knutson Date: 2009-10-30 Fix ZotoModule makefile M conduit/modules/ZotoModule/Makefile.am commit 97e80c7ae4003b97e926984c2b756c5cbd6b1731 Author: Christian Kirbach Date: 2009-10-17 Updated German manual translation M help/de/de.po commit 92aaaa35027d6b2357f3c58fbc43d8a75f7c5e28 Author: Gianvito Cavasoli Date: 2009-10-05 Updated Italian translation M po/it.po commit 5d15851eba792ab54bbb35978f44f0ace3056335 Author: Alexandre Rosenfeld Date: 2009-09-20 Fixes window resizing in configuration M conduit/gtkui/WindowConfigurator.py commit ac22bdfff9b42ca70e74529efdd1a01273a5c77e Author: Alexandre Rosenfeld Date: 2009-06-12 Changed config dialog to "Restore/Close" from "Cancel/Apply". Fixed YouTube (Google module) behaviour to work with Restore. Added getter for ConfigContainer and changed Flickr config to use it. M conduit/gtkui/ConfigContainer.py M conduit/gtkui/ConfigItems.py M conduit/gtkui/WindowConfigurator.py M conduit/modules/FlickrModule/FlickrModule.py M conduit/modules/GoogleModule/GoogleModule.py commit fb064f69afb01142261d8a055ee6eac67439883a Author: Philip Withnall Date: 2009-09-13 Updated British English translation M po/en_GB.po commit 2157a38cfff1726a41e8a85377e7497d5c65e402 Author: Gianvito Cavasoli Date: 2009-09-06 Updated Italian translation M po/it.po commit 31dc602d9670dc0c805faa9f0cd252937793d266 Author: Claude Paroz Date: 2009-09-04 Updated French translation Contributed by Laurent Coudeur and Bruno Brouard M po/fr.po commit 557b23d1e4be53646a1d041566d3e8dd402f74f3 Author: Inaki Larranaga Date: 2009-08-28 Added Basque translation M po/LINGUAS commit 44b815d627132d3f76ba271448257a37b01e212a Author: Inaki Larranaga Murgoitio Date: 2009-08-28 Updated Basque language A po/eu.po commit ed7d30fc5da5d37eec572914b0f56578d37989a4 Author: Timo Jyrinki Date: 2009-08-26 Updated Finnish translation M po/fi.po commit 16b3a1f3688da09606c43356500dfbd667446ac8 Author: Flamarion Jorge Date: 2009-08-25 Updated Brazilian Portuguese translation M po/pt_BR.po commit 8f532ede9ee347f0f6bafb1109b49fbc4235f95a Author: Mario Blättermann Date: 2009-08-23 Updated German translation M po/de.po commit c32ba1103f4dbfc92038ce26dac021c29af344fc Author: António Lima Date: 2009-08-16 Updated Portuguese translation M po/pt.po commit e4204263cf0be48a7cff22ccd12110b9a1fb4e95 Author: Fran Dieguez Date: 2009-08-15 Updated Galician Translation M po/gl.po commit c32a68bb987b03a549393259b343fc5a7e80ae95 Author: Daniel Nylander Date: 2009-08-14 Updated Swedish translation M po/sv.po commit f72e5a9de7dc3ac601769d3e9b2d25c45cb208d7 Author: Daniel Nylander Date: 2009-06-14 Updated sv translation (Daniel Nylander) M po/sv.po commit ae44cc68a0bbcefb64297ed230df7e3de24451ac Author: Kjartan Maraas Date: 2009-08-07 Updated Norwegian bokmål translation. M po/nb.po commit 1a7b5098c5dcb89846618d63da1493888a4fd935 Author: Gabor Kelemen Date: 2009-07-22 Hungarian translation updated M po/hu.po commit c774c1b255142771b9b9d7a615dd68847c20408f Author: Andrew Stormont Date: 2009-07-20 Support for Mac OSX added to Wallpaper Module M ChangeLog M conduit/modules/DesktopWallpaperModule.py commit d30282d20fe8b0bacc5cb5c7d3d318c31fa63c3a Author: astormont Date: 2009-07-17 Support for Mac OSX added to Firefox 3 Module M ChangeLog M conduit/modules/ConverterModule.py M conduit/modules/Firefox3Module/Firefox3Module.py commit 03bcf91b125da4f73e33feece50bc5ba366da6b7 Author: Andrew Stormont Date: 2009-07-16 Only load FF3 module if /Users/andy/.mozilla/firefox exists M ChangeLog M conduit/modules/Firefox3Module/Firefox3Module.py commit 31476bcf3d4dd4441589e7b47d656f68067f44a2 Author: Andrew Stormont Date: 2009-07-15 2009-07-15 Andrew Stormont * conduit/conduit.real: * conduit/gtkui/UI.py: Workaround for PyGTK bug on Mac OSX M ChangeLog M conduit/conduit.real M conduit/gtkui/Tree.py M conduit/gtkui/UI.py commit e4360376a4fc10b6d03fa135d13e3517e932fe57 Author: Jorge González Date: 2009-07-12 Updated Spanish translation M po/es.po commit b916b68bbfc6f57333be63331964aa0306018b54 Author: David Planella Date: 2009-06-21 Marked multiple strings for translation Fixes Bugzilla #568442 M conduit/Knowledge.py M conduit/Main.py M conduit/Module.py M conduit/dataproviders/DataProvider.py M conduit/dataproviders/Image.py M conduit/dataproviders/__init__.py M conduit/gtkui/Canvas.py M conduit/gtkui/UI.py M conduit/modules/BackpackModule/BackpackModule.py M conduit/modules/BansheeModule/BansheeModule.py M conduit/modules/BoxDotNetModule/BoxDotNetModule.py M conduit/modules/ConverterModule.py M conduit/modules/DesktopWallpaperModule.py M conduit/modules/EvolutionModule/EvolutionModule.py M conduit/modules/FacebookModule/FacebookModule.py M conduit/modules/FeedModule/FeedModule.py M conduit/modules/FlickrModule/FlickrModule.py M conduit/modules/FspotModule/FspotModule.py M conduit/modules/GConfModule/GConfModule.py M conduit/modules/GoogleBookmarksModule.py M conduit/modules/NautilusBookmarksModule.py M conduit/modules/RhythmboxModule/RhythmboxModule.py M conduit/modules/SynceModule.py M conduit/modules/TomboyModule.py M conduit/modules/ZotoModule/ZotoModule.py M conduit/modules/iPodModule/iPodModule.py M po/POTFILES.in commit 1fb009f3a92f1876325cd8a01fe6293b80937a1f Author: John Stowers Date: 2009-07-01 Fix #575000 M NEWS M conduit/gtkui/Database.py M conduit/modules/FileModule/FileConfiguration.py M conduit/modules/FileModule/FileModule.py commit cdce2398e326d5f3cdf18f9f2b9a4f5550ed77f1 Author: John Stowers Date: 2009-07-01 Fix crash on close on Python 2.6 M conduit/modules/NetworkModule/XMLRPCUtils.py commit 7cc987cea6c8f6a1b49f46c92281cfc933b26bef Author: John Stowers Date: 2009-06-27 remove obsolete release scripts D scripts/maintainer.py D scripts/release.sh commit 2d6d78655cbf02b1d8b432a93368a49d897f93d2 Author: John Stowers Date: 2009-06-27 post release version bump M NEWS M conduit/__init__.py M configure.ac commit be139817cf1c6e27f9c5965e43f9a7c03fe8c020 Author: John Carr Date: 2009-06-27 Fix #583173 M conduit/modules/FlickrModule/flickrapi/__init__.py M conduit/modules/GoogleModule/gdata/tlslite/utils/cryptomath.py commit e8bf29817545f757404d69ab1475a151534611a2 Author: John Carr Date: 2009-06-17 Fix an iPod bug that was breaking 4 tracker test cases M conduit/modules/iPodModule/iPodModule.py commit 51d2bdf918e72ab60bcb77aa573b35bd762eee52 Author: John Carr Date: 2009-06-27 Depend on py-GIO >= 2.16.1 (earliest known good version) M configure.ac commit 7652415f0e90f0466ed31f27a4f23e56aa80e6b8 Author: John Carr Date: 2009-06-27 Remove gnomevfs M conduit/Vfs.py M conduit/__init__.py M conduit/datatypes/File.py M conduit/defs.py.in M conduit/gtkui/UI.py D conduit/platform/FileGnomeVfs.py M conduit/platform/Makefile.am M configure.ac M scripts/maintainer.py M test/python-tests/TestCoreFile.py M test/python-tests/TestCoreVfs.py M test/python-tests/common.py conduit-0.3.17/aclocal.m40000644000175000017500000015761311326116725012051 00000000000000# generated automatically by aclocal 1.11 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.64],, [m4_warning([this file was generated for autoconf 2.64. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 1995-2002 Free Software Foundation, Inc. # Copyright (C) 2001-2003,2004 Red Hat, Inc. # # This file is free software, distributed under the terms of the GNU # General Public License. As a special exception to the GNU General # Public License, this file may be distributed as part of a program # that contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # # Macro to add for using GNU gettext. # Ulrich Drepper , 1995, 1996 # # Modified to never use included libintl. # Owen Taylor , 12/15/1998 # # Major rework to remove unused code # Owen Taylor , 12/11/2002 # # Added better handling of ALL_LINGUAS from GNU gettext version # written by Bruno Haible, Owen Taylor 5/30/3002 # # Modified to require ngettext # Matthias Clasen 08/06/2004 # # We need this here as well, since someone might use autoconf-2.5x # to configure GLib then an older version to configure a package # using AM_GLIB_GNU_GETTEXT AC_PREREQ(2.53) dnl dnl We go to great lengths to make sure that aclocal won't dnl try to pull in the installed version of these macros dnl when running aclocal in the glib directory. dnl m4_copy([AC_DEFUN],[glib_DEFUN]) m4_copy([AC_REQUIRE],[glib_REQUIRE]) dnl dnl At the end, if we're not within glib, we'll define the public dnl definitions in terms of our private definitions. dnl # GLIB_LC_MESSAGES #-------------------- glib_DEFUN([GLIB_LC_MESSAGES], [AC_CHECK_HEADERS([locale.h]) if test $ac_cv_header_locale_h = yes; then AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) if test $am_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your file defines LC_MESSAGES.]) fi fi]) # GLIB_PATH_PROG_WITH_TEST #---------------------------- dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) glib_DEFUN([GLIB_PATH_PROG_WITH_TEST], [# Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in /*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in ifelse([$5], , $PATH, [$5]); do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) # GLIB_WITH_NLS #----------------- glib_DEFUN([GLIB_WITH_NLS], dnl NLS is obligatory [USE_NLS=yes AC_SUBST(USE_NLS) gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= AC_CHECK_HEADER(libintl.h, [gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc, [AC_TRY_LINK([ #include ], [return !ngettext ("","", 1)], gt_cv_func_ngettext_libc=yes, gt_cv_func_ngettext_libc=no) ]) if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc, [AC_TRY_LINK([ #include ], [return !dgettext ("","")], gt_cv_func_dgettext_libc=yes, gt_cv_func_dgettext_libc=no) ]) fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CHECK_FUNCS(bind_textdomain_codeset) fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then AC_CHECK_LIB(intl, bindtextdomain, [AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dgettext, gt_cv_func_dgettext_libintl=yes)])]) if test "$gt_cv_func_dgettext_libintl" != "yes" ; then AC_MSG_CHECKING([if -liconv is needed to use gettext]) AC_MSG_RESULT([]) AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dcgettext, [gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv], :,-liconv)], :,-liconv) fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset AC_CHECK_FUNCS(bind_textdomain_codeset) LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then AC_DEFINE(HAVE_GETTEXT,1, [Define if the GNU gettext() function is already present or preinstalled.]) GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" AC_CHECK_FUNCS(dcgettext) MSGFMT_OPTS= AC_MSG_CHECKING([if msgfmt accepts -c]) GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[ msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" ], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) AC_SUBST(MSGFMT_OPTS) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr], [CATOBJEXT=.gmo DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share and dnl and CATOBJEXT=.gmo in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [CATOBJEXT=.gmo DATADIRNAME=share], [CATOBJEXT=.mo DATADIRNAME=lib]) ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac]) LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi ]) if test "$gt_cv_have_gettext" = "yes" ; then AC_DEFINE(ENABLE_NLS, 1, [always defined to indicate that i18n is enabled]) fi dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then dnl If it is not GNU xgettext we define it as : so that the dnl Makefiles still can work. if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po AC_OUTPUT_COMMANDS( [case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac]) dnl These rules are solely for the distribution goal. While doing this dnl we only have to keep exactly one list of the available catalogs dnl in configure.in. for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done dnl Make all variables we use known to autoconf. AC_SUBST(CATALOGS) AC_SUBST(CATOBJEXT) AC_SUBST(DATADIRNAME) AC_SUBST(GMOFILES) AC_SUBST(INSTOBJEXT) AC_SUBST(INTLLIBS) AC_SUBST(PO_IN_DATADIR_TRUE) AC_SUBST(PO_IN_DATADIR_FALSE) AC_SUBST(POFILES) AC_SUBST(POSUB) ]) # AM_GLIB_GNU_GETTEXT # ------------------- # Do checks necessary for use of gettext. If a suitable implementation # of gettext is found in either in libintl or in the C library, # it will set INTLLIBS to the libraries needed for use of gettext # and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable # gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST() # on various variables needed by the Makefile.in.in installed by # glib-gettextize. dnl glib_DEFUN([GLIB_GNU_GETTEXT], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_HEADER_STDC])dnl GLIB_LC_MESSAGES GLIB_WITH_NLS if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else AC_MSG_CHECKING(for catalogs to be installed) NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS AC_MSG_RESULT($LINGUAS) fi dnl Construct list of names of catalog files to be constructed. if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly dnl find the mkinstalldirs script in another subdir but ($top_srcdir). dnl Try to locate is. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi AC_SUBST(MKINSTALLDIRS) dnl Generate list of files to be processed by xgettext which will dnl be included in po/Makefile. test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES ]) # AM_GLIB_DEFINE_LOCALEDIR(VARIABLE) # ------------------------------- # Define VARIABLE to the location where catalog files will # be installed by po/Makefile. glib_DEFUN([GLIB_DEFINE_LOCALEDIR], [glib_REQUIRE([GLIB_GNU_GETTEXT])dnl glib_save_prefix="$prefix" glib_save_exec_prefix="$exec_prefix" glib_save_datarootdir="$datarootdir" test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix=$prefix datarootdir=`eval echo "${datarootdir}"` if test "x$CATOBJEXT" = "x.mo" ; then localedir=`eval echo "${libdir}/locale"` else localedir=`eval echo "${datadir}/locale"` fi prefix="$glib_save_prefix" exec_prefix="$glib_save_exec_prefix" datarootdir="$glib_save_datarootdir" AC_DEFINE_UNQUOTED($1, "$localedir", [Define the location where the catalogs will be installed]) ]) dnl dnl Now the definitions that aclocal will find dnl ifdef(glib_configure_in,[],[ AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)]) AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)]) ])dnl # GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL]) # # Create a temporary file with TEST-FILE as its contents and pass the # file name to PROGRAM. Perform ACTION-IF-PASS if PROGRAM exits with # 0 and perform ACTION-IF-FAIL for any other exit status. AC_DEFUN([GLIB_RUN_PROG], [cat >conftest.foo <<_ACEOF $2 _ACEOF if AC_RUN_LOG([$1 conftest.foo]); then m4_ifval([$3], [$3], [:]) m4_ifvaln([$4], [else $4])dnl echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD fi]) # nls.m4 serial 3 (gettext-0.15) dnl Copyright (C) 1995-2003, 2005-2006 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ(2.50) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE(nls, [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT($USE_NLS) AC_SUBST(USE_NLS) ]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # # Copyright © 2004 Scott James Remnant . # # 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. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # # Similar to PKG_CHECK_MODULES, make sure that the first instance of # this or PKG_CHECK_MODULES is called, or make sure to call # PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_ifval([$2], [$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$PKG_CONFIG"; then if test -n "$$1"; then pkg_cv_[]$1="$$1" else PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], [pkg_failed=yes]) fi else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"` else $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD ifelse([$4], , [AC_MSG_ERROR(dnl [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT ])], [AC_MSG_RESULT([no]) $4]) elif test $pkg_failed = untried; then ifelse([$4], , [AC_MSG_FAILURE(dnl [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])], [$4]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) ifelse([$3], , :, [$3]) fi[]dnl ])# PKG_CHECK_MODULES # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless `enable' is passed literally. # For symmetry, `disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful (and sometimes confusing) to the casual installer], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/acinclude.m4]) m4_include([m4/gnome-doc-utils.m4]) m4_include([m4/intltool.m4]) m4_include([m4/python.m4]) conduit-0.3.17/help/0000777000175000017500000000000011326117107011203 500000000000000conduit-0.3.17/help/de/0000777000175000017500000000000011326117107011573 500000000000000conduit-0.3.17/help/de/figures/0000777000175000017500000000000011326117107013237 500000000000000conduit-0.3.17/help/de/figures/conduit-folder-configuration.png0000644000175000017500000004613411326117107021454 00000000000000PNG  IHDR1=psBIT|dtEXtSoftwaregnome-screenshot> IDATxw|E߻w4R%t ͂P)D(U*Vcc Q)RSH%$rwZ`ޯ׾rٙN@ @ k ɃkO\k+Go!I y?[߲l֘wvH \2w:_q'cv^JX92GNLskCDe2 +7[d‚ڿ h$){ݲb0;/0YZNYWMrN84* )A!kqgӢCoE#<$": 4ά[\=̎K)Y*9W` OXcdYF4M9'׻M4_٬^]{C{6;iV7̥xGϱoiڶ'HoxځũJNLf*olORrM4宇aoϙsN?4~=cu=;k =v"B8{إx!4mד{#-h?`vf-Sxu>$#1UՐ% Վ3EQU:m9e ع%{ Ŝ8B\&#zBChXnaNVν,3dn܄6ӧG'6nuIl,ͳONnWUcՋx^hFtX~݆i`Â9iHߐ$ ?b51KZL5?_2_` B&=:ͻ@riݜvM #/3Xo#88ȭ45MC'd M+|mz)e5Z6Z9dzvu񔫳jP2rIIq;>u:YEHdUeM %a$VաHaq>4jHN>ż1$Es8,cCyfX6b7l/%*7[G4 =~lU-wi^.D@4G`\)gI9N__b#W'R_P e56K7t$I MӸK4`ֲ#6ةd ЀZ!5",4ٸu6W:.oeΕ{q)3-c+yy+U(VҶ,yv:U7Qjj6iT7LV\r(GbhZ^o^.iIW "nwZC O&pOd.r 2۶!)%O~'w>-XiY,X3dj֨~q R'_wYFhFJy>r5tn3w&2QZ6o펮L_C+(f.Io]"TÔ 4$S٬~߶)ocKXlОCG9,3밴q !58aӌm/u]b(WNU]Z.9a:^őY_7}C'VeYu?q ̋CeߎKNN[Ҡ`]:7#?!0Z;syk ĞghҬ),]=ЮI4}j|n?#1QjMn>/74|c[P6>KƵ8 jϳoo *2nE16;ķa@f5q )&k&3wX>Х[E6%Ldh ^$GhZ7{ %_,1(JׄvIwZ6g'K+\<*CxX(;愆o| 5wkb$V.2#_jW6 o~O.rmivGbĊM+rH#fM㪰+k[MgHiZ-k#~hpϥRJQj(FP/di٢ oICQ5:kIH9sul4̊ʐMe?L Cֵm*6at23T)_d,WVY2OX.WK'kbfcz=&槒 :LȽ`@A̎04 9o~?9*3\!(* |$gnG`0٤cm=Mm}~s騨v׷anX'&7f@XϞ+-s$7+e0l^sm{koEy*H^zs%뼰{^+3 x;ho$a釲,aRJ9'O'5['$ICXŶ]p,r.С'?L\4gO ~gQ7жI4GdEZVy =Np 2 gmPCs|5 򥠰@?t[HLx.y6m۴f~[Sj" m۴Lm\سv~}_w .&f-yt`;{r}||.[E@EE;^||Q;5|)(0P+ȶ9~o]!\a8U{ӐZmS]+H?MS˥-G(Vo"FoCXƁ?"Oa䭭9_``]?M a$4 ޔOp M: { 47&?7e#}9qTԆ׷b5=u(m?ٽ|8Td㱓xvXWGDj.5?R5@NGawUըvGY z oѽ Og`6i[[kbvaՄ7enՒ o3Z2Ԭީ0?5AerT0,}U¶Ђ2ҿޖ h<,5EBYi+ɱ߬}|Y+7ro)g0(;ePU#ǎa2j~z;.Mz[ZlQ[>՝Z5iݗ.r%{EFͷEL_Vӊ9Bȷ\9tbsm:v-%߃ΡCHLLD6N/Qg$0ؼ]WL`NǮ?HX)bFl::%)LuG6jct_2;ʃb=\/bp ՜{NٯGS#{+:Il76Dyͽ@u*QPahuql2*yUJUKZ!d;?4[> @hH n[QlR8o+>:uˉ&nZf E8+=W~.Oqgm׉5 滟\yIӠL~r:NL` @PYJ))|&T8dt,Q:`ɒSʫ}@p"@ j^pbNL x5‰ F81@\Q'['β @ xGN_~W>ԭW7ǟ~c ?Ǟ={xxܥ wɧ^(;z|p`wHl[KsՋуI'eXl8-[NEQ <37luZ֒%V{։Ï>SBg֣o߾?pQ`AQ^~y>Z~xyQl`้iҴ)7a„g),,0NTt &:qDE&xn;?M7Q~S]wn$'FWH`$&&LAEa˖][oϤI-䭷g^֭K/ͳ8B{y.X~۴-[6z& V'%9 NS'-AL1Nܹ\BCCmaaa˵C93ֵ_~ɬY3!::9g#˶{E֭K͚571(`駟2g,իGHHӟu8²y~W6yΝ38zI,KL &̹s爊;w!68tׯo9_.pKx50. 9C,NLG噑A lt֣2@Pp{$ֱc'~uh_~}6וu $%%Y\Qkj׮m>uӧHMI&Ls)?""&ӧOrXA®s yi<X5w Ĝ9s$++3fI9Q6yN8G't5k6deeŒyWpp0ǎ9'#N,\0f̤Q&L<_GΝ:ɓ'RNyc/:vru'xN r 2fX퇣=NBDd]u's˜:eCgرI]'K=SĔ sYmd;SUUU$󮍪Z<(OM$#;pd@ t${hNV$I+eYq"֟){Qıwp`AE\ x5‰ F81@'&W#@ j;`CMb+/rH jĆQ-zJfs.wLvtFҭ]s.Bh_rbF?tp~2@ \[ٱ n͠IUsbMlw:A{+j@p WۮձRṊbdӱusHDH=[Q*ޚ>X5I$s7OU3璯"*gH˖-y/rWAGNÇ.&U_GB:U T̉Nd&S1ǎ}"#10:0fSH ކVrҹ=CC.-/0oAQi G o筨aυ;ýwDQVbK'2b]`}.m c&:"ltbCJ)u`hƽz7őyx7kjG?o'#V QN͚AIQ>*?44M wH:432XC{6m7߭G3GVFal:Y~hDdY_i4kEo޽yS;g̻˗+#GX[z^7$I:uOea4ӭ{ܢS;3;KIMI!5,q$f11m$K4McB=aO?7Ç0+VzK5fie#_"*:^o9WחkW3kKy8=/ɲK*J2x44QMaa:tTen#4mr`(*7*Q#b偦& Ngb]<s`0Y`؀N1NLl% AleT2MIѳY/N81@zY#,P"64Jq{u^ 6ԏP,iJ^GBC TĪ@ j^pbNL x5‰ F81@'&.uP:T'['27~uramT W߶mhUp v%E6µܺ.'Tĺt/>'44SPP@aa$44_|NjZzs'ҤiS7n„ RXXh Dzeiߡ#1DE`2,?M|F\ת5z:pEQxj՚ yG˳aFzC\zt؉+.Ff͞uZѤi3^fˏWSBg֣o߾?pBE^(BlrewcGUh@x$IneԨQlٲNW %&&2b/[JϞ=ef ,$%96mb˖ͤIeu"EQص{7}OriRt>u`W!1q+6wwb IDATʮ0|zk {eݺ9OO=Ç˵ۿ^{uo֯[ǎHKKqb[&vj/n?&Mq>t:KX̺,ιb(lٲB;oްg__ri[neիes}\r`Q1Υ$hۮ=+M"IG!{Nt:Q1cuֵc_JXj%5B$;Fn9NSV͛#Iۏh׾mFll,YվCG>5k$Ij }Ԯ]Iϧig~{ewΙ )ɼ{,Zt0PV Jm/Iݻw>|őm޼-VJEkb4hrǓi766T ==zV~}-SϜO~Hi(bE7oR3(sfs- Iiii66-sxx%FL&w3]C 6*Q֑;e˖%nO!zADDIII4nӧO^gDDDB HNN ]6_%uԱ9_jSv4 7stԮ]$4ib7ogUցbU#T' kGK/y1pf͚MFFYYY0cwy288cǎٜ4h s%33̚5fQL<8z_xI5?GEUU$Ih,2^0drss9kV)+sF=RGvan*s`SL!"2ݺй aaaL2aK<b;oLI%4M X+p{eqTw@P]pgaڼFeNWnf/2a!//l}oYt6a$UfWWF{Ysn,ϑj.ubУgO:wJ@@'Mҩ@ \s_?<ѣB@%/sbi W^pbNL x5‰ F81@xt``0|$I&~'ϜXq1m۶8YN#K7n?vGSbO./YyڮGOsA6io/EUa91Mر#gZCQ[n𚱏=ҷ߶טcޭ#Gmd8**Љz6[v\I|9vu;r^{1___e6*TdÙH)}λ(/{z|}}ex hN>̓7^ 6 KxbGX+׺+BNҾT.ָS&8gٵ(]j|Akrss-rssYK|A,y۩FYD=<p&/0|fϚL?,swsxAx`c}4jԈٳ砪jEJjwvpƝìcvمx<}g)s-ti9%.?_5&M^z<>n$ҥ8~ йse6zx"LdK/%;tرRy^& -JQIH́+qEX4NU/=Wm<>>yekuW~ \6d1 o(<0,g"IKe6zY΄@-[wE:vW㌳gl}ҋ:;vTu(K)R׬Y߯cA̘1!r.SmX||C*O?=RGXg0eTQ"$Upqv`tZHH脯~~$$t|y"H gB $5YW먪ZeuJTc֭|gkRG sHÆ4.ڵmgvTIUw\\=N1uxf,oIT-/rME@` EE{qϘpa] GlXc!EQ,ez$I6GE-]ĮJa!q5=gi_Oꢴ$]s%Is,xy.FzN ]\hMb-p'-g :_Or=:O'B⎍|p.Zƣ [nuS"k$رO̽k*] Z- '&W#@ j^pbNL x5Jzs!!\ZYoV]mj+@PT #1z=o聢(lݲlڶuuR\_^=m[VKmN7׶li111p^ݳ^z49Wlھ}%mlW6yځ -3#ݒdzI-:*6GWTKRRo]6cwe໵_23ҵuj[ؔnݺ.a^n\%O8Kەv=O>2??1N7@6P6;\{=dȽ^;rΑLzz:׷ۤb+8\m:RqVOԍ\!,, I+Ekfdee#d6lȼye x233mWVەqgJ};'WZZ8,6mď?O{u:DGG`"##IJJ%0ŒN rrrȦSRh԰!6Tzu#OSU}zahF޽ UR8}4noW~Yqveۓ]ij&v 8$q&5_Sʻ bΜ9ddfŌ3m ַ'eM‰\ ^o9 ªU\ɓ'RNyc/:vhp(̼+4iڌnΝ;uM45ة=zuZ8+'F-#zXLqn)Sk$tBXXSLqKc,W53*[ߞJ7U #EQt:`TUjʪWF1lt1t.TTOԍ-#8Pd+!WlX)W;}>WvlU]jGTK\Q)}t4\i9)L&s7li\WTz**'Fe**G\OWnȳ2KL:ٓBn׏ɓ&Uj*%}=%G3zChȲ$:)ϸGxjFt@>W#@ j^pbNL x5‰ Z T+KMeZP|-ӧ@FF)^W}RRmԎxa ~w i۶-?87tSPmgWE\b|);˗-"嘱cޭ#Gt+ketFgϞeHH7_/UAQ;cՉc :|I'VțbW_}Mnn\nn.k~Ƀ<Ȓ%orSϿ#=k&?<IREmeOR+SUe[سߝw9mVџkFZ!!ڠA}{hYڮ]; h)IZvV;,23R6 B;oիRώTׯmݲْu3VCٳ,ϙ3[23=VZ`~[esEyQ[.‘}rz%T;W_E4ϲtR>6o hz֭_]eV^xaek XDU5{8R-JKKIº#V;v C#?,|G|٧HԲe˹С[esGm QԊ>+mku81x׮ĉѬy Kcc2c,Ѿ};(X+$''a sE)Tj׮MRRM4gOVpHÆ $֬Ya Ƒm(/9j+Oҫ2եVq]i[fMlԨزu+EEEdg%KhVu n\5kYA(;3g1pKzHhȐ{ eY.T$I<6v,.˖.c1z48\/XɢE\~򒣶$=G8SԊ>+mku8￟WBӦHܙlRM&Icnjɓto;ЧO_:tH &OJ1T0ƍ鍊Йڑ]R$$t_??:YӼ$I"66kV˯x]Y\Q^rVg*CZǝwmnT #(PSYrqfxҸ(L&dYוb?ZTZUByƙ Ja^X9ޙ"QTt I-Uʦ~Rt9mxQi^vwO?)~Q*ߕFrU+EҫܥPTD:ޙ"QZ6KLe>GiUtQ;_N[;^v['UU=k&qqqnMW&!oRjGO0 ^J_xʐ7z17uq%ܛ7z5!W#@ j^pbNL x5‰ F81@'&W#@ j^[=_@p Ӽuuˉ%tqF@Py<LF@p)kbNL x5‰ F81@'&W#@ j^pb&TiUE(iW#$ NFs[vlWwꝘh$5%:HNNY Yk׋vmWO(defwzAFt+mFS'زy3N~hWvډ?g^4lII Qf:=lFTT5^+{p]=^4朥^{$Q^}`4*PWrzUUTËAQT4MuxhWvz:Y$o~=gN"27%[wz&n@j*&?q"kVW'zB0ù׷k9k$| /b?Yf&+"f|SB<YL]B82dnQ# Sޯ->]QdDJ>_ 5j_6 9u_~ԑ/ͣ1@D=p#5Q4 y&^] +pbV=ʖq]D6 t:H2`(F+<*(4nJxT(^.0##ߔ4 E%4MCՠVP1(`0A&ULpbhʎG_a5Qك^RdN'IC3G@TZ]W=v^֭{J%M{O0?H&L!05(6AфyI8bEoDlhGI2dd:e<2CCK>AP/qPP&SŏW5;MwU\(,1 &UBQ\y1t`ٳiz&Ƃ.[ѶB#{IɓI Կo?eKk۶-ZB)9PEF}vJlg@T̎XEhiY?nz?:t 88vڱn:h/:gW#tO=<_?5PRכ}T; o|A(9^z`; ,Ca>AdA 7{bǎ(il߾]tnb;W5;?Of4ý=$=EU{4 t:3qD/](@Ν;7n˗/[n<#ѹsg$Id2Yk<#;H%1rv&(MrMaf5-п5rPN%4UCS5Cv;'|ù]oOxx8<.׬YEѴiS1L(̙3_>aaa9\KȔ)SW111ŗТE ܹ3{9Kf͚;ƿZO ѽ]Sg̒IY>3>;5/ gkظaf<CEQd䫯۷/AAAݛӧoC֭c|'$Vn%PʅfgjJ;QBoF; 7lr( @IMA5i*#AS._СC1b_5EEE6l޼͛7sA;wSqn2رc6m"//^ϫʮ]ظq#ǎߟ^xg޼y\MXjr2-8r#Id䓝ϴu IDAT@Ǔ-܂\2$m6'3m4+ڴisM80N d|d`4;#0L*yPf,0%'U38bCιrkb֭uԭ[uҦM֯_o ϟO:ua^ڭy^o^%裏Xp!񄆆2g[KO?΂ ,7 믿N a߿Y_mx_m9ݷvG8Y Hɐd^+Y7FUd0Ouh*~^$''Qn EѸkbMtjU!;sC)%zI G{H~h$_?GwA5i(ىi>\Ȼ@ƍ(6#\bC܋dDQL z| wqqh,|NKK`0\ ];LBBe]DUUE`(BדjfYkZ|}}0LPUiWrR`(6IIFEXQ)2ZBn ###[>k2}zQ! (%ʐӈ)33bK}+<ìY-[^z\#1MHmվ=*h>%I1ih!;|t(g?5' 4Ep>Z]kN?## 60fXj %$<(?iiioSNY>}H@s9lسg7iddINYt:%:M^z眥,rs~X~3zH@7QTbR:4L(^&F+7W6uչs?3ZOtr>ȴiS4.v}vuk‰!r!&C1XmzGɼv !0{ }STUB1i&P}7AhB;UAdffX, ڵ_Z֑~:dff2m 4l}Ip^\>&M8Ç3fXҡC2eN>͹sx-aҳ>,mg񫦳_$uK+ڙoILFMcDѳUZDЬ6צMڴhIx|_z4)SO=ŋ/ȦM(**b̙3'|Ҧ ܹs!$&&8+}\*餦9~C͆ HK'2< %=MPrQoc6?o\0/{{[Ɯ9s6kCǴi3Q:uH=;`)6ȝ,Ǐg4.hԨO?ډcYEQ0K9KYY^ 73uFrFĴ_نt"48`؜E'۾ԩ8v,\Ν; 0x`|||1~9|oYdog__{b5W11Fמ?|}<*Go~c_SAIl6Ft>1qIs;~n rVM,bL&dY,,^e7$I,YҴ^sv%~Envj w] ):nǏG?1;4ŸݖڱlZꂳv&5%{EK #s!PtĜ5iBqjbdHrޚf4хGC@ e^0dx:==ʾZ+h1;ϊKW]_Y.420LonME1뭼3([h}.uQws81צ ƍ#9r b494 ןig i1{ +WRR|VT餪FEd21GC,>%O%IF%t::^Nf?ׄ37h$333s}Q~D{6{||tYւ\<O7@HHҞ56hhֵ">;NiKq7?Ƶmp,A:xvWGPy &vv7C[<~]h'|}!.__ CXi۰RJm(֓{r;x#Rc}x_v<Jm"%A#c7B})Wo;K&&,4C9-99|r+emEEX!.z>Aׅ㸨TvP.LrI'NO^%"VZCkZ6syW({yاB ]n_O|/eKۯjs4wj(Wmj@9Z8uEbҒxO%>lMPa?8:>_c~]F%-4;./uz{RJ_!:J_c~]FV888Oq%,(GutkUmtҰUTWĈhS1ĈbDTh 1"*4C !FD#B"ʵ!߯u]T0[ [;ipJy?WYm=`~70NHLC/OD!bZ,n>4eZ 㝓ؗ趘jq%O-'Tan0nDDY1cL6@JD-AT%,9Gf!FD2W"M$KUb㇚QL$,[EC`Z%QV7Zg )DDYmCM IENDB`conduit-0.3.17/help/de/de.po0000644000175000017500000013611711326117107012450 00000000000000# German translation of Conduit user manual. # # Mario Blättermann , 2008, 2009. # comicinker , 2008. # Andre Klapper , 2009. # Christian Kirbach , 2009. # msgid "" msgstr "" "Project-Id-Version: conduit\n" "POT-Creation-Date: 2009-04-18 13:39+0000\n" "PO-Revision-Date: 2009-10-17 17:47+0200\n" "Last-Translator: Christian Kirbach \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: German\n" "X-Poedit-Country: GERMANY\n" "X-Poedit-SourceCharset: utf-8\n" "X-Poedit-Bookmarks: -1,-1,-1,-1,-1,157,-1,-1,-1,-1\n" "Report-Msgid-Bugs-To: \n" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: C/conduit.xml:122(None) msgid "" "@@image: 'figures/conduit-gui-parts.png'; " "md5=e7c7ebe8cac03bd0768e2de105155630" msgstr "nicht-erforderlich" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: C/conduit.xml:214(None) msgid "" "@@image: 'figures/conduit-login.png'; md5=6e4fe96c2d518d23724e1a70a53fa026" msgstr "translated" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: C/conduit.xml:233(None) msgid "@@image: 'figures/conduit-dp.png'; md5=ce99ba0bdc70c854b1f8a9999435e250" msgstr "nicht-erforderlich" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: C/conduit.xml:279(None) msgid "" "@@image: 'figures/conduit-folder-configuration.png'; " "md5=ece672e8cf42e26947eee6e3fb5af7f9" msgstr "translated" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: C/conduit.xml:345(None) msgid "" "@@image: 'figures/network-sync-pc1.png'; md5=118578724965f8af01b66ccdc7e39328" msgstr "nicht-erforderlich" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: C/conduit.xml:358(None) msgid "" "@@image: 'figures/network-sync-pc2.png'; md5=565769e5f51b3decfebcfa18989ee391" msgstr "nicht-erforderlich" #: C/conduit.xml:14(title) msgid "Conduit Manual" msgstr "Conduit-Handbuch" #: C/conduit.xml:16(para) msgid "Conduit is a program that synchronizes things" msgstr "Conduit ist eine Anwendung zum Abgleich von Daten" #: C/conduit.xml:19(year) msgid "2007" msgstr "2007" #: C/conduit.xml:20(holder) msgid "John Stowers" msgstr "John Stowers" #: C/conduit.xml:23(publishername) msgid "GNOME Documentation Project" msgstr "GNOME-Dokumentationsprojekt" #: C/conduit.xml:28(firstname) msgid "John" msgstr "John" #: C/conduit.xml:29(surname) msgid "Stowers" msgstr "Stowers" #: C/conduit.xml:32(firstname) msgid "Brent" msgstr "Brent" #: C/conduit.xml:33(surname) msgid "Gueth" msgstr "Gueth" #: C/conduit.xml:39(revnumber) msgid "Conduit Manual 1.0" msgstr "Conduit-Handbuch 1.0" #: C/conduit.xml:40(date) msgid "2008-01-03" msgstr "03.01.2008" #: C/conduit.xml:44(releaseinfo) msgid "This manual describes version 1.0 of Conduit" msgstr "Dieses Handbuch beschreibt Version 1.0 von Conduit " #: C/conduit.xml:48(title) msgid "What is Conduit" msgstr "Was ist Conduit?" #: C/conduit.xml:49(para) msgid "" "Conduit " "is a synchronization application for GNOME. It allows you to synchronize " "your files, photos, emails, contacts, notes, calendar data and any other " "type of personal information and synchronize that data with another " "computer, an online service, or even another electronic device. Conduit " "manages the synchronization and conversion of data into other formats. For " "example, Conduit allows you to;" msgstr "" "Conduit " "ist ein Datenabgleichprogramm für GNOME. Es ermöglicht den Abgleich von " "Dateien, Fotos, E-Mails, Kontakten, Notizen, Kalenderdaten und vieler " "anderer Arten von persönlichen Informationen. Diese Daten können mit anderen " "Computern, Online-Datenquellen oder anderen elektronischen Geräten " "abgeglichen werden. Conduit verwaltet den Abgleich und die Umwandlung in " "andere Formate. Conduit ermöglicht beispielsweise:" #: C/conduit.xml:53(para) msgid "" "Synchronize your Tomboy notes with another computer" msgstr "" "Datenabgleich von Tomboy-Notizen mit einem anderen Computer" #: C/conduit.xml:56(para) msgid "" "Synchronize your PIM data to your mobile phone, iPod, Nokia Internet tablet, " "or between computers" msgstr "" "Datenabgleich von PIM-Daten mit einem Mobiltelefon, einem iPod, Nokia Internet Tablet, oder zwischen Computern" #: C/conduit.xml:59(para) msgid "" "Upload photos to Flickr, Picasa, Smugmug, " "Shutterfly and " "your iPod," msgstr "" "Fotos auf einen Flickr, Picasa, Smugmug, " "Shutterfly-Server " "oder einen iPod zu laden" #: C/conduit.xml:61(para) msgid "... and many more" msgstr "… und vieles, vieles mehr." #: C/conduit.xml:63(para) msgid "" "Any combination you can imagine, Conduit will take care of the conversion " "and synchronization." msgstr "" "In jeder nur denkbaren Kombination wird Conduit auf korrekte Datenumwandlung " "und korrekten Datenabgleich achten. " #: C/conduit.xml:65(title) msgid "Use Cases" msgstr "Anwendungsbereiche" #: C/conduit.xml:68(para) msgid "" "Fred wants to sync his tomboy notes with Google notebook" msgstr "" "Fred möchte seine Tomboy-Notizen mit dem Google-Notizbuch abgleichen" #: C/conduit.xml:71(para) msgid "" "Joey wants to sync whatever is on his desktop to his backpack account" msgstr "" "Jochen möchte, egal was auch immer auf seiner Arbeitsfläche ist, mit seinem " "Backpack-Konto abgleichen" #: C/conduit.xml:73(para) msgid "Nellie wants to keep a directory on his laptop and his desktop in sync" msgstr "" "Melanie möchte einen Ordner auf Ihrem Arbeitsplatz-Rechner und Ihrem Laptop " "auf dem gleichen Stand halten" #: C/conduit.xml:74(para) msgid "Paul wants to keep his evolution contacts in sync with his mobile phone" msgstr "" "Paul möchte seine Evolution-Kontakte mit den Kontakten in seinem " "Mobiltelefon abgleichen" #: C/conduit.xml:75(para) msgid "" "Steve wants to keep his gnome preferences in sync between his two computers" msgstr "" "Stefan möchte seine GNOME-Einstellungen auf seinen zwei Computern immer auf " "dem gleichen Stand halten" #: C/conduit.xml:77(para) msgid "" "John wants to keep a directory of OpenOffice documents in sync with copies held on " "Google Docs" msgstr "" "Johannes möchte einen Ordner, der OpenOffice-Dokumente enthält, mit Kopien in Google Docs abgleichen" #: C/conduit.xml:79(para) msgid "" "Pete wants to have photos saved to his server to be pushed to an external " "back up (usb hard drive / off-site ftp)" msgstr "" "Peter möchte auf seinem Server abgelegte Fotos auf einem externen " "Sicherungsmedium speichern (USB-Festplatte / FTP-Server)" #: C/conduit.xml:83(title) C/conduit.xml:114(title) C/conduit.xml:254(title) msgid "Introduction" msgstr "Einführung" # noch unvollständig übersetzt #: C/conduit.xml:84(para) msgid "" "Conduit's goals are to synchronize your data as seamlessly as possible, be " "it from remote device or remote websites. It is about extending your life as " "you see it needs to be, no longer constrained by data, devices or formats. " "Conduit enables you to take your data where you want when you want. All of " "your mobile devices could be synchronized automatically by Conduit. Home " "file back-ups to a remote server? Synced automatically." msgstr "" "Das Ziel von Conduit ist es, den Abgleich der Daten so nahtlos wie möglich " "zu gestalten, sei es von einem anderen Gerät oder einer entfernten Website. " #: C/conduit.xml:85(para) msgid "" "It may sometimes seem that Conduit is overly complicated, one of the design " "goals has always been to make the interface as simple and intuitive as " "possible. However Conduit is much more powerful then the simplistic design " "may lead on. This documentation will describe all the configuration options " "for groups and data providers, while the following gives some examples of " "items you may wish to synchronize;" msgstr "" "Es mag manchmal den Anschein haben, dass Conduit überaus kompliziert ist. " "Jedoch war eines der Ziele beim Oberflächendesign, die Anwendung so simpel " "und intuitiv wie möglich zu gestalten. Allerdings ist Conduit viel " "mächtiger, als es das simple Design vermuten lässt. Diese Dokumentation " "beschreibt alle Einstellungsoptionen für Gruppen und Datenquellen. Im " "Folgenden werden einige Beispiele für Dinge gezeigt, die abgeglichen werden " "können:" #: C/conduit.xml:88(para) msgid "" "A GNOME user might " "store information in a wide variety of places on the desktop including;" msgstr "" "Ein GNOME-Nutzer " "möchte Informationen an vielen Orten auf der Arbeitsfläche speichern, " "einschließlich:" #: C/conduit.xml:91(para) msgid "" "Evolution (email, calendar, address book)" msgstr "" "Evolution (E-Mail, Kalender, Adressbuch)" #: C/conduit.xml:95(para) msgid "" "Tomboy (notes)" msgstr "" "Tomboy (Notizen)" #: C/conduit.xml:98(para) msgid "Directories (important files)" msgstr "Ordner (wichtige Dateien)" #: C/conduit.xml:99(para) msgid "Photos" msgstr "Fotos" #: C/conduit.xml:100(para) msgid "Bookmarks (web and feeds)" msgstr "Lesezeichen (Webseiten und Nachrichtenquellen)" #: C/conduit.xml:101(para) msgid "Music" msgstr "Musik" #: C/conduit.xml:104(para) msgid "" "Delicious (bookmarks)" msgstr "" "Delicious " "(Lesezeichen)" #: C/conduit.xml:104(para) msgid "" "Gmail (bookmarks, " "calendar, feeds, email, photos)" msgstr "" "Gmail " "(Lesezeichen, Kalender, Nachrichtenquellen, E-Mail, Fotos)" #: C/conduit.xml:104(para) msgid "" "Flickr (photos)" msgstr "" "Flickr (Fotos)" #: C/conduit.xml:104(para) msgid "" "The user might also use one of the many popular online services including " "" msgstr "" "Der Benutzer könnte einen der vielen populären Online-Dienste nutzen wollen, " "wie beispielsweise " #: C/conduit.xml:105(para) msgid "A second laptop, also running GNOME" msgstr "Ein zweiter Laptop, auf dem ebenfalls GNOME läuft" #: C/conduit.xml:105(para) msgid "A mobile phone" msgstr "Ein Mobiltelefon" #: C/conduit.xml:105(para) msgid "" "A Nokia 770/800" msgstr "" "Ein Nokia 770/800" #: C/conduit.xml:105(para) msgid "" "A Palm or Windows Mobile Pocket PC" msgstr "" "Ein Pocket-PC mit PalmOS oder Windows Mobile" #: C/conduit.xml:105(para) msgid "An iPod" msgstr "Ein iPod" #: C/conduit.xml:105(para) msgid "" "They probably also own another electronic device such as " msgstr "" "Vielleicht verfügen Sie über weitere elektronische Geräte wie " #: C/conduit.xml:107(para) msgid "" "Its hard enough keeping your information organized when limited to the " "desktop, let alone the added burden of keeping your information in sync with " "any of the other services or devices listed above." msgstr "" "Es ist ohnehin schwer genug, Informationen bloß auf der Arbeitsfläche zu " "organisieren, und dann auch noch synchron auf den oben aufgelisteten " "Diensten oder Geräten zu halten." #: C/conduit.xml:108(para) msgid "" "Our goal for Conduit is to allow GNOME users to keep their information in " "sync. Irrespective of the type, irrespective of the way in which that " "information is stored. Conduit should just work." msgstr "" "Unser Ziel für Conduit ist es, den GNOME-Benutzern zu ermöglichen, " "Informationen auf dem gleichen Stand zu halten, ohne Rücksicht darauf, um " "welche Art von Information es sich handelt. Conduit soll einfach " "funktionieren." #: C/conduit.xml:112(title) msgid "Understanding the Conduit Interface" msgstr "Die Conduit-Benutzeroberfläche" #: C/conduit.xml:115(para) msgid "" "Conduit has a few basic concepts worth understanding before you begin. " "Knowing these concepts will help you discover things that you never knew you " "could keep in sync, for example, uploading photos right from your mobile " "phone to Picasa!" msgstr "" "Conduit basiert auf einigen grundlegenden Konzepten, die man vor Beginn " "verstehen sollte. Das Wissen über diese Konzepte wird Sie Dinge entdecken " "lassen, von denen Sie nie gedacht hätten, dass ein Datenabgleich möglich " "ist. Beispielsweise das Hochladen von Fotos direkt von Ihrem Mobiltelefon " "zum Bilderdienst Picasa! " #: C/conduit.xml:118(title) msgid "Conduit GUI" msgstr "Conduit-Benutzeroberfläche" #: C/conduit.xml:125(para) msgid "The Parts of the Conduit GUI" msgstr "Die Bestandteile der Conduit-Benutzeroberfläche" #: C/conduit.xml:131(para) msgid "" " shows the Conduit interface's four " "main components;" msgstr "" " zeigt die vier Hauptkomponenten " "der Conduit-Benutzeroberfläche:" #: C/conduit.xml:133(para) msgid "" "The file, edit and help menus store operations which apply to all groups. " "For more information on the contents of these menus, see below." msgstr "" "Die Menüs Datei, Bearbeiten und Hilfe bieten Aktionen, die auf alle Gruppen " "angewendet werden. Für weitere Informationen über den Inhalt dieser Menüs, " "siehe unten." #: C/conduit.xml:133(para) msgid "The Menu" msgstr "Das Menü" #: C/conduit.xml:134(para) msgid "" "Located on the left hand side of the window, lists all of the data providers " "that are detected and ready for use on your system." msgstr "" "Listet an der linken Seite des Fensters alle Datenquellen auf, die auf Ihrem " "System gefunden wurden und verwendet werden können." #: C/conduit.xml:134(para) msgid "" "Data providers are the source or destination of data you wish to sync. " "Please refer to the Data Provider section of the " "documentation to receive instructions on how to configure each data provider." msgstr "" "Datenquellen sind die Quelle oder das Ziel der Daten, die abgeglichen werden " "sollen. Für Anweisungen über die Konfiguration jeder dieser Datenquellen " "ziehen Sie bitte den Abschnitt Datenquellen zu Rate." #: C/conduit.xml:134(para) msgid "The Data Provider Pane " msgstr "Die Datenquellen-Teilfenster " #: C/conduit.xml:135(para) msgid "" "Used to create groups of data providers to synchronize. Drag a data source " "to the left of the canvas pane and one or more data sinks to the right of " "the data pane to create a group. For more explanation on groups please check " "." msgstr "" "Wird verwendet, um Gruppen von Datenquellen zum Abgleichen anzulegen. Ziehen " "Sie eine Datenquelle in die linke Hälfte des Ansichtsfensters und einen oder " "mehrere Datenempfänger in die rechte Hälfte, um eine Gruppe anzulegen. " "Nähere Erläuterungen über Gruppen finden Sie in ." #: C/conduit.xml:135(para) msgid "The Canvas Pane " msgstr "Das Ansichtsteilfenster " #: C/conduit.xml:136(para) msgid "" "If you receive any conflict notifications while trying to run a sync job " "they will be listed here. For information on how to deal with possible " "conflicts please check the Conflicts and Resolutions " "section of the documentation." msgstr "" "Eventuelle Fehlermeldungen während eines Datenabgleichs werden hier " "angezeigt. Weitere Informationen über den Umgang mit möglichen " "Fehlermeldungen finden Sie im Abschnitt Konflikte und Lösungen in dieser Dokumentation." #: C/conduit.xml:136(para) msgid "The Conflicts Pane " msgstr "Das Konflikte-Teilfenster " #: C/conduit.xml:140(title) msgid "The Menus" msgstr "Die Menüs" #: C/conduit.xml:142(title) msgid "The File Menu" msgstr "Das Datei-Menü" #: C/conduit.xml:144(para) msgid "" "FileSave Saves all configured synchronization groups. Groups are saved " "automatically when you exit Conduit if you have selected Save " "Settings on Exit in " msgstr "" "DateiSpeichern Conduit speichert beim Beenden der Anwendung alle angelegten " "Gruppen. Wenn Sie diese Option nicht markiert haben, werden alle " "Datenquellen, Gruppen und deren beider Einstellungen gespeichert, wenn Sie " "Automatisch beim Beenden speichern im gewählt haben." #: C/conduit.xml:145(para) msgid "" "FileSynchronize All Synchronizes all groups at the same time. You can " "still run each sync group separately (see the Groups " "section), but this saves you the time of having to select and manually going " "through each group to start the sync process." msgstr "" "DateiAlles abgleichen Gleicht alle Gruppen gleichzeitig ab. Sie können " "auch jede Gruppe separat abgleichen (siehe im Abschnitt Gruppen), aber diese Option erspart es Ihnen, alle Gruppen einzeln " "auszuwählen, um den Abgleichvorgang zu starten." #: C/conduit.xml:146(para) msgid "" "FileQuit Closes conduit. You will be prompted to stop any synchronization " "currently in progress." msgstr "" "DateiBeenden Beendet Conduit. Bei eventuell noch laufenden " "Datenabgleichvorgängen wird um eine Bestätigung gebeten." #: C/conduit.xml:150(title) msgid "The Edit Menu" msgstr "Das Bearbeiten-Menü" #: C/conduit.xml:152(para) msgid "" "EditClear Canvas Removes all configurations, data providers, and groups from the " "canvas pane. This allows you start using the canvas as it was a clean slate. " "The best time to use this is when you are re-configuring a large portion of " "your sync groups. There is no quick way to revert back after selecting this " "setting." msgstr "" "BearbeitenAnsichtsteilfenster " "löschen. Entfernt alle Konfigurationen, " "Datenquellen und Gruppen aus dem Ansichtsteilfenster. Das erlaubt Ihnen, das " "Ansichtsfenster als leeres Blatt zu starten. Nützlich ist dies, wenn Sie den " "größten Teil der Gruppen neu konfigurieren wollen. Allerdings gibt es keinen " "einfachen Weg, nach dem Löschen Ihre alte Konfiguration zurück zu holen." #: C/conduit.xml:153(para) msgid "" "EditPreferences Global Conduit settings that effect all of your sync groups and " "basic Conduit operations. For more information please see " msgstr "" "BearbeitenEinstellungen Globale Conduit-Einstellungen, die sich auf alle " "Datenabgleichsgruppen und auf grundlegende Conduit-Aktionen auswirken. " "Weitere Informationen finden Sie in ." #: C/conduit.xml:157(title) msgid "The Help Menu" msgstr "Das Hilfe-Menü" #: C/conduit.xml:159(para) msgid "" "HelpDevelopers If you are developer, and interested in contributing to Conduit, " "then this option includes links to all the appropriate documentation." msgstr "" "HilfeEntwickler Wenn Sie als Entwickler an Conduit mitarbeiten wollen, finden " "Sie hier alle Links zu geeigneter Dokumentation." #: C/conduit.xml:160(para) msgid "" "HelpContents Shows this help document." msgstr "" "HilfeInhalte Zeigt dieses Hilfedokument an." #: C/conduit.xml:161(para) msgid "" "HelpAbout Shows the version number and a list of Conduit developers." msgstr "" "HilfeInfo Zeigt die Versionsnummer und die Namen der Entwickler an." #: C/conduit.xml:166(title) msgid "The Preferences Window" msgstr "Das Einstellungsfenster" #: C/conduit.xml:167(para) msgid "" "The Conduit preferences is accessed from the Edit menu. Any setting or " "change that you make within the preferences menu affect all of your sync " "groups and basic Conduit operations." msgstr "" "Die Conduit-Einstellungen erreichen Sie über das Bearbeiten-Menü. Jede im " "Einstellungsdialog vorgenommene Änderung wird auf alle Datenabgleichsgruppen " "und Conduit-Aktionen angewendet." #: C/conduit.xml:169(title) msgid "Configuration Tab" msgstr "Reiter »Einstellungen«" #: C/conduit.xml:170(para) msgid "" "The configuration tab is where all of Conduit's global settings are " "configured. There are six global settings:" msgstr "" "In diesem Reiter werden die globalen Conduit-Einstellungen angepasst. Es " "gibt sechs globale Einstellungen:" #: C/conduit.xml:173(guilabel) msgid "Save Settings on Exit" msgstr "Einstellungen beim Beenden speichern" #: C/conduit.xml:174(para) msgid "" "Instructs Conduit that all configured dataproviders and groups should be " "saved when the application exits." msgstr "" "Weist Conduit an, beim Beenden der Anwendung alle konfigurierten " "Datenquellen und Gruppen zu speichern." #: C/conduit.xml:177(guilabel) msgid "Show Status Icon" msgstr "Zeige Benachrichtigungssymbol" #: C/conduit.xml:178(para) msgid "" "Shows a status icon in the notification area. This icon animates to indicate " "a sync is in progress." msgstr "" "Zeigt das Benachrichtigungssymbol im Benachrichtigungsfeld. Dieses Symbol " "wird animiert, während ein Datenabgleich stattfindet." #: C/conduit.xml:181(guilabel) msgid "Minimize to Notification Area" msgstr "Ins Benachrichtigungsfeld minimieren" #: C/conduit.xml:182(para) msgid "" "Instructs Conduit to minimize to the notification area instead of to the " "panel." msgstr "" "Weist Conduit an, das Anwendungsfenster ins Benachrichtigungsfeld zu " "minimieren anstatt ins Panel." #: C/conduit.xml:185(guilabel) msgid "Use Built in Web Browser" msgstr "Eingebauten Webbrowser verwenden" #: C/conduit.xml:186(para) msgid "" "When a data provider requires that you log onto a website, this option tells " "Conduit to use its own web browser to do so." msgstr "" "Für den Fall, dass eine Datenquelle eine Anmeldung erfordert, öffnet Conduit " "den eingebauten Webbrowser, falls diese Option aktiviert ist." #: C/conduit.xml:188(guilabel) msgid "When an Item Has Been Deleted" msgstr "Wenn ein Eintrag entfernt wurde" #: C/conduit.xml:189(guilabel) msgid "Where There is a Two Way Conflict" msgstr "Bei einem Zweiwege-Konflikt" #: C/conduit.xml:193(title) msgid "Data Providers Tab" msgstr "Reiter »Datenquellen«" #: C/conduit.xml:194(para) msgid "" "This tab shows a list of the data providers that are currently installed." msgstr "" "Dieser Reiter zeigt eine Liste der gegenwärtig installierten Datenquellen" #: C/conduit.xml:197(title) msgid "Data Conversions Tab" msgstr "Reiter »Datenumwandler«" #: C/conduit.xml:198(para) msgid "" "This tab lists the data conversions that Conduit is capable of performing." msgstr "" "Dieser Reiter listet die Datenumwandlungen auf, zu denen Conduit in der Lage " "ist." #: C/conduit.xml:201(title) msgid "Mapping DB" msgstr "Datenbank-Zuordnung" # Eigentlich geht es ja hier nicht vorrangig um das Löschen, deswegen hatte ich ursprünglich «einstellen» geschrieben. Vielleicht wäre auch «anpassen» eine Idee. #: C/conduit.xml:202(para) msgid "" "This is a list of the UID that Conduit uses to maintain accurate sync data " "from different sources. Here you have the option to clear the mapping " "database." msgstr "" "Dies ist eine Liste von UIDs, die Conduit verwendet, um den Datenabgleich " "der Daten aus verschiedenen Quellen korrekt zu handhaben. Hier haben Sie die " "Möglichkeit, die Datenbank-Zuordnung zu löschen." #: C/conduit.xml:206(title) msgid "The Web Login Window" msgstr "Das Web-Anmeldefenster" #: C/conduit.xml:207(para) msgid "" "Sometimes you will be required to log into a website associated with certain " "data providers. The frequency at which you may have to log in is not " "determined by Conduit, but by the security policy of the respective data " "provider. For example, Box.net requires you to log in every time Conduit is " "run, whereas Flickr only requires you to log in once, to give permission to " "Conduit to upload photos. If you are required to log into a website, and you " "have selected the Use Built in Web Browser from the " "Conduit preferences, then a window will pop up like the one shown below." msgstr "" "Verschiedene Datendienste erfordern eine Anmeldung auf deren Webseite. Die " "Zeitabstände, in denen Sie sich jeweils neu anmelden müssen, werden nicht " "durch Conduit bestimmt, sondern durch die Sicherheitsbestimmungen des " "jeweiligen Anbieters. Beispielsweise erbittet Box.net jedes mal beim Start " "von Conduit eine neue Anmeldung, andererseits ist für den Bilderdienst " "Flickr nur eine einzige Anmeldung nötig, um Fotos übertragen zu können. Wenn " "auf einer Webseite eine Anmeldung nötig ist und die Option " "Eingebauten Webbrowser benutzen in den Conduit-" "Einstellungen aktiviert wurde, wird ein Fenster wie das nachfolgende " "geöffnet." #: C/conduit.xml:210(title) msgid "Conduit Login Window" msgstr "Conduit-Anmeldefenster" #: C/conduit.xml:217(para) msgid "The window shown when logging into data provider websites" msgstr "Beim Anmelden auf einer Datenquellen-Website angezeigtes Fenster" #: C/conduit.xml:225(title) msgid "Data Providers and Groups" msgstr "Datenquellen und Gruppen" #: C/conduit.xml:226(para) msgid "" "Conduit represents the things your want to synchronize graphically. When " "data providers get added to the canvas, they get arranged into so called " "groups. A group is a collection of data providers that share data. In the " "figure below you will see the following parts" msgstr "" "Conduit stellt den Datenabgleich grafisch dar. Sobald Datenquellen zum " "Ansichtsfenster hinzugefügt werden, werden sie in so genannten Gruppen " "angeordnet. Eine Gruppe ist eine Ansammlung von Anbietern, welche Daten " "austauschen. Im unten stehenden Bild sehen Sie folgende Teile:" #: C/conduit.xml:229(title) msgid "Conduit Depicts Synchronizations Graphically" msgstr "Conduit stellt Datenabgleiche grafisch dar" #: C/conduit.xml:236(para) msgid "Parts of a Synchronization Group" msgstr "Teile einer Datenabgleichsgruppe" #: C/conduit.xml:243(para) msgid "" "A data provider for synchronizing two way whose status indicates that it is " "ready to be synchronized." msgstr "" "Eine Datenquelle zum Abgleichen in zwei Richtungen, dessen Status anzeigt, " "dass er bereit zum Datenabgleich ist." #: C/conduit.xml:244(para) msgid "" "A group containing two folder dataproviders. The arrow has two ends, " "indicating that the two dataproviders will undergo a two way " "synchronization, that is data will flow in both directions, and both folders " "will contain the same information once the sync finishes." msgstr "" "Eine Gruppe, die zwei Datenquellen in Form von Ordnern enthält. Der Pfeil " "hat zwei Spitzen, was ein Zweiwege-Datenabgleich für diese Gruppe anzeigt. " "Das bedeutet, dass die Daten in zwei Richtungen fließen, wobei beide Ordner " "die gleichen Informationen enthalten werden, sobald der Datenabgleich " "beendet ist." #: C/conduit.xml:245(para) msgid "" "A second folder data provider. By convention, data providers that lie on the " "right side of groups are called data sinks. This is because during a one way " "sync, data can only flow into them." msgstr "" "Ein zweiter Datenquellen-Ordner. Nach Konvention sind Datenquellen auf der " "rechten Seite einer Gruppe Datenempfänger. Bei einem Einweg-Datenabgleich " "können die Daten nur in dieser Richtung fließen." #: C/conduit.xml:246(para) msgid "" "A Facebook and Picasa data provider for uploading images to those sites. " "Notice that that the group has three data providers, and the arrow has " "changed to indicate that data will flow in only one direction, that is " "images will be uploaded from F-Spot to Facebook and Picasa." msgstr "" "Ein Facebook- und Picasa-Datendienst zum Übertragen von Bildern auf deren " "Seiten. Beachten Sie, dass die Gruppe drei Datenquellen enthält und der " "Pfeil so verändert wurde, dass die Daten nur in einer Richtung fließen. Das " "bedeutet, dass Bilder aus F-Spot zu Facebook und Picasa übertragen werden." #: C/conduit.xml:251(title) msgid "Synchronizing Something" msgstr "Datenabgleichsvorgänge" #: C/conduit.xml:252(para) msgid "" "This section describes the steps required to synchronize two data providers. " "The example given illustrates how to synchronize two folders but the " "concepts are applicable to anything you wish to synchronize. If you need " "more information on specific settings please refer to the corresponding " "section of the documentation." msgstr "" "Dieser Abschnitt beschreibt die zum Datenabgleich zweier Datenquellen " "auszuführenden Schritte. Das gegebene Beispiel beschreibt den Datenabgleich " "zweier Ordner, aber die Konzepte sind auf jeden möglichen Fall anwendbar. " "Weitere Informationen über spezifische Einstellungen finden Sie in den " "entsprechenden Abschnitten der Dokumentation." #: C/conduit.xml:255(para) msgid "" " contains two groups. This section " "will describe the steps to recreate those groups." msgstr "" " beinhaltet zwei Gruppen. Dieser " "Abschnitt beschreibt die Schritte,um diese Gruppen zu erstellen." #: C/conduit.xml:257(para) msgid "The top group depicts a two way synchronization of two folders" msgstr "" "Die obere Gruppe stellt einen Zweiwege-Datenabgleich zweier Ordner dar." #: C/conduit.xml:258(para) msgid "" "The bottom group depicts a one way sync of images, from F-Spot to Facebook, " "and to the Picasa web albums." msgstr "" "Die untere Gruppe stellt einen Einweg-Datenabgleich von Bildern dar, von F-" "Spot zu Facebook und den Picasa-Webalben." #: C/conduit.xml:262(title) msgid "Example 1: Synchronizing Two Folders" msgstr "Beispiel 1: Abgleichen zweier Ordner" #: C/conduit.xml:263(para) msgid "" "The following steps will recreate the two way synchronization group shown as " "#1 in the figure above." msgstr "" "Folgende Schritte erstellen den Zweiwege-Datenabgleich, wie er in " "#1 im Bild oben gezeigt wird." #: C/conduit.xml:265(para) msgid "" "On your desktop create three folders named folder1, folder2, and folder3. " "Drag a file of your choice into folder1." msgstr "" "Legen Sie drei Ordner mit den Name Ordner1, Ordner2 und Ordner3 auf Ihrer " "Arbeitsfläche an. Ziehen Sie eine Datei Ihrer Wahl in den Ordner1." #: C/conduit.xml:266(para) C/conduit.xml:305(para) msgid "Start Conduit" msgstr "Starten Sie Conduit." #: C/conduit.xml:268(para) msgid "Add a data provider for folder1" msgstr "Fügen Sie eine Datenquelle für Ordner1 hinzu." #: C/conduit.xml:269(para) msgid "" "From the data provider pane, drag the folder data provider and drop it on " "the left hand side of the canvas pane. This will be the data source that we " "are going to sync from." msgstr "" "Ziehen Sie aus dem Datenquellen-Teilfenster eine Ordner-Datenquelle auf die " "linke Seite des Ansichtsteilfensters. Das wird die Datenquelle als " "Ausgangspunkt des Datenabgleichs." #: C/conduit.xml:272(para) msgid "Configure folder1" msgstr "Einstellungen für Ordner1" #: C/conduit.xml:275(title) msgid "Configuring Folder 1" msgstr "Einstellungen für Ordner 1" #: C/conduit.xml:273(para) msgid "" "Double click on the data provider you recently dropped on the canvas. This " "will bring up the folder configuration window as shown below. Enter " "something memorable in the name field and change the Folder " "Location to the folder you created in step 1. " msgstr "" "Klicken Sie doppelt auf die Datenquelle, die Sie gerade in das " "Ansichtsteilfenster gezogen haben. Ein Konfigurationsfenster wie das unten " "stehende wird angezeigt. Geben Sie einen passenden Namen ein und ändern Sie " "das Ziel des Ordners zu dem Ordner, den Sie in Schritt " "1 erstellt haben. " #: C/conduit.xml:287(para) msgid "Add a data provider for folder2" msgstr "Fügen Sie eine Datenquelle für Ordner2 hinzu" #: C/conduit.xml:288(para) msgid "" "Drag another folder data provider from the pane on the left. This time drop " "it adjacent to the folder1 dataprovider. This should result in an arrow " "connecting it to folder1 being created." msgstr "" "Ziehen Sie eine weitere Datenquelle aus dem linken Teilfenster in das " "Ansichtsteilfenster, diesmal jedoch neben die Ordner1-Datenquelle. Dies " "sollte einen Pfeil erzeugen, der Ordner1 und Ordner2 verbindet." #: C/conduit.xml:291(para) msgid "Configure folder2" msgstr "Einstellungen für Ordner2" #: C/conduit.xml:292(para) msgid "" "Configure the data provider so that its Folder Location " "points to folder2 on the desktop, and importantly, its " "Folder Name is the same as that entered in step " "#4." msgstr "" "Konfigurieren Sie die Datenquelle so, dass der Ort des Ordners auf den folder2 auf der Arbeitsfläche zeigt. " "Wichtig ist außerdem, dass der Name des Ordners der " "gleiche ist, den Sie in Schritt 4 angegeben haben." #: C/conduit.xml:295(para) msgid "Configure the synchronization parameters" msgstr "Einstellen der Datenabgleichsparameter" #: C/conduit.xml:296(para) msgid "" "Right click on the associated group, and under sync options, select a two " "way sync. Since this is just a basic run through on how to setup a sync we " "are not going to go through any advanced syncing options in this section of " "the documentation. If you wish more information on the options available, " "please see ." msgstr "" "Klicken Sie mit der rechten Maustaste auf die zugehörige Gruppe. Aus den " "Datenabgleichsoptionen wählen Sie den Zweiwege-Datenabgleich. Weil dies eine " "grundlegende Option beim Konfigurieren eines Datenabgleichs ist, werden wir " "zunächst in diesem Abschnitt der Dokumentation nicht auf die erweiterten " "Einstellungen eingehen. Wenn Sie weitere Informationen zu den Einstellungen " "wünschen, lesen Sie bitte unter weiter." #: C/conduit.xml:298(para) msgid "" "Synchronize the two folders by right clicking on them and selecting sync, or " "from the File menu. Once the sync is finished you should see the file that " "you placed in folder1 on your desktop within folder2." msgstr "" "Der Datenabgleich kann entweder durch Rechtsklick und dann Auswahl von " "Datenabgleich oder über das Datei-Menü gestartet werden. Sobald der " "Datenabgleich beendet ist, können Sie die Datei, welche Sie im Ordner1 " "platziert haben, in Ordner2 sehen." #: C/conduit.xml:302(title) msgid "Example 2: Exporting Images to Multiple Destinations" msgstr "Beispiel 2: Exportieren von Bildern zu verschiedenen Zielen" #: C/conduit.xml:303(para) msgid "" "The second group shown in shows a " "single F-Spot data source exporting its photos to two data sinks, a Facebook " "one, and a Picasa one." msgstr "" "Die zweite Gruppe, die in gezeigt " "wird, stellt eine F-Spot-Quelle dar, die ihre Daten zu zwei Datenempfängern " "schickt, einem bei Facebook und einem bei Picasa." #: C/conduit.xml:306(para) msgid "Start F-Spot" msgstr "Starten Sie F-Spot " #: C/conduit.xml:307(para) msgid "" "Drag a F-Spot data provider from the data provider pane and drop it onto an " "empty spot on the canvas. A new group containing just the F-Spot data " "provider will be created." msgstr "" "Ziehen Sie eine Datenquelle aus dem Datenquellen-Teilfenster auf eine freie " "Stelle des Ansichtsteilfensters. Eine neue Gruppe wird erstellt, welche " "zunächst nur die Datenquelle F-Spot zeigt." #: C/conduit.xml:308(para) msgid "" "Drag Facebook and Picasa data providers into the Group that was just created." msgstr "" "Ziehen Sie die Datenquellen Facebook und Picasa auf die Gruppe, welche eben " "erstellt wurde." #: C/conduit.xml:309(para) msgid "Configure the data providers by double clicking on them." msgstr "" "Ändern Sie die Einstellungen für die Datenquellen, indem Sie darauf zweimal " "klicken." #: C/conduit.xml:310(para) msgid "" "Now synchronize the group to upload photos. You will be prompted to log into " "Facebook using the Conduit login window, shown in ." msgstr "" "Gleichen Sie jetzt die Gruppe ab, um Fotos zu übertragen. Sie werden über " "ein Anmeldefenster von Conduit gebeten, sich bei Facebook anzumelden, wie " "in Bild zu sehen ist." #: C/conduit.xml:314(title) msgid "Summary" msgstr "Zusammenfassung" #: C/conduit.xml:315(para) msgid "" "All sync operations work exactly like this. The only difference is the data " "you are syncing and the providers you are using. You always follow the same " "sequence of steps," msgstr "" "Alle Abgleichvorgänge arbeiten genauso wie hier beschrieben. Die einzigen " "Unterschiede sind die abgeglichenen Daten und die verwendeten Datenquellen. " "Sie folgen jedoch immer diesen Arbeitsschritten:" #: C/conduit.xml:317(para) msgid "Add dataproviders to create a new group, or to an existing group." msgstr "" "Fügen Sie Datenquellen zu einer neuen Gruppe oder einer bereits " "existierenden Gruppe hinzu." # «» wäre hier vielleicht auch möglich, steht aber im Originalstring im emphasis-Tag. #: C/conduit.xml:318(para) msgid "" "Configure the data providers. Each data provider requires a unique " "configuration. For reference on these please the Data Providers section of the documentation." msgstr "" "Konfigurieren Sie die Datenquellen. Jede Datenquelle benötigt eine eigene " "Konfiguration. Dokumentation dazu finden Sie im Abschnitt " "Datenquellen in dieser Dokumentation." #: C/conduit.xml:319(para) msgid "Configure the group, selecting what should happen on conflict, etc." msgstr "" "Konfigurieren Sie eine Gruppe, legen Sie eine Konfliktlösung fest, usw." #: C/conduit.xml:320(para) msgid "Synchronize the dataproviders as you wish." msgstr "Gleichen Sie die Datenquellen auf Wunsch ab." #: C/conduit.xml:325(title) msgid "Network Synchronization" msgstr "Netzwerk-Datenabgleich" #: C/conduit.xml:326(para) msgid "" "If you have two computers at home, Conduit can be used to synchronize the " "data between them, directly, without first having to store the data " "somewhere else first. The steps below will illustrate how to synchronize " "Tomboy notes on two computers, called nzjrs-desktop and nzjrs-laptop. The " "following key will be used to help explain the setup procedure." msgstr "" "Wenn Sie zu Hause zwei Computer haben, können Sie Conduit zum direkten " "Abgleichen von Daten zwischen diesen beiden Computern verwenden, ohne dass " "zuvor irgendwo Daten gespeichert werden müssen. Die nachfolgenden Schritte " "zeigen, wie Tomboy-Notizen auf zwei Computern abgeglichen werden können, " "nennen wir sie nzjrs-desktop und nzjrs-laptop. Der folgende Schlüssel wird " "dabei helfen, die Einstellungsprozedur zu erklären. " #: C/conduit.xml:329(para) msgid "" " Image " "taken on the first computer." msgstr "" " Auf dem " "ersten Computer aufgenommenes Bild." #: C/conduit.xml:330(para) msgid "" " Image " "taken on the second computer." msgstr "" " Auf dem " "zweiten Computer aufgenommenes Bild." #: C/conduit.xml:335(title) msgid "Network Synchronization Tip" msgstr "Tipp zum Netzwerk-Datenabgleich" #: C/conduit.xml:336(para) msgid "" "The process below, although describing Tomboy note synchronization, could be " "suitably modified to synchronize all sorts of data between two computers, " "including Contacts, Calendar information, and even F-Spot photos." msgstr "" "Obwohl der unten stehende Prozess den Abgleich von Tomboy-Notizen " "beschreibt, kann er leicht angepasst werden, um alle Arten von Daten " "zwischen Computern auszutauschen, einschließlich Kontakten, " "Kalendereinträgen und Fotos von F-Spot." #: C/conduit.xml:341(title) msgid "Configuration of the First Computer" msgstr "Einstellungen für den ersten Computer" #: C/conduit.xml:339(para) msgid "" "On the first computer create a synchronization group connecting Tomboy to " "the Network dataprovider, which is listed in the Miscellaneous category in " "the dataprovider pane. This makes Tomboy available for synchronization on " "the second computer. " msgstr "" "Erstellen Sie auf dem ersten Computer eine Datenabgleichsgruppe, welche " "Tomboy und eine Netzwerk-Datenquelle miteinander verbindet. Netzwerk-" "Datenquellen finden Sie in der Kategorie »Verschiedenes«. Dies ermöglicht es " "Tomboy, seine Daten mit einem zweiten Computer abzugleichen. " #: C/conduit.xml:351(para) msgid "" "After a short delay, this will result in a new category being created on the " "second computer. The category will take the name of the first computer, " "nzjrs-desktop in my case, and it shall contain any dataproviders currently " "available for synchronization." msgstr "" "Nach einer kurzen Verzögerung führt das zur Erstellung einer neuen Kategorie " "auf dem zweiten Computer. Die Kategorie übernimmt den Namen des ersten " "Computers, in diesem Fall »nzjrs-desktop«, und beinhaltet alle Datenquellen, " "die zum Datenabgleich zur Verfügung stehen." #: C/conduit.xml:354(title) msgid "Configuration of the Second Computer" msgstr "Einstellungen für den zweiten Computer" #: C/conduit.xml:352(para) msgid "" "Still on the second computer, drag the Tomboy dataprovider from the newly " "created category onto the canvas. Notice how its name is Remote Tomboy, " "indicating it refers to data on the remote, or first, computer. " msgstr "" "Ziehen Sie die Tomboy-Datenquelle aus der neu erstellten Kategorie in die " "Abgleichansicht. Beachten sie, dass der Name der Datenquelle nun »Tomboy " "entfernt« lautet, was auf die Daten auf dem entfernten (oder ersten) Computer " "verweist. " #: C/conduit.xml:364(para) msgid "Finally, on the second computer, start the sync in the normal manner." msgstr "" "Zum Schluss starten Sie auf dem zweiten Computer wie gewohnt den " "Datenabgleich." #: C/conduit.xml:365(para) msgid "Your tomboy notes should now be synchronized between the two computers." msgstr "" "Ihre Tomboy-Notizen sollten nun zwischen den beiden Computern abgeglichen " "sein. " #: C/conduit.xml:368(title) msgid "File Synchronization" msgstr "Dateiabgleich" #: C/conduit.xml:369(para) msgid "" "Due to performance and security reasons, we do not recommend using the " "network sync feature to synchronize large files between two computers. We " "hope to address this limitation in the future." msgstr "" "Aus Sicherheits- und Geschwindigkeitsgründen ist es nicht empfehlenswert, " "große Dateien zwischen zwei Computern über das Netzwerk abzugleichen. Wir " "hoffen, dass wir diese Einschränkung in Zukunft beseitigen können." #. Put one translator per line, in the form of NAME , YEAR1, YEAR2. #: C/conduit.xml:0(None) msgid "translator-credits" msgstr "" "Mario Blättermann , 2008\n" "comicinker , 2008\n" "Christian Kirbach " conduit-0.3.17/help/de/conduit.xml0000644000175000017500000007251411326117107013707 00000000000000 Conduit Synchronizer"> ]>
Conduit-Handbuch Conduit ist eine Anwendung zum Abgleich von Daten 2007 John Stowers 2008Mario Blättermann (mario.blaettermann@t-online.de)2008comicinker (comicinker@gmx.de) GNOME-Dokumentationsprojekt John Stowers Brent Gueth Conduit-Handbuch 1.0 03.01.2008 Dieses Handbuch beschreibt Version 1.0 von Conduit
Was ist Conduit? Conduit ist ein Datenabgleichprogramm für GNOME. Es ermöglicht den Abgleich von Dateien, Fotos, E-Mails, Kontakten, Notizen, Kalenderdaten und vieler anderer Arten von persönlichen Informationen. Diese Daten können mit anderen Computern, Online-Datenquellen oder anderen elektronischen Geräten abgeglichen werden. Conduit verwaltet den Abgleich und die Umwandlung in andere Formate. Conduit ermöglicht beispielsweise: Datenabgleich von Tomboy-Notizen mit einem anderen Computer Datenabgleich von PIM-Daten mit einem Mobiltelefon, einem iPod, Nokia Internet Tablet, oder zwischen Computern Fotos auf einen Flickr, Picasa, Smugmug, Shutterfly-Server oder einen iPod zu laden … und vieles, vieles mehr. In jeder nur denkbaren Kombination wird Conduit auf korrekte Datenumwandlung und korrekten Datenabgleich achten.
Anwendungsbereiche Fred möchte seine Tomboy-Notizen mit dem Google-Notizbuch abgleichen Jochen möchte, egal was auch immer auf seiner Arbeitsfläche ist, mit seinem Backpack-Konto abgleichen Melanie möchte einen Ordner auf Ihrem Arbeitsplatz-Rechner und Ihrem Laptop auf dem gleichen Stand halten Paul möchte seine Evolution-Kontakte mit den Kontakten in seinem Mobiltelefon abgleichen Stefan möchte seine GNOME-Einstellungen auf seinen zwei Computern immer auf dem gleichen Stand halten Johannes möchte einen Ordner, der OpenOffice-Dokumente enthält, mit Kopien in Google Docs abgleichen Peter möchte auf seinem Server abgelegte Fotos auf einem externen Sicherungsmedium speichern (USB-Festplatte / FTP-Server)
Einführung Das Ziel von Conduit ist es, den Abgleich der Daten so nahtlos wie möglich zu gestalten, sei es von einem anderen Gerät oder einer entfernten Website. Es mag manchmal den Anschein haben, dass Conduit überaus kompliziert ist. Jedoch war eines der Ziele beim Oberflächendesign, die Anwendung so simpel und intuitiv wie möglich zu gestalten. Allerdings ist Conduit viel mächtiger, als es das simple Design vermuten lässt. Diese Dokumentation beschreibt alle Einstellungsoptionen für Gruppen und Datenquellen. Im Folgenden werden einige Beispiele für Dinge gezeigt, die abgeglichen werden können: Ein GNOME-Nutzer möchte Informationen an vielen Orten auf der Arbeitsfläche speichern, einschließlich: Evolution (E-Mail, Kalender, Adressbuch) Tomboy (Notizen) Ordner (wichtige Dateien) Fotos Lesezeichen (Webseiten und Nachrichtenquellen) Musik Der Benutzer könnte einen der vielen populären Online-Dienste nutzen wollen, wie beispielsweise Delicious (Lesezeichen)Gmail (Lesezeichen, Kalender, Nachrichtenquellen, E-Mail, Fotos)Flickr (Fotos) Vielleicht verfügen Sie über weitere elektronische Geräte wie Ein zweiter Laptop, auf dem ebenfalls GNOME läuftEin Mobiltelefon Ein Nokia 770/800Ein Pocket-PC mit PalmOS oder Windows MobileEin iPod Es ist ohnehin schwer genug, Informationen bloß auf der Arbeitsfläche zu organisieren, und dann auch noch synchron auf den oben aufgelisteten Diensten oder Geräten zu halten. Unser Ziel für Conduit ist es, den GNOME-Benutzern zu ermöglichen, Informationen auf dem gleichen Stand zu halten, ohne Rücksicht darauf, um welche Art von Information es sich handelt. Conduit soll einfach funktionieren.
Die Conduit-Benutzeroberfläche
Einführung Conduit basiert auf einigen grundlegenden Konzepten, die man vor Beginn verstehen sollte. Das Wissen über diese Konzepte wird Sie Dinge entdecken lassen, von denen Sie nie gedacht hätten, dass ein Datenabgleich möglich ist. Beispielsweise das Hochladen von Fotos direkt von Ihrem Mobiltelefon zum Bilderdienst Picasa!
Conduit-Benutzeroberfläche Die Bestandteile der Conduit-Benutzeroberfläche
zeigt die vier Hauptkomponenten der Conduit-Benutzeroberfläche: Das MenüDie Menüs Datei, Bearbeiten und Hilfe bieten Aktionen, die auf alle Gruppen angewendet werden. Für weitere Informationen über den Inhalt dieser Menüs, siehe unten. Die Datenquellen-Teilfenster Listet an der linken Seite des Fensters alle Datenquellen auf, die auf Ihrem System gefunden wurden und verwendet werden können.Datenquellen sind die Quelle oder das Ziel der Daten, die abgeglichen werden sollen. Für Anweisungen über die Konfiguration jeder dieser Datenquellen ziehen Sie bitte den Abschnitt Datenquellen zu Rate. Das Ansichtsteilfenster Wird verwendet, um Gruppen von Datenquellen zum Abgleichen anzulegen. Ziehen Sie eine Datenquelle in die linke Hälfte des Ansichtsfensters und einen oder mehrere Datenempfänger in die rechte Hälfte, um eine Gruppe anzulegen. Nähere Erläuterungen über Gruppen finden Sie in . Das Konflikte-Teilfenster Eventuelle Fehlermeldungen während eines Datenabgleichs werden hier angezeigt. Weitere Informationen über den Umgang mit möglichen Fehlermeldungen finden Sie im Abschnitt Konflikte und Lösungen in dieser Dokumentation.
Die Menüs
Das Datei-Menü DateiSpeichern Conduit speichert beim Beenden der Anwendung alle angelegten Gruppen. Wenn Sie diese Option nicht markiert haben, werden alle Datenquellen, Gruppen und deren beider Einstellungen gespeichert, wenn Sie Automatisch beim Beenden speichern im gewählt haben. DateiAlles abgleichen Gleicht alle Gruppen gleichzeitig ab. Sie können auch jede Gruppe separat abgleichen (siehe im Abschnitt Gruppen), aber diese Option erspart es Ihnen, alle Gruppen einzeln auszuwählen, um den Abgleichvorgang zu starten. DateiBeenden Beendet Conduit. Bei eventuell noch laufenden Datenabgleichvorgängen wird um eine Bestätigung gebeten.
Das Bearbeiten-Menü BearbeitenAnsichtsteilfenster löschen. Entfernt alle Konfigurationen, Datenquellen und Gruppen aus dem Ansichtsteilfenster. Das erlaubt Ihnen, das Ansichtsfenster als leeres Blatt zu starten. Nützlich ist dies, wenn Sie den größten Teil der Gruppen neu konfigurieren wollen. Allerdings gibt es keinen einfachen Weg, nach dem Löschen Ihre alte Konfiguration zurück zu holen. BearbeitenEinstellungen Globale Conduit-Einstellungen, die sich auf alle Datenabgleichsgruppen und auf grundlegende Conduit-Aktionen auswirken. Weitere Informationen finden Sie in .
Das Hilfe-Menü HilfeEntwickler Wenn Sie als Entwickler an Conduit mitarbeiten wollen, finden Sie hier alle Links zu geeigneter Dokumentation. HilfeInhalte Zeigt dieses Hilfedokument an. HilfeInfo Zeigt die Versionsnummer und die Namen der Entwickler an.
Das Einstellungsfenster Die Conduit-Einstellungen erreichen Sie über das Bearbeiten-Menü. Jede im Einstellungsdialog vorgenommene Änderung wird auf alle Datenabgleichsgruppen und Conduit-Aktionen angewendet.
Reiter »Einstellungen« In diesem Reiter werden die globalen Conduit-Einstellungen angepasst. Es gibt sechs globale Einstellungen: Einstellungen beim Beenden speichern Weist Conduit an, beim Beenden der Anwendung alle konfigurierten Datenquellen und Gruppen zu speichern. Zeige Benachrichtigungssymbol Zeigt das Benachrichtigungssymbol im Benachrichtigungsfeld. Dieses Symbol wird animiert, während ein Datenabgleich stattfindet. Ins Benachrichtigungsfeld minimieren Weist Conduit an, das Anwendungsfenster ins Benachrichtigungsfeld zu minimieren anstatt ins Panel. Eingebauten Webbrowser verwenden Für den Fall, dass eine Datenquelle eine Anmeldung erfordert, öffnet Conduit den eingebauten Webbrowser, falls diese Option aktiviert ist. Wenn ein Eintrag entfernt wurde Bei einem Zweiwege-Konflikt
Reiter »Datenquellen« Dieser Reiter zeigt eine Liste der gegenwärtig installierten Datenquellen
Reiter »Datenumwandler« Dieser Reiter listet die Datenumwandlungen auf, zu denen Conduit in der Lage ist.
Datenbank-Zuordnung Dies ist eine Liste von UIDs, die Conduit verwendet, um den Datenabgleich der Daten aus verschiedenen Quellen korrekt zu handhaben. Hier haben Sie die Möglichkeit, die Datenbank-Zuordnung zu löschen.
Das Web-Anmeldefenster Verschiedene Datendienste erfordern eine Anmeldung auf deren Webseite. Die Zeitabstände, in denen Sie sich jeweils neu anmelden müssen, werden nicht durch Conduit bestimmt, sondern durch die Sicherheitsbestimmungen des jeweiligen Anbieters. Beispielsweise erbittet Box.net jedes mal beim Start von Conduit eine neue Anmeldung, andererseits ist für den Bilderdienst Flickr nur eine einzige Anmeldung nötig, um Fotos übertragen zu können. Wenn auf einer Webseite eine Anmeldung nötig ist und die Option Eingebauten Webbrowser benutzen in den Conduit-Einstellungen aktiviert wurde, wird ein Fenster wie das nachfolgende geöffnet.
Conduit-Anmeldefenster Beim Anmelden auf einer Datenquellen-Website angezeigtes Fenster
Datenquellen und Gruppen Conduit stellt den Datenabgleich grafisch dar. Sobald Datenquellen zum Ansichtsfenster hinzugefügt werden, werden sie in so genannten Gruppen angeordnet. Eine Gruppe ist eine Ansammlung von Anbietern, welche Daten austauschen. Im unten stehenden Bild sehen Sie folgende Teile:
Conduit stellt Datenabgleiche grafisch dar Teile einer Datenabgleichsgruppe
Eine Datenquelle zum Abgleichen in zwei Richtungen, dessen Status anzeigt, dass er bereit zum Datenabgleich ist. Eine Gruppe, die zwei Datenquellen in Form von Ordnern enthält. Der Pfeil hat zwei Spitzen, was ein Zweiwege-Datenabgleich für diese Gruppe anzeigt. Das bedeutet, dass die Daten in zwei Richtungen fließen, wobei beide Ordner die gleichen Informationen enthalten werden, sobald der Datenabgleich beendet ist. Ein zweiter Datenquellen-Ordner. Nach Konvention sind Datenquellen auf der rechten Seite einer Gruppe Datenempfänger. Bei einem Einweg-Datenabgleich können die Daten nur in dieser Richtung fließen. Ein Facebook- und Picasa-Datendienst zum Übertragen von Bildern auf deren Seiten. Beachten Sie, dass die Gruppe drei Datenquellen enthält und der Pfeil so verändert wurde, dass die Daten nur in einer Richtung fließen. Das bedeutet, dass Bilder aus F-Spot zu Facebook und Picasa übertragen werden.
Datenabgleichsvorgänge Dieser Abschnitt beschreibt die zum Datenabgleich zweier Datenquellen auszuführenden Schritte. Das gegebene Beispiel beschreibt den Datenabgleich zweier Ordner, aber die Konzepte sind auf jeden möglichen Fall anwendbar. Weitere Informationen über spezifische Einstellungen finden Sie in den entsprechenden Abschnitten der Dokumentation.
Einführung beinhaltet zwei Gruppen. Dieser Abschnitt beschreibt die Schritte,um diese Gruppen zu erstellen. Die obere Gruppe stellt einen Zweiwege-Datenabgleich zweier Ordner dar. Die untere Gruppe stellt einen Einweg-Datenabgleich von Bildern dar, von F-Spot zu Facebook und den Picasa-Webalben.
Beispiel 1: Abgleichen zweier Ordner Folgende Schritte erstellen den Zweiwege-Datenabgleich, wie er in #1 im Bild oben gezeigt wird. Legen Sie drei Ordner mit den Name Ordner1, Ordner2 und Ordner3 auf Ihrer Arbeitsfläche an. Ziehen Sie eine Datei Ihrer Wahl in den Ordner1. Starten Sie Conduit. Fügen Sie eine Datenquelle für Ordner1 hinzu. Ziehen Sie aus dem Datenquellen-Teilfenster eine Ordner-Datenquelle auf die linke Seite des Ansichtsteilfensters. Das wird die Datenquelle als Ausgangspunkt des Datenabgleichs. Einstellungen für Ordner1 Klicken Sie doppelt auf die Datenquelle, die Sie gerade in das Ansichtsteilfenster gezogen haben. Ein Konfigurationsfenster wie das unten stehende wird angezeigt. Geben Sie einen passenden Namen ein und ändern Sie das Ziel des Ordners zu dem Ordner, den Sie in Schritt 1 erstellt haben.
Einstellungen für Ordner 1
Fügen Sie eine Datenquelle für Ordner2 hinzu Ziehen Sie eine weitere Datenquelle aus dem linken Teilfenster in das Ansichtsteilfenster, diesmal jedoch neben die Ordner1-Datenquelle. Dies sollte einen Pfeil erzeugen, der Ordner1 und Ordner2 verbindet. Einstellungen für Ordner2 Konfigurieren Sie die Datenquelle so, dass der Ort des Ordners auf den folder2 auf der Arbeitsfläche zeigt. Wichtig ist außerdem, dass der Name des Ordners der gleiche ist, den Sie in Schritt 4 angegeben haben. Einstellen der Datenabgleichsparameter Klicken Sie mit der rechten Maustaste auf die zugehörige Gruppe. Aus den Datenabgleichsoptionen wählen Sie den Zweiwege-Datenabgleich. Weil dies eine grundlegende Option beim Konfigurieren eines Datenabgleichs ist, werden wir zunächst in diesem Abschnitt der Dokumentation nicht auf die erweiterten Einstellungen eingehen. Wenn Sie weitere Informationen zu den Einstellungen wünschen, lesen Sie bitte unter weiter. Der Datenabgleich kann entweder durch Rechtsklick und dann Auswahl von Datenabgleich oder über das Datei-Menü gestartet werden. Sobald der Datenabgleich beendet ist, können Sie die Datei, welche Sie im Ordner1 platziert haben, in Ordner2 sehen.
Beispiel 2: Exportieren von Bildern zu verschiedenen Zielen Die zweite Gruppe, die in gezeigt wird, stellt eine F-Spot-Quelle dar, die ihre Daten zu zwei Datenempfängern schickt, einem bei Facebook und einem bei Picasa. Starten Sie Conduit. Starten Sie F-Spot Ziehen Sie eine Datenquelle aus dem Datenquellen-Teilfenster auf eine freie Stelle des Ansichtsteilfensters. Eine neue Gruppe wird erstellt, welche zunächst nur die Datenquelle F-Spot zeigt. Ziehen Sie die Datenquellen Facebook und Picasa auf die Gruppe, welche eben erstellt wurde. Ändern Sie die Einstellungen für die Datenquellen, indem Sie darauf zweimal klicken. Gleichen Sie jetzt die Gruppe ab, um Fotos zu übertragen. Sie werden über ein Anmeldefenster von Conduit gebeten, sich bei Facebook anzumelden, wie in Bild zu sehen ist.
Zusammenfassung Alle Abgleichvorgänge arbeiten genauso wie hier beschrieben. Die einzigen Unterschiede sind die abgeglichenen Daten und die verwendeten Datenquellen. Sie folgen jedoch immer diesen Arbeitsschritten: Fügen Sie Datenquellen zu einer neuen Gruppe oder einer bereits existierenden Gruppe hinzu. Konfigurieren Sie die Datenquellen. Jede Datenquelle benötigt eine eigene Konfiguration. Dokumentation dazu finden Sie im Abschnitt Datenquellen in dieser Dokumentation. Konfigurieren Sie eine Gruppe, legen Sie eine Konfliktlösung fest, usw. Gleichen Sie die Datenquellen auf Wunsch ab.
Netzwerk-Datenabgleich Wenn Sie zu Hause zwei Computer haben, können Sie Conduit zum direkten Abgleichen von Daten zwischen diesen beiden Computern verwenden, ohne dass zuvor irgendwo Daten gespeichert werden müssen. Die nachfolgenden Schritte zeigen, wie Tomboy-Notizen auf zwei Computern abgeglichen werden können, nennen wir sie nzjrs-desktop und nzjrs-laptop. Der folgende Schlüssel wird dabei helfen, die Einstellungsprozedur zu erklären. Auf dem ersten Computer aufgenommenes Bild. Auf dem zweiten Computer aufgenommenes Bild. Tipp zum Netzwerk-Datenabgleich Obwohl der unten stehende Prozess den Abgleich von Tomboy-Notizen beschreibt, kann er leicht angepasst werden, um alle Arten von Daten zwischen Computern auszutauschen, einschließlich Kontakten, Kalendereinträgen und Fotos von F-Spot. Erstellen Sie auf dem ersten Computer eine Datenabgleichsgruppe, welche Tomboy und eine Netzwerk-Datenquelle miteinander verbindet. Netzwerk-Datenquellen finden Sie in der Kategorie »Verschiedenes«. Dies ermöglicht es Tomboy, seine Daten mit einem zweiten Computer abzugleichen.
Einstellungen für den ersten Computer
Nach einer kurzen Verzögerung führt das zur Erstellung einer neuen Kategorie auf dem zweiten Computer. Die Kategorie übernimmt den Namen des ersten Computers, in diesem Fall »nzjrs-desktop«, und beinhaltet alle Datenquellen, die zum Datenabgleich zur Verfügung stehen. Ziehen Sie die Tomboy-Datenquelle aus der neu erstellten Kategorie in die Abgleichansicht. Beachten sie, dass der Name der Datenquelle nun »Tomboy entfernt« lautet, was auf die Daten auf dem entfernten (oder ersten) Computer verweist.
Einstellungen für den zweiten Computer
Zum Schluss starten Sie auf dem zweiten Computer wie gewohnt den Datenabgleich. Ihre Tomboy-Notizen sollten nun zwischen den beiden Computern abgeglichen sein.
Dateiabgleich Aus Sicherheits- und Geschwindigkeitsgründen ist es nicht empfehlenswert, große Dateien zwischen zwei Computern über das Netzwerk abzugleichen. Wir hoffen, dass wir diese Einschränkung in Zukunft beseitigen können.
conduit-0.3.17/help/ChangeLog0000644000175000017500000000653611175026630012705 000000000000002009-04-18 Mario Blättermann * de/de.po: Updated German translation * de/figures: Added screenshot 2009-01-24 Andre Klapper * de.po: Typo fix, sync strings as discussed on mailing list. 2008-09-19 Mario Blättermann * de/de.po: Updated German translation 2008-08-16 Christian Kirbach * Makefile.am: Added de to DOC_LINGUAS. * de/de.po: Added German translations by Mario Blättermann. 2008-08-06 Claude Paroz * Makefile.am: Added fr to DOC_LINGUAS. * fr/fr.po: Added French translation, by Bruno Brouard and Claude Paroz. 2008-07-05 Jorge Gonzalez * es/es.po: Updated Spanish translation 2008-07-21 Jorge Gonzalez * es/es.po: Updated Spanish translation 2008-07-20 Jorge Gonzalez * es/es.po: Updated Spanish translation 2008-07-17 John Stowers * C/conduit.xml: Fix build. 2008-07-16 Jorge Gonzalez * es/es.po: Updated Spanish translation 2008-07-13 Jorge Gonzalez * es/es.po: Updated Spanish translation 2008-07-05 Jorge Gonzalez * es/es.po: Updated Spanish translation 2008-06-27 Jorge Gonzalez * es/es.po: Updated Spanish translation 2008-06-22 Jorge Gonzalez * es/es.po: Updated Spanish translation 2008-06-21 Jorge Gonzalez * es/es.po: Updated Spanish translation 2008-06-07 Jorge Gonzalez * es/es.po: Updated Spanish translation 2008-04-19 Jorge Gonzalez * es/es.po: Updated Spanish translation * Makefile.am: Added es to DOC_LINGUAS 2008-03-25 Claude Paroz reviewed by: John Stowers * C/conduit.xml: Cleanups (typos, docbook tagging). * C/figures/source/network-sync-key.svg: * C/figures/network-sync-key.png: Deleted. * C/figures/network-pc1.png: * C/figures/network-pc2.png: Added to replace network-sync-key.png 2008-03-19 John Stowers * C/conduit.xml: Add tags to pass distcheck 2008-03-19 John Stowers * C/conduit.xml: * C/figures/source/network-sync-key.svg: * C/figures/source/pc-number.svg: Add network sync docs 2008-03-09 John Stowers * C/conduit.xml: Fix build 2008-03-07 John Stowers * C/conduit.xml: Add simple docs about the conduit prefs window. 2008-03-06 John Stowers * C/figures/source/*: Add soure SVGs used to make screenshots to help other language mantainers. 2008-03-06 John Stowers * C/conduit.xml: * Makefile.am: The first import of the new Conduit Documentation. Contributed by Brent Gueth 2008-03-06 John Stowers * Makefile.am: * C/figures/*: Add some more screenshots of parts of the Conduit UI 2008-01-21 Jorge Gonzalez * es/es.po: Added Spanish translation. * Makefile.am: Added es to DOC_LINGUAS 2007-12-16 Daniel Nylander * sv/sv.po: Added Swedish translation. * Makefile.am: Added sv to DOC_LINGUAS conduit-0.3.17/help/zh_CN/0000777000175000017500000000000011326117107012204 500000000000000conduit-0.3.17/help/zh_CN/zh_CN.po0000644000175000017500000011553611326117107013474 00000000000000# Chinese (China) translation for conduit. # Copyright (C) 2009 conduit's COPYRIGHT HOLDER # This file is distributed under the same license as the conduit package. # 运强 苏 , 2009. # msgid "" msgstr "" "Project-Id-Version: conduit master\n" "POT-Creation-Date: 2009-12-14 15:49+0000\n" "PO-Revision-Date: 2010-01-19 15:25+0800\n" "Last-Translator: 苏运强 \n" "Language-Team: Chinese (China) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: C/conduit.xml:122(None) msgid "" "@@image: 'figures/conduit-gui-parts.png'; " "md5=e7c7ebe8cac03bd0768e2de105155630" msgstr "" "@@image: 'figures/conduit-gui-parts.png'; " "md5=e7c7ebe8cac03bd0768e2de105155630" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: C/conduit.xml:214(None) msgid "" "@@image: 'figures/conduit-login.png'; md5=6e4fe96c2d518d23724e1a70a53fa026" msgstr "" "@@image: 'figures/conduit-login.png'; md5=6e4fe96c2d518d23724e1a70a53fa026" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: C/conduit.xml:233(None) msgid "@@image: 'figures/conduit-dp.png'; md5=ce99ba0bdc70c854b1f8a9999435e250" msgstr "" "@@image: 'figures/conduit-dp.png'; md5=ce99ba0bdc70c854b1f8a9999435e250" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: C/conduit.xml:279(None) msgid "" "@@image: 'figures/conduit-folder-configuration.png'; " "md5=ece672e8cf42e26947eee6e3fb5af7f9" msgstr "" "@@image: 'figures/conduit-folder-configuration.png'; " "md5=ece672e8cf42e26947eee6e3fb5af7f9" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: C/conduit.xml:345(None) msgid "" "@@image: 'figures/network-sync-pc1.png'; md5=118578724965f8af01b66ccdc7e39328" msgstr "" "@@image: 'figures/network-sync-pc1.png'; md5=118578724965f8af01b66ccdc7e39328" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: C/conduit.xml:358(None) msgid "" "@@image: 'figures/network-sync-pc2.png'; md5=565769e5f51b3decfebcfa18989ee391" msgstr "" "@@image: 'figures/network-sync-pc2.png'; md5=565769e5f51b3decfebcfa18989ee391" #: C/conduit.xml:14(title) msgid "Conduit Manual" msgstr "Conduit 手册" #: C/conduit.xml:16(para) msgid "Conduit is a program that synchronizes things" msgstr "Conduit 是一个同步东西的程序" #: C/conduit.xml:19(year) msgid "2007" msgstr "2007" #: C/conduit.xml:20(holder) msgid "John Stowers" msgstr "John Stowers" #: C/conduit.xml:23(publishername) msgid "GNOME Documentation Project" msgstr "GNOME 文档工程" #: C/conduit.xml:28(firstname) msgid "John" msgstr "John" #: C/conduit.xml:29(surname) msgid "Stowers" msgstr "Stowers" #: C/conduit.xml:32(firstname) msgid "Brent" msgstr "Brent" #: C/conduit.xml:33(surname) msgid "Gueth" msgstr "Gueth" #: C/conduit.xml:39(revnumber) msgid "Conduit Manual 1.0" msgstr "Conduit 手册 1.0 版" #: C/conduit.xml:40(date) msgid "2008-01-03" msgstr "2008-01-03" #: C/conduit.xml:44(releaseinfo) msgid "This manual describes version 1.0 of Conduit" msgstr "此手册描述 1.0 版的 Conduit" #: C/conduit.xml:48(title) msgid "What is Conduit" msgstr "什么是 Conduit" #: C/conduit.xml:49(para) msgid "" "Conduit " "is a synchronization application for GNOME. It allows you to synchronize " "your files, photos, emails, contacts, notes, calendar data and any other " "type of personal information and synchronize that data with another " "computer, an online service, or even another electronic device. Conduit " "manages the synchronization and conversion of data into other formats. For " "example, Conduit allows you to;" msgstr "" "Conduit " "是一个为 GNOME 设计的同步程序。它使您可以同步您的文件、照片、电子邮件、通信" "录、便签、日程表数据和其它任何类型的私人信息,并且同步那些数据到其它计算机、" "在线服务甚至其它电子设备。Conduit 管理这些同步和到其它格式的转换。例如," "Conduit 使您可以;" #: C/conduit.xml:53(para) msgid "" "Synchronize your Tomboy notes with another computer" msgstr "" "与其它电脑同步您的 Tomboy 便签" #: C/conduit.xml:56(para) msgid "" "Synchronize your PIM data to your mobile phone, iPod, Nokia Internet tablet, " "or between computers" msgstr "" "同步您的个人信息管理器数据到您的移动电话、 iPod、>, 诺基亚网络" "终端、" #: C/conduit.xml:59(para) msgid "" "Upload photos to Flickr, Picasa, Smugmug, " "Shutterfly and " "your iPod," msgstr "" "上传照片到 FlickrPicasaSmugmug," "Shutterfly 和您的 " "iPod" #: C/conduit.xml:61(para) msgid "... and many more" msgstr "...还有许多" #: C/conduit.xml:63(para) msgid "" "Any combination you can imagine, Conduit will take care of the conversion " "and synchronization." msgstr "任何您可以想像到的组合,Conduit 都可以作转换和同步。" #: C/conduit.xml:65(title) msgid "Use Cases" msgstr "" #: C/conduit.xml:68(para) msgid "" "Fred wants to sync his tomboy notes with Google notebook" msgstr "" "Fred 想要与 Google 便签 同步他的 tomboy 便签" #: C/conduit.xml:71(para) msgid "" "Joey wants to sync whatever is on his desktop to his backpack account" msgstr "" "Joey 想要同步他台式机上的所有东西到他的 backpack 账户" #: C/conduit.xml:73(para) msgid "Nellie wants to keep a directory on his laptop and his desktop in sync" msgstr "Nellie 想保持他笔记本和台式机上的一个目录同步" #: C/conduit.xml:74(para) msgid "Paul wants to keep his evolution contacts in sync with his mobile phone" msgstr "Paul 想要是他的 evolution 通信录和他的移动电话同步" #: C/conduit.xml:75(para) msgid "" "Steve wants to keep his gnome preferences in sync between his two computers" msgstr "Steve 想要使他的两台计算机上的 GNOME 首选项同步" #: C/conduit.xml:77(para) msgid "" "John wants to keep a directory of OpenOffice documents in sync with copies held on " "Google Docs" msgstr "" "John 想要同步一个 OpenOffice 文档目录和在 Google Docs 上的一个副本保持同步" #: C/conduit.xml:79(para) msgid "" "Pete wants to have photos saved to his server to be pushed to an external " "back up (usb hard drive / off-site ftp)" msgstr "" "Pete 想要使存放在他服务器上的照片推送到一个外部备份 (USB 硬盘或站外 ftp)" #: C/conduit.xml:83(title) C/conduit.xml:114(title) C/conduit.xml:254(title) msgid "Introduction" msgstr "导言" #: C/conduit.xml:84(para) msgid "" "Conduit's goals are to synchronize your data as seamlessly as possible, be " "it from remote device or remote websites. It is about extending your life as " "you see it needs to be, no longer constrained by data, devices or formats. " "Conduit enables you to take your data where you want when you want. All of " "your mobile devices could be synchronized automatically by Conduit. Home " "file back-ups to a remote server? Synced automatically." msgstr "" "Conduit 的目标是尽可能无缝地从移动设备或远程站点同步您的数据。这就是要尽可能" "如您所愿地扩展您的生活,不再受数据,设备或格式的束缚。Conduit 可以在您希望的" "时候将您的数据带到任何您想要的地方。您所有的移动电话都可以使用 Conduit 自动同" "步。什么?备份本地数据到远程服务器?自动地。" #: C/conduit.xml:85(para) msgid "" "It may sometimes seem that Conduit is overly complicated, one of the design " "goals has always been to make the interface as simple and intuitive as " "possible. However Conduit is much more powerful then the simplistic design " "may lead on. This documentation will describe all the configuration options " "for groups and data providers, while the following gives some examples of " "items you may wish to synchronize;" msgstr "" "有时 Conduit 好像过于复杂,设计目标中的一项就是总是使界面尽可能简洁、直观。但" "是 Conduit 比这种简单化设计所能实现的强大的多。此文档将描述对于组和数据源的所" "有配置选项,而且下边给出了一些您可能希望同步的条目的例子;" #: C/conduit.xml:88(para) msgid "" "A GNOME user might " "store information in a wide variety of places on the desktop including;" msgstr "" "一位 GNOME 用户可能" "将信息存放于桌面的多个地方,包括;" #: C/conduit.xml:91(para) msgid "" "Evolution (email, calendar, address book)" msgstr "" "Evolution (电子邮件,日程表,通信录)" #: C/conduit.xml:95(para) msgid "" "Tomboy (notes)" msgstr "" "Tomboy (便签)" #: C/conduit.xml:98(para) msgid "Directories (important files)" msgstr "目录 (重要文件)" #: C/conduit.xml:99(para) msgid "Photos" msgstr "照片" #: C/conduit.xml:100(para) msgid "Bookmarks (web and feeds)" msgstr "书签 (网页和订阅)" #: C/conduit.xml:101(para) msgid "Music" msgstr "音乐" #: C/conduit.xml:104(para) msgid "" "Delicious (bookmarks)" msgstr "" "Delicious (书签)" #: C/conduit.xml:104(para) msgid "" "Gmail (bookmarks, " "calendar, feeds, email, photos)" msgstr "" "Gmail (书签,日程" "表,接收点,电子邮件,照片)" #: C/conduit.xml:104(para) msgid "" "Flickr (photos)" msgstr "" "Flickr (照片)" #: C/conduit.xml:104(para) msgid "" "The user might also use one of the many popular online services including " "" msgstr "用户可能使用一个或多个流行的在线服务,包括 " #: C/conduit.xml:105(para) msgid "A second laptop, also running GNOME" msgstr "第二台笔记本,也运行 GNOME" #: C/conduit.xml:105(para) msgid "A mobile phone" msgstr "移动电话" #: C/conduit.xml:105(para) msgid "" "A Nokia 770/800" msgstr "" "A Nokia 770/800" #: C/conduit.xml:105(para) msgid "" "A Palm or Windows Mobile Pocket PC" msgstr "" "A PalmWindows Mobile Pocket PC" #: C/conduit.xml:105(para) msgid "An iPod" msgstr "iPod" #: C/conduit.xml:105(para) msgid "" "They probably also own another electronic device such as " msgstr "他们也可能拥有其它电子设备,比如 " #: C/conduit.xml:107(para) msgid "" "Its hard enough keeping your information organized when limited to the " "desktop, let alone the added burden of keeping your information in sync with " "any of the other services or devices listed above." msgstr "" #: C/conduit.xml:108(para) msgid "" "Our goal for Conduit is to allow GNOME users to keep their information in " "sync. Irrespective of the type, irrespective of the way in which that " "information is stored. Conduit should just work." msgstr "" "Conduit 的一个目标是使 GNOME 用户保持他们的信息同步。无论类型,无论信息的存放" "方式。Conduit 都可以工作。" #: C/conduit.xml:112(title) msgid "Understanding the Conduit Interface" msgstr "理解 Conduit 界面" #: C/conduit.xml:115(para) msgid "" "Conduit has a few basic concepts worth understanding before you begin. " "Knowing these concepts will help you discover things that you never knew you " "could keep in sync, for example, uploading photos right from your mobile " "phone to Picasa!" msgstr "" "Conduit 有一些在您开始之前值得理解的基本概念。了解这些概念有助于您了解一些您" "从未了解的使您可以使用同步的事情,例如,正确地从您的移动电话上传到 Picasa。" #: C/conduit.xml:118(title) msgid "Conduit GUI" msgstr "Conduit 图形界面" #: C/conduit.xml:125(para) msgid "The Parts of the Conduit GUI" msgstr "Conduit 图形界面的组成部分" #: C/conduit.xml:131(para) msgid "" " shows the Conduit interface's four " "main components;" msgstr "" " 展示了 Conduit 界面的四个主要组件;" #: C/conduit.xml:133(para) msgid "" "The file, edit and help menus store operations which apply to all groups. " "For more information on the contents of these menus, see below." msgstr "" "文件、编辑和帮组菜单存放了适用于所有组的操作。要获取更多关于这些菜单内容的信" "息,往下看。" #: C/conduit.xml:133(para) msgid "The Menu" msgstr "菜单" #: C/conduit.xml:134(para) msgid "" "Located on the left hand side of the window, lists all of the data providers " "that are detected and ready for use on your system." msgstr "定位于窗口的左边,列出在您系统上所有探测出并且准备好使用的数据源。" #: C/conduit.xml:134(para) msgid "" "Data providers are the source or destination of data you wish to sync. " "Please refer to the Data Provider section of the " "documentation to receive instructions on how to configure each data provider." msgstr "" "数据源是您要同步的数据的来源或目的地。请参考本文档的 数据源 节以获取怎样配置每个数据源的指导。" #: C/conduit.xml:134(para) msgid "The Data Provider Pane " msgstr "数据源嵌板 " #: C/conduit.xml:135(para) msgid "" "Used to create groups of data providers to synchronize. Drag a data source " "to the left of the canvas pane and one or more data sinks to the right of " "the data pane to create a group. For more explanation on groups please check " "." msgstr "" #: C/conduit.xml:135(para) msgid "The Canvas Pane " msgstr "画布嵌板 " #: C/conduit.xml:136(para) msgid "" "If you receive any conflict notifications while trying to run a sync job " "they will be listed here. For information on how to deal with possible " "conflicts please check the Conflicts and Resolutions " "section of the documentation." msgstr "" "如果在您尝试运行一个同步作业时收到了冲突提示,他们将在此处列出。要获取关于怎" "么样处理可能的冲突,请查看本文档的 冲突及其解决 节。" #: C/conduit.xml:136(para) msgid "The Conflicts Pane " msgstr "冲突嵌板 " #: C/conduit.xml:140(title) msgid "The Menus" msgstr "菜单" #: C/conduit.xml:142(title) msgid "The File Menu" msgstr "文件菜单" #: C/conduit.xml:144(para) msgid "" "FileSave Saves all configured synchronization groups. Groups are saved " "automatically when you exit Conduit if you have selected Save " "Settings on Exit in " msgstr "" "文件保存 所有已配置的同步组。如果您已经在 中选择了 退出时保存设置 ,则组将" "在退出 Conduit 时自动保存。" #: C/conduit.xml:145(para) msgid "" "FileSynchronize All Synchronizes all groups at the same time. You can " "still run each sync group separately (see the Groups " "section), but this saves you the time of having to select and manually going " "through each group to start the sync process." msgstr "" "文件同步所有同时同步所有组。您仍然可以继续分开地运行每一个组的同步(参看 " "Groups 节)" #: C/conduit.xml:146(para) msgid "" "FileQuit Closes conduit. You will be prompted to stop any synchronization " "currently in progress." msgstr "" "文件退出 关闭 Conduit。将会提示您停止任何当前正在进行的同步。" #: C/conduit.xml:150(title) msgid "The Edit Menu" msgstr "编辑菜单" #: C/conduit.xml:152(para) msgid "" "EditClear Canvas Removes all configurations, data providers, and groups from the " "canvas pane. This allows you start using the canvas as it was a clean slate. " "The best time to use this is when you are re-configuring a large portion of " "your sync groups. There is no quick way to revert back after selecting this " "setting." msgstr "" #: C/conduit.xml:153(para) msgid "" "EditPreferences Global Conduit settings that effect all of your sync groups and " "basic Conduit operations. For more information please see " msgstr "" "编辑首选项 全局 Conduit 设置,其影响您所有的同步组和 Conduit 基本操作。要获" "取更多信息,请查看 " #: C/conduit.xml:157(title) msgid "The Help Menu" msgstr "帮助菜单" #: C/conduit.xml:159(para) msgid "" "HelpDevelopers If you are developer, and interested in contributing to Conduit, " "then this option includes links to all the appropriate documentation." msgstr "" "帮组开发人员 如果您是开发人员,并且对贡献 Conduit 感兴趣,此选项包含所有相应文" "档的链接。" #: C/conduit.xml:160(para) msgid "" "HelpContents Shows this help document." msgstr "" "帮组内容 显示此帮助文档。" #: C/conduit.xml:161(para) msgid "" "HelpAbout Shows the version number and a list of Conduit developers." msgstr "" "HelpAbout显示版本号和 Conduit 开发人员列表。" #: C/conduit.xml:166(title) msgid "The Preferences Window" msgstr "首选项窗口" #: C/conduit.xml:167(para) msgid "" "The Conduit preferences is accessed from the Edit menu. Any setting or " "change that you make within the preferences menu affect all of your sync " "groups and basic Conduit operations." msgstr "" "使用编辑菜单进入 Conduit 首选项。在此首选项中的设置或更改影响您所有的同步组" "和 Conduit 基本操作。" #: C/conduit.xml:169(title) msgid "Configuration Tab" msgstr "配置标签" #: C/conduit.xml:170(para) msgid "" "The configuration tab is where all of Conduit's global settings are " "configured. There are six global settings:" msgstr "配置标签是配置 Conduit 的所有全局设置的地方。有六个全局设置:" #: C/conduit.xml:173(guilabel) msgid "Save Settings on Exit" msgstr "退出时保存设置" #: C/conduit.xml:174(para) msgid "" "Instructs Conduit that all configured dataproviders and groups should be " "saved when the application exits." msgstr "指示 Conduit 退出时保存所有已经配置的数据源和组。" #: C/conduit.xml:177(guilabel) msgid "Show Status Icon" msgstr "显示状态图标" #: C/conduit.xml:178(para) msgid "" "Shows a status icon in the notification area. This icon animates to indicate " "a sync is in progress." msgstr "在通知区域显示一个状态图标。此图标指示一个同步正在进行。" #: C/conduit.xml:181(guilabel) msgid "Minimize to Notification Area" msgstr "缩小到通知区域" #: C/conduit.xml:182(para) msgid "" "Instructs Conduit to minimize to the notification area instead of to the " "panel." msgstr "指示 Conduit 最小化到通知区域而不是面板。" #: C/conduit.xml:185(guilabel) msgid "Use Built in Web Browser" msgstr "使用内置的网页浏览器" #: C/conduit.xml:186(para) msgid "" "When a data provider requires that you log onto a website, this option tells " "Conduit to use its own web browser to do so." msgstr "" "当一个数据源要求您登录一个网站时,此选项告诉 Conduit 使用其内置的网页浏览器。" #: C/conduit.xml:188(guilabel) msgid "When an Item Has Been Deleted" msgstr "当一个条目被删除时" #: C/conduit.xml:189(guilabel) msgid "Where There is a Two Way Conflict" msgstr "当有双向冲突时" #: C/conduit.xml:193(title) msgid "Data Providers Tab" msgstr "数据源标签" #: C/conduit.xml:194(para) msgid "" "This tab shows a list of the data providers that are currently installed." msgstr "此标签列出当前安装的数据源。" #: C/conduit.xml:197(title) msgid "Data Conversions Tab" msgstr "数据转换标签" #: C/conduit.xml:198(para) msgid "" "This tab lists the data conversions that Conduit is capable of performing." msgstr "此标签列出 Conduit 可以执行的数据转换。" #: C/conduit.xml:201(title) msgid "Mapping DB" msgstr "映射数据库" #: C/conduit.xml:202(para) msgid "" "This is a list of the UID that Conduit uses to maintain accurate sync data " "from different sources. Here you have the option to clear the mapping " "database." msgstr "" #: C/conduit.xml:206(title) msgid "The Web Login Window" msgstr "网页登录窗口" #: C/conduit.xml:207(para) msgid "" "Sometimes you will be required to log into a website associated with certain " "data providers. The frequency at which you may have to log in is not " "determined by Conduit, but by the security policy of the respective data " "provider. For example, Box.net requires you to log in every time Conduit is " "run, whereas Flickr only requires you to log in once, to give permission to " "Conduit to upload photos. If you are required to log into a website, and you " "have selected the Use Built in Web Browser from the " "Conduit preferences, then a window will pop up like the one shown below." msgstr "" #: C/conduit.xml:210(title) msgid "Conduit Login Window" msgstr "Conduit 登录窗口" #: C/conduit.xml:217(para) msgid "The window shown when logging into data provider websites" msgstr "此窗口在登录数据源站点时显示" #: C/conduit.xml:225(title) msgid "Data Providers and Groups" msgstr "数据源和组" #: C/conduit.xml:226(para) msgid "" "Conduit represents the things your want to synchronize graphically. When " "data providers get added to the canvas, they get arranged into so called " "groups. A group is a collection of data providers that share data. In the " "figure below you will see the following parts" msgstr "" "Conduit 图形化的表示您想要同步的东西。当数据源添加到画布时,他们分为所谓的" "组。一个组是一些共享数据的数据源的集合。在下边的图片中,您可以看到如下部分" #: C/conduit.xml:229(title) msgid "Conduit Depicts Synchronizations Graphically" msgstr "Conduit 形象地表示同步" #: C/conduit.xml:236(para) msgid "Parts of a Synchronization Group" msgstr "同步组的一部分" #: C/conduit.xml:243(para) msgid "" "A data provider for synchronizing two way whose status indicates that it is " "ready to be synchronized." msgstr "" #: C/conduit.xml:244(para) msgid "" "A group containing two folder dataproviders. The arrow has two ends, " "indicating that the two dataproviders will undergo a two way " "synchronization, that is data will flow in both directions, and both folders " "will contain the same information once the sync finishes." msgstr "" #: C/conduit.xml:245(para) msgid "" "A second folder data provider. By convention, data providers that lie on the " "right side of groups are called data sinks. This is because during a one way " "sync, data can only flow into them." msgstr "" #: C/conduit.xml:246(para) msgid "" "A Facebook and Picasa data provider for uploading images to those sites. " "Notice that that the group has three data providers, and the arrow has " "changed to indicate that data will flow in only one direction, that is " "images will be uploaded from F-Spot to Facebook and Picasa." msgstr "" "Facebook 和 Picasa 数据源表示向这些站点上传图像。注意,此组有三个数据源,并且" "箭头已经被更改以指示数据只单向流动,即图像将从 F-Spot 上传到 Facebook 和 " "Picasa。" #: C/conduit.xml:251(title) msgid "Synchronizing Something" msgstr "正在同步某些东西" #: C/conduit.xml:252(para) msgid "" "This section describes the steps required to synchronize two data providers. " "The example given illustrates how to synchronize two folders but the " "concepts are applicable to anything you wish to synchronize. If you need " "more information on specific settings please refer to the corresponding " "section of the documentation." msgstr "" "此节描述同步两个数据源所需要的步骤。此例给出怎样同步两个文件夹,但是此概念可" "以应用于您想同步的任何东西。如果您需要更多的关于特定设置的信息,请参考本文档" "的相应章节。" #: C/conduit.xml:255(para) msgid "" " contains two groups. This section " "will describe the steps to recreate those groups." msgstr "" " 包含两个组。此节描述重新创建组的步" "骤。" #: C/conduit.xml:257(para) msgid "The top group depicts a two way synchronization of two folders" msgstr "顶部的组表示两个目录间的双向同步" #: C/conduit.xml:258(para) msgid "" "The bottom group depicts a one way sync of images, from F-Spot to Facebook, " "and to the Picasa web albums." msgstr "底部的组表示图像的单向同步,从 F-Spot 到 Facebook 和 Picasa 网络相册。" #: C/conduit.xml:262(title) msgid "Example 1: Synchronizing Two Folders" msgstr "例 1:同步两个目录" #: C/conduit.xml:263(para) msgid "" "The following steps will recreate the two way synchronization group shown as " "#1 in the figure above." msgstr "" "下述的步骤将重新创建在上边图像中显示为 #1 的双向同步组。" #: C/conduit.xml:265(para) msgid "" "On your desktop create three folders named folder1, folder2, and folder3. " "Drag a file of your choice into folder1." msgstr "" "在您的桌面上创建三个名为 folder1 、folder2 和 folder3 的目录。拖动您选择的文" "件到 folder1。" #: C/conduit.xml:266(para) C/conduit.xml:305(para) msgid "Start Conduit" msgstr "启动 Conduit" #: C/conduit.xml:268(para) msgid "Add a data provider for folder1" msgstr "位 folder1 添加数据源" #: C/conduit.xml:269(para) msgid "" "From the data provider pane, drag the folder data provider and drop it on " "the left hand side of the canvas pane. This will be the data source that we " "are going to sync from." msgstr "" "从数据源嵌板拖动文件夹数据源并且在画布嵌板的左侧释放它。这将作为我们将要同步" "的数据来源。" #: C/conduit.xml:272(para) msgid "Configure folder1" msgstr "配置 folder1" #: C/conduit.xml:275(title) msgid "Configuring Folder 1" msgstr "正在配置目录 1" #: C/conduit.xml:273(para) msgid "" "Double click on the data provider you recently dropped on the canvas. This " "will bring up the folder configuration window as shown below. Enter " "something memorable in the name field and change the Folder " "Location to the folder you created in step 1. " msgstr "" "双击你最近拖动到画布的数据源。将带您到类似如下显示的文件夹设置。向名称域输入" "一些易记的东西并且更改文件夹位置到您第一步中创建的文件" "夹。" #: C/conduit.xml:287(para) msgid "Add a data provider for folder2" msgstr "为 folder2 添加数据源" #: C/conduit.xml:288(para) msgid "" "Drag another folder data provider from the pane on the left. This time drop " "it adjacent to the folder1 dataprovider. This should result in an arrow " "connecting it to folder1 being created." msgstr "" #: C/conduit.xml:291(para) msgid "Configure folder2" msgstr "配置 folder2" #: C/conduit.xml:292(para) msgid "" "Configure the data provider so that its Folder Location " "points to folder2 on the desktop, and importantly, its " "Folder Name is the same as that entered in step " "#4." msgstr "" #: C/conduit.xml:295(para) msgid "Configure the synchronization parameters" msgstr "配置同步参数" #: C/conduit.xml:296(para) msgid "" "Right click on the associated group, and under sync options, select a two " "way sync. Since this is just a basic run through on how to setup a sync we " "are not going to go through any advanced syncing options in this section of " "the documentation. If you wish more information on the options available, " "please see ." msgstr "" #: C/conduit.xml:298(para) msgid "" "Synchronize the two folders by right clicking on them and selecting sync, or " "from the File menu. Once the sync is finished you should see the file that " "you placed in folder1 on your desktop within folder2." msgstr "" "同步两个目录可以在其上右击并选择同步,或从文件菜单操作。同步完成后,您应该可" "以看到您放置在您台式机上的 folder1 中的文件已经位于 folder2 中。" #: C/conduit.xml:302(title) msgid "Example 2: Exporting Images to Multiple Destinations" msgstr "例 2:导出图像到多个目标" #: C/conduit.xml:303(para) msgid "" "The second group shown in shows a " "single F-Spot data source exporting its photos to two data sinks, a Facebook " "one, and a Picasa one." msgstr "" #: C/conduit.xml:306(para) msgid "Start F-Spot" msgstr "启动 F-Spot" #: C/conduit.xml:307(para) msgid "" "Drag a F-Spot data provider from the data provider pane and drop it onto an " "empty spot on the canvas. A new group containing just the F-Spot data " "provider will be created." msgstr "" #: C/conduit.xml:308(para) msgid "" "Drag Facebook and Picasa data providers into the Group that was just created." msgstr "拖动 Facebook 和 Picasa 数据源到刚刚创建的组。" #: C/conduit.xml:309(para) msgid "Configure the data providers by double clicking on them." msgstr "通过在其上双击配置数据源。" #: C/conduit.xml:310(para) msgid "" "Now synchronize the group to upload photos. You will be prompted to log into " "Facebook using the Conduit login window, shown in ." msgstr "" "现在同步此组以上传照片。您将被提示使用在 中显示的 Conduit 登录窗口登录 Facebook。" #: C/conduit.xml:314(title) msgid "Summary" msgstr "总结" #: C/conduit.xml:315(para) msgid "" "All sync operations work exactly like this. The only difference is the data " "you are syncing and the providers you are using. You always follow the same " "sequence of steps," msgstr "" "所有的同步操作都完全按这样工作。仅仅的不同是您同步的数据和您使用的数据源。" #: C/conduit.xml:317(para) msgid "Add dataproviders to create a new group, or to an existing group." msgstr "添加数据源以创建一个新组,或到一个现有的组。" #: C/conduit.xml:318(para) msgid "" "Configure the data providers. Each data provider requires a unique " "configuration. For reference on these please the Data Providers section of the documentation." msgstr "" "配置数据源。每个数据源要求一个唯一的配置。要获得与此有关的参考参看本文档的 " "Data Providers 节。" #: C/conduit.xml:319(para) msgid "Configure the group, selecting what should happen on conflict, etc." msgstr "配置组,选择在发生冲突等情况时要怎么做。" #: C/conduit.xml:320(para) msgid "Synchronize the dataproviders as you wish." msgstr "按您的愿望同步数据源" #: C/conduit.xml:325(title) msgid "Network Synchronization" msgstr "网络同步" #: C/conduit.xml:326(para) msgid "" "If you have two computers at home, Conduit can be used to synchronize the " "data between them, directly, without first having to store the data " "somewhere else first. The steps below will illustrate how to synchronize " "Tomboy notes on two computers, called nzjrs-desktop and nzjrs-laptop. The " "following key will be used to help explain the setup procedure." msgstr "" "如果您家中有两台计算机,Conduit 可以用于在它们之间同步数据,直接地,不需要首" "先将数据存放在其它地方。下述的步骤将说明怎样同步两台分别称为 nzjrs-desktop " "和 nzjrs-laptop 的计算机上的 Tomboy 便签。如下关键词将用于帮组解释设置过程。" #: C/conduit.xml:329(para) msgid "" " Image " "taken on the first computer." msgstr "" "图像 来自" "第一台计算机。" #: C/conduit.xml:330(para) msgid "" " Image " "taken on the second computer." msgstr "" "图像 来自" "第二台计算机。" #: C/conduit.xml:335(title) msgid "Network Synchronization Tip" msgstr "网络同步小贴士" #: C/conduit.xml:336(para) msgid "" "The process below, although describing Tomboy note synchronization, could be " "suitably modified to synchronize all sorts of data between two computers, " "including Contacts, Calendar information, and even F-Spot photos." msgstr "" #: C/conduit.xml:341(title) msgid "Configuration of the First Computer" msgstr "第一台计算机的配置" #: C/conduit.xml:339(para) msgid "" "On the first computer create a synchronization group connecting Tomboy to " "the Network dataprovider, which is listed in the Miscellaneous category in " "the dataprovider pane. This makes Tomboy available for synchronization on " "the second computer. " msgstr "" #: C/conduit.xml:351(para) msgid "" "After a short delay, this will result in a new category being created on the " "second computer. The category will take the name of the first computer, " "nzjrs-desktop in my case, and it shall contain any dataproviders currently " "available for synchronization." msgstr "" #: C/conduit.xml:354(title) msgid "Configuration of the Second Computer" msgstr "第二台计算机的配置" #: C/conduit.xml:352(para) msgid "" "Still on the second computer, drag the Tomboy dataprovider from the newly " "created category onto the canvas. Notice how its name is Remote Tomboy, " "indicating it refers to data on the remote, or first, computer. " msgstr "" #: C/conduit.xml:364(para) msgid "Finally, on the second computer, start the sync in the normal manner." msgstr "最后,在第二台计算机上,以普通方式启动同步。" #: C/conduit.xml:365(para) msgid "Your tomboy notes should now be synchronized between the two computers." msgstr "现在,您的两台计算机上的 tomboy 便签应该已经同步了。" #: C/conduit.xml:368(title) msgid "File Synchronization" msgstr "文件同步" #: C/conduit.xml:369(para) msgid "" "Due to performance and security reasons, we do not recommend using the " "network sync feature to synchronize large files between two computers. We " "hope to address this limitation in the future." msgstr "" "鉴于性能和安全原因,我们不推荐通过网络同步功能在两台计算机之间同步大量数据。" "我们希望将来设置这项限制。" #. Put one translator per line, in the form of NAME , YEAR1, YEAR2 #: C/conduit.xml:0(None) msgid "translator-credits" msgstr "YunQiang Su , 2009" conduit-0.3.17/help/zh_CN/conduit.xml0000644000175000017500000006361011326117107014315 00000000000000 Conduit Synchronizer"> ]>
Conduit 手册 Conduit 是一个同步东西的程序 2007 John Stowers 2009YunQiang Su (wzssyqa@gmail.com) GNOME 文档工程 John Stowers Brent Gueth Conduit 手册 1.0 版 2008-01-03 此手册描述 1.0 版的 Conduit
什么是 Conduit Conduit 是一个为 GNOME 设计的同步程序。它使您可以同步您的文件、照片、电子邮件、通信录、便签、日程表数据和其它任何类型的私人信息,并且同步那些数据到其它计算机、在线服务甚至其它电子设备。Conduit 管理这些同步和到其它格式的转换。例如,Conduit 使您可以; 与其它电脑同步您的 Tomboy 便签 同步您的个人信息管理器数据到您的移动电话、 iPod、>, 诺基亚网络终端 上传照片到 FlickrPicasaSmugmugShutterfly 和您的 iPod ...还有许多 任何您可以想像到的组合,Conduit 都可以作转换和同步。
Use Cases Fred 想要与 Google 便签 同步他的 tomboy 便签 Joey 想要同步他台式机上的所有东西到他的 backpack 账户 Nellie 想保持他笔记本和台式机上的一个目录同步 Paul 想要是他的 evolution 通信录和他的移动电话同步 Steve 想要使他的两台计算机上的 GNOME 首选项同步 John 想要同步一个 OpenOffice 文档目录和在 Google Docs 上的一个副本保持同步 Pete 想要使存放在他服务器上的照片推送到一个外部备份 (USB 硬盘或站外 ftp)
导言 Conduit 的目标是尽可能无缝地从移动设备或远程站点同步您的数据。这就是要尽可能如您所愿地扩展您的生活,不再受数据,设备或格式的束缚。Conduit 可以在您希望的时候将您的数据带到任何您想要的地方。您所有的移动电话都可以使用 Conduit 自动同步。什么?备份本地数据到远程服务器?自动地。 有时 Conduit 好像过于复杂,设计目标中的一项就是总是使界面尽可能简洁、直观。但是 Conduit 比这种简单化设计所能实现的强大的多。此文档将描述对于组和数据源的所有配置选项,而且下边给出了一些您可能希望同步的条目的例子; 一位 GNOME 用户可能将信息存放于桌面的多个地方,包括; Evolution (电子邮件,日程表,通信录) Tomboy (便签) 目录 (重要文件) 照片 书签 (网页和订阅) 音乐 用户可能使用一个或多个流行的在线服务,包括 Delicious (书签)Gmail (书签,日程表,接收点,电子邮件,照片)Flickr (照片) 他们也可能拥有其它电子设备,比如 第二台笔记本,也运行 GNOME移动电话 A Nokia 770/800A PalmWindows Mobile Pocket PCiPod Its hard enough keeping your information organized when limited to the desktop, let alone the added burden of keeping your information in sync with any of the other services or devices listed above. Conduit 的一个目标是使 GNOME 用户保持他们的信息同步。无论类型,无论信息的存放方式。Conduit 都可以工作。
理解 Conduit 界面
导言 Conduit 有一些在您开始之前值得理解的基本概念。了解这些概念有助于您了解一些您从未了解的使您可以使用同步的事情,例如,正确地从您的移动电话上传到 Picasa。
Conduit 图形界面 Conduit 图形界面的组成部分
展示了 Conduit 界面的四个主要组件; 菜单文件、编辑和帮组菜单存放了适用于所有组的操作。要获取更多关于这些菜单内容的信息,往下看。 数据源嵌板 定位于窗口的左边,列出在您系统上所有探测出并且准备好使用的数据源。数据源是您要同步的数据的来源或目的地。请参考本文档的 数据源 节以获取怎样配置每个数据源的指导。 画布嵌板 Used to create groups of data providers to synchronize. Drag a data source to the left of the canvas pane and one or more data sinks to the right of the data pane to create a group. For more explanation on groups please check . 冲突嵌板 如果在您尝试运行一个同步作业时收到了冲突提示,他们将在此处列出。要获取关于怎么样处理可能的冲突,请查看本文档的 冲突及其解决 节。
菜单
文件菜单 文件保存 所有已配置的同步组。如果您已经在 中选择了 退出时保存设置 ,则组将在退出 Conduit 时自动保存。 文件同步所有同时同步所有组。您仍然可以继续分开地运行每一个组的同步(参看 Groups 节) 文件退出 关闭 Conduit。将会提示您停止任何当前正在进行的同步。
编辑菜单 Edit Clear Canvas Removes all configurations, data providers, and groups from the canvas pane. This allows you start using the canvas as it was a clean slate. The best time to use this is when you are re-configuring a large portion of your sync groups. There is no quick way to revert back after selecting this setting. 编辑首选项 全局 Conduit 设置,其影响您所有的同步组和 Conduit 基本操作。要获取更多信息,请查看
帮助菜单 帮组开发人员 如果您是开发人员,并且对贡献 Conduit 感兴趣,此选项包含所有相应文档的链接。 帮组内容 显示此帮助文档。 HelpAbout显示版本号和 Conduit 开发人员列表。
首选项窗口 使用编辑菜单进入 Conduit 首选项。在此首选项中的设置或更改影响您所有的同步组和 Conduit 基本操作。
配置标签 配置标签是配置 Conduit 的所有全局设置的地方。有六个全局设置: 退出时保存设置 指示 Conduit 退出时保存所有已经配置的数据源和组。 显示状态图标 在通知区域显示一个状态图标。此图标指示一个同步正在进行。 缩小到通知区域 指示 Conduit 最小化到通知区域而不是面板。 使用内置的网页浏览器 当一个数据源要求您登录一个网站时,此选项告诉 Conduit 使用其内置的网页浏览器。 当一个条目被删除时 当有双向冲突时
数据源标签 此标签列出当前安装的数据源。
数据转换标签 此标签列出 Conduit 可以执行的数据转换。
映射数据库 This is a list of the UID that Conduit uses to maintain accurate sync data from different sources. Here you have the option to clear the mapping database.
网页登录窗口 Sometimes you will be required to log into a website associated with certain data providers. The frequency at which you may have to log in is not determined by Conduit, but by the security policy of the respective data provider. For example, Box.net requires you to log in every time Conduit is run, whereas Flickr only requires you to log in once, to give permission to Conduit to upload photos. If you are required to log into a website, and you have selected the Use Built in Web Browser from the Conduit preferences, then a window will pop up like the one shown below.
Conduit 登录窗口 此窗口在登录数据源站点时显示
数据源和组 Conduit 图形化的表示您想要同步的东西。当数据源添加到画布时,他们分为所谓的组。一个组是一些共享数据的数据源的集合。在下边的图片中,您可以看到如下部分
Conduit 形象地表示同步 同步组的一部分
A data provider for synchronizing two way whose status indicates that it is ready to be synchronized. A group containing two folder dataproviders. The arrow has two ends, indicating that the two dataproviders will undergo a two way synchronization, that is data will flow in both directions, and both folders will contain the same information once the sync finishes. A second folder data provider. By convention, data providers that lie on the right side of groups are called data sinks. This is because during a one way sync, data can only flow into them. Facebook 和 Picasa 数据源表示向这些站点上传图像。注意,此组有三个数据源,并且箭头已经被更改以指示数据只单向流动,即图像将从 F-Spot 上传到 Facebook 和 Picasa。
正在同步某些东西 此节描述同步两个数据源所需要的步骤。此例给出怎样同步两个文件夹,但是此概念可以应用于您想同步的任何东西。如果您需要更多的关于特定设置的信息,请参考本文档的相应章节。
导言 包含两个组。此节描述重新创建组的步骤。 顶部的组表示两个目录间的双向同步 底部的组表示图像的单向同步,从 F-Spot 到 Facebook 和 Picasa 网络相册。
例 1:同步两个目录 下述的步骤将重新创建在上边图像中显示为 #1 的双向同步组。 在您的桌面上创建三个名为 folder1 、folder2 和 folder3 的目录。拖动您选择的文件到 folder1。 启动 Conduit folder1 添加数据源 从数据源嵌板拖动文件夹数据源并且在画布嵌板的左侧释放它。这将作为我们将要同步的数据来源。 配置 folder1 双击你最近拖动到画布的数据源。将带您到类似如下显示的文件夹设置。向名称域输入一些易记的东西并且更改文件夹位置到您第一步中创建的文件夹。
正在配置目录 1
folder2 添加数据源 Drag another folder data provider from the pane on the left. This time drop it adjacent to the folder1 dataprovider. This should result in an arrow connecting it to folder1 being created. 配置 folder2 Configure the data provider so that its Folder Location points to folder2 on the desktop, and importantly, its Folder Name is the same as that entered in step #4. 配置同步参数 Right click on the associated group, and under sync options, select a two way sync. Since this is just a basic run through on how to setup a sync we are not going to go through any advanced syncing options in this section of the documentation. If you wish more information on the options available, please see . 同步两个目录可以在其上右击并选择同步,或从文件菜单操作。同步完成后,您应该可以看到您放置在您台式机上的 folder1 中的文件已经位于 folder2 中。
例 2:导出图像到多个目标 The second group shown in shows a single F-Spot data source exporting its photos to two data sinks, a Facebook one, and a Picasa one. 启动 Conduit 启动 F-Spot Drag a F-Spot data provider from the data provider pane and drop it onto an empty spot on the canvas. A new group containing just the F-Spot data provider will be created. 拖动 Facebook 和 Picasa 数据源到刚刚创建的组。 通过在其上双击配置数据源。 现在同步此组以上传照片。您将被提示使用在 中显示的 Conduit 登录窗口登录 Facebook。
总结 所有的同步操作都完全按这样工作。仅仅的不同是您同步的数据和您使用的数据源。 添加数据源以创建一个新组,或到一个现有的组。 配置数据源。每个数据源要求一个唯一的配置。要获得与此有关的参考参看本文档的 Data Providers 节。 配置组,选择在发生冲突等情况时要怎么做。 按您的愿望同步数据源
网络同步 如果您家中有两台计算机,Conduit 可以用于在它们之间同步数据,直接地,不需要首先将数据存放在其它地方。下述的步骤将说明怎样同步两台分别称为 nzjrs-desktop 和 nzjrs-laptop 的计算机上的 Tomboy 便签。如下关键词将用于帮组解释设置过程。 图像 来自第一台计算机。 图像 来自第二台计算机。 网络同步小贴士 The process below, although describing Tomboy note synchronization, could be suitably modified to synchronize all sorts of data between two computers, including Contacts, Calendar information, and even F-Spot photos. On the first computer create a synchronization group connecting Tomboy to the Network dataprovider, which is listed in the Miscellaneous category in the dataprovider pane. This makes Tomboy available for synchronization on the second computer.
第一台计算机的配置
After a short delay, this will result in a new category being created on the second computer. The category will take the name of the first computer, nzjrs-desktop in my case, and it shall contain any dataproviders currently available for synchronization. Still on the second computer, drag the Tomboy dataprovider from the newly created category onto the canvas. Notice how its name is Remote Tomboy, indicating it refers to data on the remote, or first, computer.
第二台计算机的配置
最后,在第二台计算机上,以普通方式启动同步。 现在,您的两台计算机上的 tomboy 便签应该已经同步了。
文件同步 鉴于性能和安全原因,我们不推荐通过网络同步功能在两台计算机之间同步大量数据。我们希望将来设置这项限制。
conduit-0.3.17/help/es/0000777000175000017500000000000011326117107011612 500000000000000conduit-0.3.17/help/es/es.po0000644000175000017500000013540511326117107012505 00000000000000# translation of conduit.help.HEAD.po to Español # Jorge González , 2008. msgid "" msgstr "" "Project-Id-Version: conduit.help.HEAD\n" "POT-Creation-Date: 2008-07-21 05:00+0000\n" "PO-Revision-Date: 2008-07-21 21:05+0200\n" "Last-Translator: Jorge González \n" "Language-Team: Español \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" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: C/conduit.xml:122(None) msgid "" "@@image: 'figures/conduit-gui-parts.png'; " "md5=e7c7ebe8cac03bd0768e2de105155630" msgstr "" "@@image: 'figures/conduit-gui-parts.png'; " "md5=e7c7ebe8cac03bd0768e2de105155630" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: C/conduit.xml:214(None) msgid "@@image: 'figures/conduit-login.png'; md5=6e4fe96c2d518d23724e1a70a53fa026" msgstr "@@image: 'figures/conduit-login.png'; md5=6e4fe96c2d518d23724e1a70a53fa026" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: C/conduit.xml:233(None) msgid "@@image: 'figures/conduit-dp.png'; md5=ce99ba0bdc70c854b1f8a9999435e250" msgstr "@@image: 'figures/conduit-dp.png'; md5=ce99ba0bdc70c854b1f8a9999435e250" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: C/conduit.xml:279(None) msgid "" "@@image: 'figures/conduit-folder-configuration.png'; " "md5=ece672e8cf42e26947eee6e3fb5af7f9" msgstr "" "@@image: 'figures/conduit-folder-configuration.png'; " "md5=ece672e8cf42e26947eee6e3fb5af7f9" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: C/conduit.xml:345(None) msgid "@@image: 'figures/network-sync-pc1.png'; md5=118578724965f8af01b66ccdc7e39328" msgstr "@@image: 'figures/network-sync-pc1.png'; md5=118578724965f8af01b66ccdc7e39328" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: C/conduit.xml:358(None) msgid "@@image: 'figures/network-sync-pc2.png'; md5=565769e5f51b3decfebcfa18989ee391" msgstr "@@image: 'figures/network-sync-pc2.png'; md5=565769e5f51b3decfebcfa18989ee391" #: C/conduit.xml:14(title) msgid "Conduit Manual" msgstr "Manual de Conduit" #: C/conduit.xml:16(para) msgid "Conduit is a program that synchronizes things" msgstr "Conduit es un programa que sincroniza cosas" #: C/conduit.xml:19(year) msgid "2007" msgstr "2007" #: C/conduit.xml:20(holder) msgid "John Stowers" msgstr "John Stowers" #: C/conduit.xml:23(publishername) msgid "GNOME Documentation Project" msgstr "Proyecto de documentación de GNOME" #: C/conduit.xml:28(firstname) msgid "John" msgstr "John" #: C/conduit.xml:29(surname) msgid "Stowers" msgstr "Stowers" #: C/conduit.xml:32(firstname) msgid "Brent" msgstr "Brent" #: C/conduit.xml:33(surname) msgid "Gueth" msgstr "Gueth" #: C/conduit.xml:39(revnumber) msgid "Conduit Manual 1.0" msgstr "Manual de Conduit 1.0" #: C/conduit.xml:40(date) msgid "2008-01-03" msgstr "2008-01-03" #: C/conduit.xml:44(releaseinfo) msgid "This manual describes version 1.0 of Conduit" msgstr "Este manual describe la versión 1.0 de Conduit" #: C/conduit.xml:48(title) msgid "What is Conduit" msgstr "¿Qué es Conduit?" #: C/conduit.xml:49(para) msgid "" "Conduit " "is a synchronization application for GNOME. It allows you to synchronize " "your files, photos, emails, contacts, notes, calendar data and any other " "type of personal information and synchronize that data with another " "computer, an online service, or even another electronic device. Conduit " "manages the synchronization and conversion of data into other formats. For " "example, Conduit allows you to;" msgstr "" "Conduit " "es una aplicación de sincronización para GNOME. Le permite sincronizar sus " "archivos, fotos, correos-e, contactos, notas, los datos del calendario y " "otros tipos de información personal y sincronizar esos datos con otro " "equipo, un servicio en línea o incluso otro dispositivo electrónico. Conduit " "gestiona la sincronización y conversión de datos en otros formatos. Por " "ejemplo, Conduit le permite:" #: C/conduit.xml:53(para) msgid "" "Synchronize your Tomboy notes with another computer" msgstr "" "Sincronizar sus notas de Tomboy con otro equipo" #: C/conduit.xml:56(para) msgid "" "Synchronize your PIM data to your mobile phone, iPod, Nokia Internet tablet, " "or between computers" msgstr "" "Sincronice sus datos personales con su teléfono móvil, iPod, Nokia N800 o entre " "equipos." #: C/conduit.xml:59(para) msgid "" "Upload photos to Flickr, Picasa, Smugmug, " "Shutterfly and " "your iPod," msgstr "" "Subir fotos a Flickr, Picasa, Smugmug, " "Shutterfly y su " "iPod." #: C/conduit.xml:61(para) msgid "... and many more" msgstr "... y mucho más" #: C/conduit.xml:63(para) msgid "" "Any combination you can imagine, Conduit will take care of the conversion " "and synchronization." msgstr "" "Cualquier combinación que pueda imaginar, Conduit se encargará de la " "conversión y sincronización." #: C/conduit.xml:65(title) msgid "Use Cases" msgstr "Casos de uso" #: C/conduit.xml:68(para) msgid "" "Fred wants to sync his tomboy notes with Google notebook" msgstr "" "Antonio quiere sincronizar sus notas de Tomboy con Google notebook" #: C/conduit.xml:71(para) msgid "" "Joey wants to sync whatever is on his desktop to his backpack account" msgstr "" "Iñaki quiere sincronizar todo lo que está en su escritorio con su cuenta en Backpack" #: C/conduit.xml:73(para) msgid "Nellie wants to keep a directory on his laptop and his desktop in sync" msgstr "" "Ana quiere mantener un directorio en su portátil y en su sobremesa " "sincronizados" #: C/conduit.xml:74(para) msgid "Paul wants to keep his evolution contacts in sync with his mobile phone" msgstr "" "Adolfo quiere mantener sus contactos de Evolution sincronizados con su " "teléfono móvil" #: C/conduit.xml:75(para) msgid "Steve wants to keep his gnome preferences in sync between his two computers" msgstr "" "Isaac quiere mantener sus preferencias de GNOME sincronizadas en sus dos " "equipos" #: C/conduit.xml:77(para) msgid "" "John wants to keep a directory of OpenOffice documents in sync with copies held on " "Google Docs" msgstr "" "Tomás quiere mantener un directorio de documentos OpenOffice sincronizado con copias " "almacenadas en Google " "Docs" #: C/conduit.xml:79(para) msgid "" "Pete wants to have photos saved to his server to be pushed to an external " "back up (usb hard drive / off-site ftp)" msgstr "" "Álvaro quiere tener fotos guardadas en su servidor para que se exporten a un " "respaldo externo (disco duro USB, FTP en internet...)" #: C/conduit.xml:83(title) C/conduit.xml:114(title) C/conduit.xml:254(title) msgid "Introduction" msgstr "Introducción" #: C/conduit.xml:84(para) msgid "" "Conduit's goals are to synchronize your data as seamlessly as possible, be " "it from remote device or remote websites. It is about extending your life as " "you see it needs to be, no longer constrained by data, devices or formats. " "Conduit enables you to take your data where you want when you want. All of " "your mobile devices could be synchronized automatically by Conduit. Home " "file back-ups to a remote server? Synced automatically." msgstr "" "Los objetivos de Conduit son sincronizar sus datos de la forma más sencilla " "posible, ya sea de un dispositivo remoto o sitios web remotos. Se trata de " "extender su vida como ve que necesita ser, sin restricciones de datos, " "dispositivos o formatos. Conduit le permite llevarse sus datos donde quiera " "cuando quiera. Todos sus dispositivos móviles se pueden sincronizar " "automáticamente con Conduit. ¿Respaldos de casa contra un servidor remoto? " "Automáticamente sincronizado." #: C/conduit.xml:85(para) msgid "" "It may sometimes seem that Conduit is overly complicated, one of the design " "goals has always been to make the interface as simple and intuitive as " "possible. However Conduit is much more powerful then the simplistic design " "may lead on. This documentation will describe all the configuration options " "for groups and data providers, while the following gives some examples of " "items you may wish to synchronize;" msgstr "" "A veces puede parecer que Conduit es demasiado complicado, uno de los " "objetivos del diseño siempre ha sido hacer la interfaz tan simple e " "intuitiva como sea posible. No obstante, Conduit es más potente que lo que " "su simple interfaz pueda aparentar. Esta documentación describirá todas las " "opciones de configuración para grupos y proveedores de datos, mientras que " "lo siguiente le proporciona algunos ejemplos de elementos que puede querer " "sincronizar;" #: C/conduit.xml:88(para) msgid "" "A GNOME user might " "store information in a wide variety of places on the desktop including;" msgstr "" "Un usuario de GNOME puede almacenar información en una gran variedad de lugares en el " "escritorio, incluyendo:" #: C/conduit.xml:91(para) msgid "" "Evolution (email, calendar, address book)" msgstr "" "Evolution (correo-e, calendario, libreta de direcciones)" #: C/conduit.xml:95(para) msgid "" "Tomboy (notes)" msgstr "" "Tomboy (notas)" #: C/conduit.xml:98(para) msgid "Directories (important files)" msgstr "Directorios (archivos importantes)" #: C/conduit.xml:99(para) msgid "Photos" msgstr "Fotos" #: C/conduit.xml:100(para) msgid "Bookmarks (web and feeds)" msgstr "Marcadores (web y de fuentes)" #: C/conduit.xml:101(para) msgid "Music" msgstr "Música" #: C/conduit.xml:104(para) msgid "Delicious (bookmarks)" msgstr "" "Delicious " "(marcadores)" #: C/conduit.xml:104(para) msgid "" "Gmail (bookmarks, " "calendar, feeds, email, photos)" msgstr "" "Gmail (marcadores, " "calendario, fuentes, correo-e, fotos)" #: C/conduit.xml:104(para) msgid "Flickr (photos)" msgstr "Flickr (fotos)" #: C/conduit.xml:104(para) msgid "" "The user might also use one of the many popular online services including " "" msgstr "" "El usuario también puede usar uno de los muchos populares servicios en " "línea, incluyendo " #: C/conduit.xml:105(para) msgid "A second laptop, also running GNOME" msgstr "Un segundo portátil, que también use GNOME" #: C/conduit.xml:105(para) msgid "A mobile phone" msgstr "Un teléfono móvil" #: C/conduit.xml:105(para) msgid "A Nokia 770/800" msgstr "Un Nokia 770/800" #: C/conduit.xml:105(para) msgid "" "A Palm or Windows Mobile Pocket PC" msgstr "" "Una Palm o Windows Mobile Pocket PC" #: C/conduit.xml:105(para) msgid "An iPod" msgstr "Un iPod" #: C/conduit.xml:105(para) msgid "They probably also own another electronic device such as " msgstr "" "Probablemente también posean un dispositivo electrónico tal como " "" #: C/conduit.xml:107(para) msgid "" "Its hard enough keeping your information organized when limited to the " "desktop, let alone the added burden of keeping your information in sync with " "any of the other services or devices listed above." msgstr "" "Ya es bastante difícil mantener su información organizada cuando está " "limitada al escritorio, cuanto más mantener su información sincronizada con " "cualquiera de los otros servicios o dispositivos listados anteriormente." #: C/conduit.xml:108(para) msgid "" "Our goal for Conduit is to allow GNOME users to keep their information in " "sync. Irrespective of the type, irrespective of the way in which that " "information is stored. Conduit should just work." msgstr "" "El objetivo de Conduit es permitir que los usuarios de GNOME mantengan su " "información sincronizada. Independientemente del tipo y de la forma en la " "que se almacenó la información. Conduit debería, simplemente, funcionar." #: C/conduit.xml:112(title) msgid "Understanding the Conduit Interface" msgstr "Entendiendo la interfaz de Conduit" #: C/conduit.xml:115(para) msgid "" "Conduit has a few basic concepts worth understanding before you begin. " "Knowing these concepts will help you discover things that you never knew you " "could keep in sync, for example, uploading photos right from your mobile " "phone to Picasa!" msgstr "" "Existen unos conceptos básicos sobre Conduit que merece la pena entender " "antes de comenzar. Saber estos conceptos le ayudará a descubrir cosas que " "nunca sabría que podría sincronizar, por ejemplo, subir fotos directamente " "desde su móvil a Picasa." #: C/conduit.xml:118(title) msgid "Conduit GUI" msgstr "IGU de Conduit" #: C/conduit.xml:125(para) msgid "The Parts of the Conduit GUI" msgstr "Las partes del IGU de Conduit" #: C/conduit.xml:131(para) msgid "" " shows the Conduit interface's four " "main components;" msgstr "" "La muestra los cuatro principales " "componentes de la interfaz de Conduit;" #: C/conduit.xml:133(para) msgid "" "The file, edit and help menus store operations which apply to all groups. " "For more information on the contents of these menus, see below." msgstr "" "Los menús Archivo, Editar y Ayuda almacenan operaciones que se aplican a " "todos los grupos. Para obtener más información acerca del contenido de estos " "menús, consulte debajo." #: C/conduit.xml:133(para) msgid "The Menu" msgstr "El menú " #: C/conduit.xml:134(para) msgid "" "Located on the left hand side of the window, lists all of the data providers " "that are detected and ready for use on your system." msgstr "" "Ubicado en la parte izquierda de la ventana, lista todos los proveedores de " "datos detectados y listos para usarse en su sistema." #: C/conduit.xml:134(para) msgid "" "Data providers are the source or destination of data you wish to sync. " "Please refer to the Data Provider section of the " "documentation to receive instructions on how to configure each data provider." msgstr "" "Los proveedores de datos son la fuente o destino de los datos que quiera " "sincronizar. Consulte la sección Proveedores de datos " "de la documentación para obtener instrucciones acerca de cómo configurar " "cada proveedor de datos." #: C/conduit.xml:134(para) msgid "The Data Provider Pane " msgstr "El panel de los proveedores de datos " #: C/conduit.xml:135(para) msgid "" "Used to create groups of data providers to synchronize. Drag a data source " "to the left of the canvas pane and one or more data sinks to the right of " "the data pane to create a group. For more explanation on groups please check " "." msgstr "" "Usado para crear grupos de proveedores de datos que sincronizar. Arrastre " "una fuente de datos a la izquierda del panel del marco y uno o más fuentes a " "la derecha del panel de datos para crear un grupo. Para obtener una " "explicación más detallada acerca de los grupos consulte la ." #: C/conduit.xml:135(para) msgid "The Canvas Pane " msgstr "El panel del marco " #: C/conduit.xml:136(para) msgid "" "If you receive any conflict notifications while trying to run a sync job " "they will be listed here. For information on how to deal with possible " "conflicts please check the Conflicts and Resolutions " "section of the documentation." msgstr "" "Si recibe cualquier notificación de conflictos al intentar ejecutar una " "tarea de sincronización, se listarán aquí. Para obtener más información " "acerca de cómo resolver los conflictos, compruebe la sección " "Conflictos y resoluciones de la documentación." #: C/conduit.xml:136(para) msgid "The Conflicts Pane " msgstr "El panel de conflictos " #: C/conduit.xml:140(title) msgid "The Menus" msgstr "Los menús" #: C/conduit.xml:142(title) msgid "The File Menu" msgstr "El menú Archivo" #: C/conduit.xml:144(para) msgid "" "FileSave Saves all configured synchronization groups. Groups are saved " "automatically when you exit Conduit if you have selected Save " "Settings on Exit in " msgstr "" "ArchivoGuardar. Guarda todos los grupos configurados. Los grupos se guardan " "automáticamente cuando sale de Conduit si ha seleccionado Guardar " "los ajustes al salir en la ." #: C/conduit.xml:145(para) msgid "" "FileSynchronize All Synchronizes all groups at the same time. You can " "still run each sync group separately (see the Groups " "section), but this saves you the time of having to select and manually going " "through each group to start the sync process." msgstr "" "ArchivoSincronizar todo. Sincroniza todos los grupos al mismo tiempo. Aún " "puede sincronizar cada grupo de forma separada (consulte la sección " "Grupos), pero esto le ahorra el tiempo de seleccionar " "manualmente cada grupo e iniciar el proceso de sincronización." #: C/conduit.xml:146(para) msgid "" "FileQuit Closes conduit. You will be prompted to stop any synchronization " "currently in progress." msgstr "" "ArchivoSalir. Cierra Conduit. Se mostrará un mensaje emergente para parar " "cualquier sincronización en progreso." #: C/conduit.xml:150(title) msgid "The Edit Menu" msgstr "El menú Editar" #: C/conduit.xml:152(para) msgid "" "EditClear Canvas Removes all configurations, data providers, and groups from the " "canvas pane. This allows you start using the canvas as it was a clean slate. " "The best time to use this is when you are re-configuring a large portion of " "your sync groups. There is no quick way to revert back after selecting this " "setting." msgstr "" "EditarLimpiar el marco. Quita toda la configuración, proveedores de datos " "y grupos del panel del marco. Esto le permite comenzar a usar el marco desde " "un estado inicial. El mejor momento para usar esto es cuando está " "reconfigurando una gran parte de sus grupos de sincronización. No hay una " "forma rápida de revertir después de seleccionar este ajuste." #: C/conduit.xml:153(para) msgid "" "EditPreferences Global Conduit settings that effect all of your sync groups and " "basic Conduit operations. For more information please see " msgstr "" "EditarPreferencias. Ajustes globales de Conduit que afectan a todos " "sus grupos de sincronización y operaciones básicas de Conduit. Para obtener " "más información consulte la ." #: C/conduit.xml:157(title) msgid "The Help Menu" msgstr "El menú Ayuda" #: C/conduit.xml:159(para) msgid "" "HelpDevelopers If you are developer, and interested in contributing to Conduit, " "then this option includes links to all the appropriate documentation." msgstr "" "AyudaDesarrolladores. Si es un desarrollador y está interesado en " "contribuir con Conduit, entonces esta opción incluye enlaces a toda la " "documentación apropiada." #: C/conduit.xml:160(para) msgid "" "HelpContents Shows this help document." msgstr "" "AyudaÍndice. Muestra este documento de ayuda." #: C/conduit.xml:161(para) msgid "" "HelpAbout Shows the version number and a list of Conduit developers." msgstr "" "AyudaAcerca de . Muestra el número de versión y la lista de desarrolladores de " "Conduit." #: C/conduit.xml:166(title) msgid "The Preferences Window" msgstr "La ventana de preferencias" #: C/conduit.xml:167(para) msgid "" "The Conduit preferences is accessed from the Edit menu. Any setting or " "change that you make within the preferences menu affect all of your sync " "groups and basic Conduit operations." msgstr "" "A las preferencias de Conduit se accede desde el menú Editar. Cualquier " "ajuste o cambio que haga en el menú de preferencias afecta a todos sus " "grupos de sincronización y operaciones básicas de Conduit." #: C/conduit.xml:169(title) msgid "Configuration Tab" msgstr "La solapa de configuración" #: C/conduit.xml:170(para) msgid "" "The configuration tab is where all of Conduit's global settings are " "configured. There are six global settings:" msgstr "" "La solapa de configuración es donde se configuran todos los ajustes globales " "de Conduit. Existen seis ajustes globales." #: C/conduit.xml:173(guilabel) msgid "Save Settings on Exit" msgstr "Guardar los ajustes al salir" #: C/conduit.xml:174(para) msgid "" "Instructs Conduit that all configured dataproviders and groups should be " "saved when the application exits." msgstr "" "Le dice a Conduit que todos los proveedores de datos configurados se deben " "guardar al salir de la aplicación." #: C/conduit.xml:177(guilabel) msgid "Show Status Icon" msgstr "Mostrar el icono de estado" #: C/conduit.xml:178(para) msgid "" "Shows a status icon in the notification area. This icon animates to indicate " "a sync is in progress." msgstr "" "Muestra un icono de estado en el área de notificación. Este icono se anima " "para indicar una sincronización en progreso." #: C/conduit.xml:181(guilabel) msgid "Minimize to Notification Area" msgstr "Minimizar al área de notificación" #: C/conduit.xml:182(para) msgid "" "Instructs Conduit to minimize to the notification area instead of to the " "panel." msgstr "" "Le dice a Conduit que se minimice al área de notificación en lugar de al " "panel." #: C/conduit.xml:185(guilabel) msgid "Use Built in Web Browser" msgstr "Usar el navegador web integrado" #: C/conduit.xml:186(para) msgid "" "When a data provider requires that you log onto a website, this option tells " "Conduit to use its own web browser to do so." msgstr "" "Cuando un proveedor de datos requiere que se registre en un sitio web, esta " "opción le dice a Conduit que use su propio navegador web para hacerlo." #: C/conduit.xml:188(guilabel) msgid "When an Item Has Been Deleted" msgstr "Cuando se ha borrado un elemento" #: C/conduit.xml:189(guilabel) msgid "Where There is a Two Way Conflict" msgstr "Cuando hay un conflicto de dos vías" #: C/conduit.xml:193(title) msgid "Data Providers Tab" msgstr "Solapa de proveedores de datos" #: C/conduit.xml:194(para) msgid "This tab shows a list of the data providers that are currently installed." msgstr "" "Esta solapa muestra una lista de los proveedores de datos actualmente " "instalados." #: C/conduit.xml:197(title) msgid "Data Conversions Tab" msgstr "Solapa de conversiones de datos " #: C/conduit.xml:198(para) msgid "This tab lists the data conversions that Conduit is capable of performing." msgstr "Esta solapa lista las conversiones de datos que Conduit es capaz de realizar." #: C/conduit.xml:201(title) msgid "Mapping DB" msgstr "Mapeado de la base de datos" #: C/conduit.xml:202(para) msgid "" "This is a list of the UID that Conduit uses to maintain accurate sync data " "from different sources. Here you have the option to clear the mapping " "database." msgstr "" "Esta es una lista de los UID que Conduit usa para mantener los datos " "sincronizados con precisión desde diferentes fuentes. Aquí tiene la opción " "de limpiar el mapeo de la base de datos." #: C/conduit.xml:206(title) msgid "The Web Login Window" msgstr "La ventana de inicio de sesión" #: C/conduit.xml:207(para) msgid "" "Sometimes you will be required to log into a website associated with certain " "data providers. The frequency at which you may have to log in is not " "determined by Conduit, but by the security policy of the respective data " "provider. For example, Box.net requires you to log in every time Conduit is " "run, whereas Flickr only requires you to log in once, to give permission to " "Conduit to upload photos. If you are required to log into a website, and you " "have selected the Use Built in Web Browser from the " "Conduit preferences, then a window will pop up like the one shown below." msgstr "" "Algunas veces se le requerirá que inicie sesión en una página web asociada " "con ciertos proveedores de datos. Conduit no determina la frecuencia con la " "que se le pedirá que inicie una sesión, pero sí la política de seguridad de " "los respectivos proveedores de datos. Por ejemplo, Box.net requiere que " "inicie sesión cada vez que se ejecuta Conduit , mientras que Flickr sólo " "requiere que inicie sesión una vez, para dar permiso a Conduit para subir " "fotos. Si se le requiere que inicie sesión en una página web y ha " "seleccionado Usar el navegador web integrado en las " "preferencias de Conduit, entonces se mostrará una ventana emergente como la " "siguiente:" #: C/conduit.xml:210(title) msgid "Conduit Login Window" msgstr "Ventana de inicio de sesión de Conduit" #: C/conduit.xml:217(para) msgid "The window shown when logging into data provider websites" msgstr "La ventana mostrada al iniciar sesión en páginas web de proveedores de datos" #: C/conduit.xml:225(title) msgid "Data Providers and Groups" msgstr "Proveedores de datos y grupos" #: C/conduit.xml:226(para) msgid "" "Conduit represents the things your want to synchronize graphically. When " "data providers get added to the canvas, they get arranged into so called " "groups. A group is a collection of data providers that share data. In the " "figure below you will see the following parts" msgstr "" "Conduit representa gráficamente las cosas que quiere sincronizar. Cuando se " "añade un proveedor de datos al marco, se organizan en grupos. Un grupo es " "una colección de proveedores de datos que comparten datos. En la siguiente " "figura verá las siguientes partes:" #: C/conduit.xml:229(title) msgid "Conduit Depicts Synchronizations Graphically" msgstr "Conduit describe las sincronizaciones gráficamente" #: C/conduit.xml:236(para) msgid "Parts of a Synchronization Group" msgstr "Partes de un grupo de sincronización" #: C/conduit.xml:243(para) msgid "" "A data provider for synchronizing two way whose status indicates that it is " "ready to be synchronized." msgstr "" "Un proveedor de datos para sincronizar a dos vías cuyo estado indica que " "está preparado para sincronizar." #: C/conduit.xml:244(para) msgid "" "A group containing two folder dataproviders. The arrow has two ends, " "indicating that the two dataproviders will undergo a two way " "synchronization, that is data will flow in both directions, and both folders " "will contain the same information once the sync finishes." msgstr "" "Un grupo que contiene dos proveedores de datos. La flecha tiene dos finales, " "indicando que los dos proveedores de datos realizarán una sincronización de " "dos vías, es decir, que los datos fluirán en ambas direcciones y ambas " "carpetas contendrán la misma información una vez que finalice la " "sincronización." #: C/conduit.xml:245(para) msgid "" "A second folder data provider. By convention, data providers that lie on the " "right side of groups are called data sinks. This is because during a one way " "sync, data can only flow into them." msgstr "" "Un segundo proveedor de datos. Por convenio, los proveedores de datos que " "están en la parte derecha de los grupos se llaman destinos de datos. Esto es " "así porque durante la de un sentido, los datos sólo pueden fluir hacia ellos." #: C/conduit.xml:246(para) msgid "" "A Facebook and Picasa data provider for uploading images to those sites. " "Notice that that the group has three data providers, and the arrow has " "changed to indicate that data will flow in only one direction, that is " "images will be uploaded from F-Spot to Facebook and Picasa." msgstr "" "Un proveedor para subir fotos a Facebook y Picasa. Note que el grupo tiene " "tres proveedores de datos y la flecha ha cambiado para indicar que los datos " "fluirán sólo en una dirección, esto es, las imágenes se cargarán desde F-" "Spot a Facebook y Picasa." #: C/conduit.xml:251(title) msgid "Synchronizing Something" msgstr "Sincronizar algo" #: C/conduit.xml:252(para) msgid "" "This section describes the steps required to synchronize two data providers. " "The example given illustrates how to synchronize two folders but the " "concepts are applicable to anything you wish to synchronize. If you need " "more information on specific settings please refer to the corresponding " "section of the documentation." msgstr "" "Esta sección describe los pasos necesarios para sincronizar dos proveedores " "de datos. El ejemplo proporcionado ilustra cómo sincronizar dos carpetas " "pero los conceptos son aplicables a cualquier cosa que desee sincronizar. Si " "necesita más información acerca de ajustes específicos, consulte la sección " "correspondiente de la documentación." #: C/conduit.xml:255(para) msgid "" " contains two groups. This section " "will describe the steps to recreate those groups." msgstr "" "La contiene dos grupos. Esta " "sección describirá los pasos para volver a crear esos grupos." #: C/conduit.xml:257(para) msgid "The top group depicts a two way synchronization of two folders" msgstr "El grupo superior describe una sincronización de dos vías para dos carpetas." #: C/conduit.xml:258(para) msgid "" "The bottom group depicts a one way sync of images, from F-Spot to Facebook, " "and to the Picasa web albums." msgstr "" "El grupo inferior describe una sincronización de imágenes de una sola vía, " "desde F-Spot a Facebook y a los álbumes web en Picasa." #: C/conduit.xml:262(title) msgid "Example 1: Synchronizing Two Folders" msgstr "Ejemplo 1: Sincronizar dos carpetas" #: C/conduit.xml:263(para) msgid "" "The following steps will recreate the two way synchronization group shown as " "#1 in the figure above." msgstr "" "Los siguientes pasos recrearán el grupo de sincronización de dos vías " "mostrado como #1 en la figura superior." #: C/conduit.xml:265(para) msgid "" "On your desktop create three folders named folder1, folder2, and folder3. " "Drag a file of your choice into folder1." msgstr "" "Cree en su escritorio tres carpetas llamadas carpeta1, carpeta2 y carpeta3. " "Suélte un archivo a su elección en la carpeta1." #: C/conduit.xml:266(para) C/conduit.xml:305(para) msgid "Start Conduit" msgstr "Inicie Conduit" #: C/conduit.xml:268(para) msgid "Add a data provider for folder1" msgstr "Añada un proveedor de datos para carpeta1" #: C/conduit.xml:269(para) msgid "" "From the data provider pane, drag the folder data provider and drop it on " "the left hand side of the canvas pane. This will be the data source that we " "are going to sync from." msgstr "" "Del panel de proveedores de datos, arrastre el proveedor de datos de carpeta " "y suéltelo a la izquierda en el panel del marco. Esto será la fuente de " "datos desde la que se va a sincronizar." #: C/conduit.xml:272(para) msgid "Configure folder1" msgstr "Configure carpeta1" #: C/conduit.xml:275(title) msgid "Configuring Folder 1" msgstr "Configurar carpeta1" #: C/conduit.xml:273(para) msgid "" "Double click on the data provider you recently dropped on the canvas. This " "will bring up the folder configuration window as shown below. Enter " "something memorable in the name field and change the Folder " "Location to the folder you created in step 1. " msgstr "" "Pulse dos veces sobre el proveedor de datos que recientemente ha soltado en " "el marco. Esto mostrará la ventana de configuración de la carpeta como se " "muestra debajo. Introduzca algo que pueda recordar en el campo del nombre y " "cambie la Ubicación de la carpeta a la carpeta que creó " "en el paso 1. " #: C/conduit.xml:287(para) msgid "Add a data provider for folder2" msgstr "Añada un proveedor de datos para carpeta2" #: C/conduit.xml:288(para) msgid "" "Drag another folder data provider from the pane on the left. This time drop " "it adjacent to the folder1 dataprovider. This should result in an arrow " "connecting it to folder1 being created." msgstr "" "Arrastre otro proveedor de datos de carpeta del panel de la izquierda. Esta " "vez suéltelo junto al proveedor de datos carpeta1. Esto debería hacer que " "una flecha se conectase con carpeta1." #: C/conduit.xml:291(para) msgid "Configure folder2" msgstr "Configure carpeta2" #: C/conduit.xml:292(para) msgid "" "Configure the data provider so that its Folder Location " "points to folder2 on the desktop, and importantly, its " "Folder Name is the same as that entered in step " "#4." msgstr "" "Configure el proveedor de datos para que su Ubicación de la " "carpeta apunte a carpeta2 en el escritorio, " "e importante es el Nombre de la carpeta que debe ser el " "mismo que el introducido en el paso 4." #: C/conduit.xml:295(para) msgid "Configure the synchronization parameters" msgstr "Configure los parámetros de sincronización" #: C/conduit.xml:296(para) msgid "" "Right click on the associated group, and under sync options, select a two " "way sync. Since this is just a basic run through on how to setup a sync we " "are not going to go through any advanced syncing options in this section of " "the documentation. If you wish more information on the options available, " "please see ." msgstr "" "Pulse con el botón derecho sobre el grupo asociado y, bajo las opciones de " "sincronización, seleccione una sincronización de dos vías. Ya que ésta es " "una ejecución básica acerca de cómo configurar una sincronización no se " "tratará ninguna de las opciones de sincronización avanzadas en esta sección " "de la documentación. Si desea más información acerca de las opciones " "disponibles, consulte la ." #: C/conduit.xml:298(para) msgid "" "Synchronize the two folders by right clicking on them and selecting sync, or " "from the File menu. Once the sync is finished you should see the file that " "you placed in folder1 on your desktop within folder2." msgstr "" "Sincronice las dos carpetas pulsando con el botón derecho sobre ellas y " "seleccionando sincronizar, o desde el menú Archivo. Una vez que la " "sincronización ha acabado debería ver el archivo que puso en la carpeta1 en " "su escritorio dentro de la carpeta2." #: C/conduit.xml:302(title) msgid "Example 2: Exporting Images to Multiple Destinations" msgstr "Ejemplo 2: Exportar imágenes a múltiples destinos" #: C/conduit.xml:303(para) msgid "" "The second group shown in shows a " "single F-Spot data source exporting its photos to two data sinks, a Facebook " "one, and a Picasa one." msgstr "" "El segundo grupo mostrado en la " "muestra una única fuente de datos F-Spot exportando sus fotos a dos " "destinos, Facebook y Picasa." #: C/conduit.xml:306(para) msgid "Start F-Spot" msgstr "Iniciar F-Spot" #: C/conduit.xml:307(para) msgid "" "Drag a F-Spot data provider from the data provider pane and drop it onto an " "empty spot on the canvas. A new group containing just the F-Spot data " "provider will be created." msgstr "" "Arrastre un proveedor de datos F-Spot desde el panel de proveedores de datos " "y suéltelo en un espacio vacío del marco. Se creará un grupo nuevo que sólo " "contendrá el proveedor de datos F-Spot." #: C/conduit.xml:308(para) msgid "Drag Facebook and Picasa data providers into the Group that was just created." msgstr "" "Arrastre los proveedores de datos Facebook y Picasa en el grupo que acaba de " "crear." #: C/conduit.xml:309(para) msgid "Configure the data providers by double clicking on them." msgstr "Configure los proveedores de datos pulsando dos veces sobre ellos." #: C/conduit.xml:310(para) msgid "" "Now synchronize the group to upload photos. You will be prompted to log into " "Facebook using the Conduit login window, shown in ." msgstr "" "Ahora sincronice el grupo para cargar fotos. Se le preguntará para que " "inicie sesión en Facebook usando la ventana de inicio de sesión de Conduit, " "mostrada en la ." #: C/conduit.xml:314(title) msgid "Summary" msgstr "Resumen" #: C/conduit.xml:315(para) msgid "" "All sync operations work exactly like this. The only difference is the data " "you are syncing and the providers you are using. You always follow the same " "sequence of steps," msgstr "" "Todas las operaciones de sincronización funcionan exactamente igual que " "esta. La única diferencia son los datos que está sincronizando y los " "proveedores que está usando. Siempre seguirá la misma secuencia de pasos." #: C/conduit.xml:317(para) msgid "Add dataproviders to create a new group, or to an existing group." msgstr "" "Añada proveedores de datos para crear un grupo nuevo, o para añadirlos un " "grupo existente." #: C/conduit.xml:318(para) msgid "" "Configure the data providers. Each data provider requires a unique " "configuration. For reference on these please the Data Providers section of the documentation." msgstr "" "Configure los proveedores de datos. Cada proveedor de datos requiere una " "configuración única. Para más referencias acerca de esto, consulte la " "sección Proveedores de datos de la documentación." #: C/conduit.xml:319(para) msgid "Configure the group, selecting what should happen on conflict, etc." msgstr "" "Configure el grupo, seleccionando qué deberá pasar al haber un conflicto, " "etc." #: C/conduit.xml:320(para) msgid "Synchronize the dataproviders as you wish." msgstr "Sincronice los proveedores de datos como desee." #: C/conduit.xml:325(title) msgid "Network Synchronization" msgstr "Sincronización de red" #: C/conduit.xml:326(para) msgid "" "If you have two computers at home, Conduit can be used to synchronize the " "data between them, directly, without first having to store the data " "somewhere else first. The steps below will illustrate how to synchronize " "Tomboy notes on two computers, called nzjrs-desktop and nzjrs-laptop. The " "following key will be used to help explain the setup procedure." msgstr "" "Si tiene dos equipos en casa, Conduit se puede usar para sincronizar los " "datos entre ellos, directamente, sin tener que almacenar los datos en algún " "sitio intermedio. Los pasos siguientes ilustran cómo sincronizar notas " "Tomboy entre dos equipos. Se usará la siguiente clave para ayudar a explicar " "el proceso de configuración." #: C/conduit.xml:329(para) msgid "" " Image " "taken on the first computer." msgstr "" " Imagen " "tomada en el primer equipo." #: C/conduit.xml:330(para) msgid "" " Image " "taken on the second computer." msgstr "" " Imagen " "tomada en el segundo equipo." #: C/conduit.xml:335(title) msgid "Network Synchronization Tip" msgstr "Consejo de sincronización de red" #: C/conduit.xml:336(para) msgid "" "The process below, although describing Tomboy note synchronization, could be " "suitably modified to synchronize all sorts of data between two computers, " "including Contacts, Calendar information, and even F-Spot photos." msgstr "" "El proceso de abajo, aunque describe la sincronización de notas Tomboy, " "puede ser modificado para sincronizar cualquier tipo de datos entre dos " "equipos, incluyendo contactos, información del calendario e incluso fotos de " "F-Spot." #: C/conduit.xml:341(title) msgid "Configuration of the First Computer" msgstr "Configuración en el primer equipo" #: C/conduit.xml:339(para) msgid "" "On the first computer create a synchronization group connecting Tomboy to " "the Network dataprovider, which is listed in the Miscellaneous category in " "the dataprovider pane. This makes Tomboy available for synchronization on " "the second computer. " msgstr "" "Cree un grupo de sincronización en el primer equipo conectando Tomboy a un " "proveedor de datos de Red, listado en la categoría Miscelánea en el panel de " "proveedores de datos. Esto hará que Tomboy esté disponible para sincronizar " "en el segundo equipo." #: C/conduit.xml:351(para) msgid "" "After a short delay, this will result in a new category being created on the " "second computer. The category will take the name of the first computer, " "nzjrs-desktop in my case, and it shall contain any dataproviders currently " "available for synchronization." msgstr "" "Después de un retraso corto, esto creará una nueva categoría en el segundo " "equipo. La categoría llevará el nombre del primer equipo, y debería contener " "cualquier proveedor de datos actualmente disponible para sincronizar." #: C/conduit.xml:354(title) msgid "Configuration of the Second Computer" msgstr "Configuración en el segundo equipo" #: C/conduit.xml:352(para) msgid "" "Still on the second computer, drag the Tomboy dataprovider from the newly " "created category onto the canvas. Notice how its name is Remote Tomboy, " "indicating it refers to data on the remote, or first, computer. " msgstr "" "Aún en el segundo equipo, arrastre el proveedor de datos Tomboy desde la " "nueva categoría creada al marco. Note que su nombre es Tomboy remoto, " "indicando que se refiere a datos en el equipo remoto, o primer equipo. " "" #: C/conduit.xml:364(para) msgid "Finally, on the second computer, start the sync in the normal manner." msgstr "Finalmente, en el segundo equipo, inicie la sincronización de forma normal." #: C/conduit.xml:365(para) msgid "Your tomboy notes should now be synchronized between the two computers." msgstr "Ahora sus notas de Tomboy deberían estar sincronizadas entre los dos equipos." #: C/conduit.xml:368(title) msgid "File Synchronization" msgstr "Sincronización de archivos" #: C/conduit.xml:369(para) msgid "" "Due to performance and security reasons, we do not recommend using the " "network sync feature to synchronize large files between two computers. We " "hope to address this limitation in the future." msgstr "" "Debido a razones de rendimiento y seguridad, no se recomienda usar la " "característica de sincronización de red para sincronizar archivos grandes " "entre dos equipos. Se espera mejorar esta limitación en el futuro." #. Put one translator per line, in the form of NAME , YEAR1, YEAR2. #: C/conduit.xml:0(None) msgid "translator-credits" msgstr "Jorge González , 2007-2008." conduit-0.3.17/help/es/conduit.xml0000644000175000017500000007232211326117107013723 00000000000000 Conduit Synchronizer"> ]>
Manual de Conduit Conduit es un programa que sincroniza cosas 2007 John Stowers 2007-2008.Jorge González (jorgegonz@svn.gnome.org) Proyecto de documentación de GNOME John Stowers Brent Gueth Manual de Conduit 1.0 2008-01-03 Este manual describe la versión 1.0 de Conduit
¿Qué es Conduit? Conduit es una aplicación de sincronización para GNOME. Le permite sincronizar sus archivos, fotos, correos-e, contactos, notas, los datos del calendario y otros tipos de información personal y sincronizar esos datos con otro equipo, un servicio en línea o incluso otro dispositivo electrónico. Conduit gestiona la sincronización y conversión de datos en otros formatos. Por ejemplo, Conduit le permite: Sincronizar sus notas de Tomboy con otro equipo Sincronice sus datos personales con su teléfono móvil, iPod, Nokia N800 o entre equipos. Subir fotos a Flickr, Picasa, Smugmug, Shutterfly y su iPod. ... y mucho más Cualquier combinación que pueda imaginar, Conduit se encargará de la conversión y sincronización.
Casos de uso Antonio quiere sincronizar sus notas de Tomboy con Google notebook Iñaki quiere sincronizar todo lo que está en su escritorio con su cuenta en Backpack Ana quiere mantener un directorio en su portátil y en su sobremesa sincronizados Adolfo quiere mantener sus contactos de Evolution sincronizados con su teléfono móvil Isaac quiere mantener sus preferencias de GNOME sincronizadas en sus dos equipos Tomás quiere mantener un directorio de documentos OpenOffice sincronizado con copias almacenadas en Google Docs Álvaro quiere tener fotos guardadas en su servidor para que se exporten a un respaldo externo (disco duro USB, FTP en internet...)
Introducción Los objetivos de Conduit son sincronizar sus datos de la forma más sencilla posible, ya sea de un dispositivo remoto o sitios web remotos. Se trata de extender su vida como ve que necesita ser, sin restricciones de datos, dispositivos o formatos. Conduit le permite llevarse sus datos donde quiera cuando quiera. Todos sus dispositivos móviles se pueden sincronizar automáticamente con Conduit. ¿Respaldos de casa contra un servidor remoto? Automáticamente sincronizado. A veces puede parecer que Conduit es demasiado complicado, uno de los objetivos del diseño siempre ha sido hacer la interfaz tan simple e intuitiva como sea posible. No obstante, Conduit es más potente que lo que su simple interfaz pueda aparentar. Esta documentación describirá todas las opciones de configuración para grupos y proveedores de datos, mientras que lo siguiente le proporciona algunos ejemplos de elementos que puede querer sincronizar; Un usuario de GNOME puede almacenar información en una gran variedad de lugares en el escritorio, incluyendo: Evolution (correo-e, calendario, libreta de direcciones) Tomboy (notas) Directorios (archivos importantes) Fotos Marcadores (web y de fuentes) Música El usuario también puede usar uno de los muchos populares servicios en línea, incluyendo Delicious (marcadores)Gmail (marcadores, calendario, fuentes, correo-e, fotos)Flickr (fotos) Probablemente también posean un dispositivo electrónico tal como Un segundo portátil, que también use GNOMEUn teléfono móvil Un Nokia 770/800Una Palm o Windows Mobile Pocket PCUn iPod Ya es bastante difícil mantener su información organizada cuando está limitada al escritorio, cuanto más mantener su información sincronizada con cualquiera de los otros servicios o dispositivos listados anteriormente. El objetivo de Conduit es permitir que los usuarios de GNOME mantengan su información sincronizada. Independientemente del tipo y de la forma en la que se almacenó la información. Conduit debería, simplemente, funcionar.
Entendiendo la interfaz de Conduit
Introducción Existen unos conceptos básicos sobre Conduit que merece la pena entender antes de comenzar. Saber estos conceptos le ayudará a descubrir cosas que nunca sabría que podría sincronizar, por ejemplo, subir fotos directamente desde su móvil a Picasa.
IGU de Conduit Las partes del IGU de Conduit
La muestra los cuatro principales componentes de la interfaz de Conduit; El menú Los menús Archivo, Editar y Ayuda almacenan operaciones que se aplican a todos los grupos. Para obtener más información acerca del contenido de estos menús, consulte debajo. El panel de los proveedores de datos Ubicado en la parte izquierda de la ventana, lista todos los proveedores de datos detectados y listos para usarse en su sistema.Los proveedores de datos son la fuente o destino de los datos que quiera sincronizar. Consulte la sección Proveedores de datos de la documentación para obtener instrucciones acerca de cómo configurar cada proveedor de datos. El panel del marco Usado para crear grupos de proveedores de datos que sincronizar. Arrastre una fuente de datos a la izquierda del panel del marco y uno o más fuentes a la derecha del panel de datos para crear un grupo. Para obtener una explicación más detallada acerca de los grupos consulte la . El panel de conflictos Si recibe cualquier notificación de conflictos al intentar ejecutar una tarea de sincronización, se listarán aquí. Para obtener más información acerca de cómo resolver los conflictos, compruebe la sección Conflictos y resoluciones de la documentación.
Los menús
El menú Archivo ArchivoGuardar. Guarda todos los grupos configurados. Los grupos se guardan automáticamente cuando sale de Conduit si ha seleccionado Guardar los ajustes al salir en la . ArchivoSincronizar todo. Sincroniza todos los grupos al mismo tiempo. Aún puede sincronizar cada grupo de forma separada (consulte la sección Grupos), pero esto le ahorra el tiempo de seleccionar manualmente cada grupo e iniciar el proceso de sincronización. ArchivoSalir. Cierra Conduit. Se mostrará un mensaje emergente para parar cualquier sincronización en progreso.
El menú Editar EditarLimpiar el marco. Quita toda la configuración, proveedores de datos y grupos del panel del marco. Esto le permite comenzar a usar el marco desde un estado inicial. El mejor momento para usar esto es cuando está reconfigurando una gran parte de sus grupos de sincronización. No hay una forma rápida de revertir después de seleccionar este ajuste. EditarPreferencias. Ajustes globales de Conduit que afectan a todos sus grupos de sincronización y operaciones básicas de Conduit. Para obtener más información consulte la .
El menú Ayuda AyudaDesarrolladores. Si es un desarrollador y está interesado en contribuir con Conduit, entonces esta opción incluye enlaces a toda la documentación apropiada. AyudaÍndice. Muestra este documento de ayuda. AyudaAcerca de . Muestra el número de versión y la lista de desarrolladores de Conduit.
La ventana de preferencias A las preferencias de Conduit se accede desde el menú Editar. Cualquier ajuste o cambio que haga en el menú de preferencias afecta a todos sus grupos de sincronización y operaciones básicas de Conduit.
La solapa de configuración La solapa de configuración es donde se configuran todos los ajustes globales de Conduit. Existen seis ajustes globales. Guardar los ajustes al salir Le dice a Conduit que todos los proveedores de datos configurados se deben guardar al salir de la aplicación. Mostrar el icono de estado Muestra un icono de estado en el área de notificación. Este icono se anima para indicar una sincronización en progreso. Minimizar al área de notificación Le dice a Conduit que se minimice al área de notificación en lugar de al panel. Usar el navegador web integrado Cuando un proveedor de datos requiere que se registre en un sitio web, esta opción le dice a Conduit que use su propio navegador web para hacerlo. Cuando se ha borrado un elemento Cuando hay un conflicto de dos vías
Solapa de proveedores de datos Esta solapa muestra una lista de los proveedores de datos actualmente instalados.
Solapa de conversiones de datos Esta solapa lista las conversiones de datos que Conduit es capaz de realizar.
Mapeado de la base de datos Esta es una lista de los UID que Conduit usa para mantener los datos sincronizados con precisión desde diferentes fuentes. Aquí tiene la opción de limpiar el mapeo de la base de datos.
La ventana de inicio de sesión Algunas veces se le requerirá que inicie sesión en una página web asociada con ciertos proveedores de datos. Conduit no determina la frecuencia con la que se le pedirá que inicie una sesión, pero sí la política de seguridad de los respectivos proveedores de datos. Por ejemplo, Box.net requiere que inicie sesión cada vez que se ejecuta Conduit , mientras que Flickr sólo requiere que inicie sesión una vez, para dar permiso a Conduit para subir fotos. Si se le requiere que inicie sesión en una página web y ha seleccionado Usar el navegador web integrado en las preferencias de Conduit, entonces se mostrará una ventana emergente como la siguiente:
Ventana de inicio de sesión de Conduit La ventana mostrada al iniciar sesión en páginas web de proveedores de datos
Proveedores de datos y grupos Conduit representa gráficamente las cosas que quiere sincronizar. Cuando se añade un proveedor de datos al marco, se organizan en grupos. Un grupo es una colección de proveedores de datos que comparten datos. En la siguiente figura verá las siguientes partes:
Conduit describe las sincronizaciones gráficamente Partes de un grupo de sincronización
Un proveedor de datos para sincronizar a dos vías cuyo estado indica que está preparado para sincronizar. Un grupo que contiene dos proveedores de datos. La flecha tiene dos finales, indicando que los dos proveedores de datos realizarán una sincronización de dos vías, es decir, que los datos fluirán en ambas direcciones y ambas carpetas contendrán la misma información una vez que finalice la sincronización. Un segundo proveedor de datos. Por convenio, los proveedores de datos que están en la parte derecha de los grupos se llaman destinos de datos. Esto es así porque durante la de un sentido, los datos sólo pueden fluir hacia ellos. Un proveedor para subir fotos a Facebook y Picasa. Note que el grupo tiene tres proveedores de datos y la flecha ha cambiado para indicar que los datos fluirán sólo en una dirección, esto es, las imágenes se cargarán desde F-Spot a Facebook y Picasa.
Sincronizar algo Esta sección describe los pasos necesarios para sincronizar dos proveedores de datos. El ejemplo proporcionado ilustra cómo sincronizar dos carpetas pero los conceptos son aplicables a cualquier cosa que desee sincronizar. Si necesita más información acerca de ajustes específicos, consulte la sección correspondiente de la documentación.
Introducción La contiene dos grupos. Esta sección describirá los pasos para volver a crear esos grupos. El grupo superior describe una sincronización de dos vías para dos carpetas. El grupo inferior describe una sincronización de imágenes de una sola vía, desde F-Spot a Facebook y a los álbumes web en Picasa.
Ejemplo 1: Sincronizar dos carpetas Los siguientes pasos recrearán el grupo de sincronización de dos vías mostrado como #1 en la figura superior. Cree en su escritorio tres carpetas llamadas carpeta1, carpeta2 y carpeta3. Suélte un archivo a su elección en la carpeta1. Inicie Conduit Añada un proveedor de datos para carpeta1 Del panel de proveedores de datos, arrastre el proveedor de datos de carpeta y suéltelo a la izquierda en el panel del marco. Esto será la fuente de datos desde la que se va a sincronizar. Configure carpeta1 Pulse dos veces sobre el proveedor de datos que recientemente ha soltado en el marco. Esto mostrará la ventana de configuración de la carpeta como se muestra debajo. Introduzca algo que pueda recordar en el campo del nombre y cambie la Ubicación de la carpeta a la carpeta que creó en el paso 1.
Configurar carpeta1
Añada un proveedor de datos para carpeta2 Arrastre otro proveedor de datos de carpeta del panel de la izquierda. Esta vez suéltelo junto al proveedor de datos carpeta1. Esto debería hacer que una flecha se conectase con carpeta1. Configure carpeta2 Configure el proveedor de datos para que su Ubicación de la carpeta apunte a carpeta2 en el escritorio, e importante es el Nombre de la carpeta que debe ser el mismo que el introducido en el paso 4. Configure los parámetros de sincronización Pulse con el botón derecho sobre el grupo asociado y, bajo las opciones de sincronización, seleccione una sincronización de dos vías. Ya que ésta es una ejecución básica acerca de cómo configurar una sincronización no se tratará ninguna de las opciones de sincronización avanzadas en esta sección de la documentación. Si desea más información acerca de las opciones disponibles, consulte la . Sincronice las dos carpetas pulsando con el botón derecho sobre ellas y seleccionando sincronizar, o desde el menú Archivo. Una vez que la sincronización ha acabado debería ver el archivo que puso en la carpeta1 en su escritorio dentro de la carpeta2.
Ejemplo 2: Exportar imágenes a múltiples destinos El segundo grupo mostrado en la muestra una única fuente de datos F-Spot exportando sus fotos a dos destinos, Facebook y Picasa. Inicie Conduit Iniciar F-Spot Arrastre un proveedor de datos F-Spot desde el panel de proveedores de datos y suéltelo en un espacio vacío del marco. Se creará un grupo nuevo que sólo contendrá el proveedor de datos F-Spot. Arrastre los proveedores de datos Facebook y Picasa en el grupo que acaba de crear. Configure los proveedores de datos pulsando dos veces sobre ellos. Ahora sincronice el grupo para cargar fotos. Se le preguntará para que inicie sesión en Facebook usando la ventana de inicio de sesión de Conduit, mostrada en la .
Resumen Todas las operaciones de sincronización funcionan exactamente igual que esta. La única diferencia son los datos que está sincronizando y los proveedores que está usando. Siempre seguirá la misma secuencia de pasos. Añada proveedores de datos para crear un grupo nuevo, o para añadirlos un grupo existente. Configure los proveedores de datos. Cada proveedor de datos requiere una configuración única. Para más referencias acerca de esto, consulte la sección Proveedores de datos de la documentación. Configure el grupo, seleccionando qué deberá pasar al haber un conflicto, etc. Sincronice los proveedores de datos como desee.
Sincronización de red Si tiene dos equipos en casa, Conduit se puede usar para sincronizar los datos entre ellos, directamente, sin tener que almacenar los datos en algún sitio intermedio. Los pasos siguientes ilustran cómo sincronizar notas Tomboy entre dos equipos. Se usará la siguiente clave para ayudar a explicar el proceso de configuración. Imagen tomada en el primer equipo. Imagen tomada en el segundo equipo. Consejo de sincronización de red El proceso de abajo, aunque describe la sincronización de notas Tomboy, puede ser modificado para sincronizar cualquier tipo de datos entre dos equipos, incluyendo contactos, información del calendario e incluso fotos de F-Spot. Cree un grupo de sincronización en el primer equipo conectando Tomboy a un proveedor de datos de Red, listado en la categoría Miscelánea en el panel de proveedores de datos. Esto hará que Tomboy esté disponible para sincronizar en el segundo equipo.
Configuración en el primer equipo
Después de un retraso corto, esto creará una nueva categoría en el segundo equipo. La categoría llevará el nombre del primer equipo, y debería contener cualquier proveedor de datos actualmente disponible para sincronizar. Aún en el segundo equipo, arrastre el proveedor de datos Tomboy desde la nueva categoría creada al marco. Note que su nombre es Tomboy remoto, indicando que se refiere a datos en el equipo remoto, o primer equipo.
Configuración en el segundo equipo
Finalmente, en el segundo equipo, inicie la sincronización de forma normal. Ahora sus notas de Tomboy deberían estar sincronizadas entre los dos equipos.
Sincronización de archivos Debido a razones de rendimiento y seguridad, no se recomienda usar la característica de sincronización de red para sincronizar archivos grandes entre dos equipos. Se espera mejorar esta limitación en el futuro.
conduit-0.3.17/help/Makefile.am0000644000175000017500000000067311326113651013161 00000000000000include $(top_srcdir)/gnome-doc-utils.make dist-hook: doc-dist-hook DOC_MODULE = conduit DOC_ENTITIES = DOC_INCLUDES = DOC_LINGUAS = de el es fr zh_CN DOC_FIGURES = \ figures/conduit-login.png \ figures/conduit-gui-parts.png \ figures/conduit-dp.png \ figures/conduit-folder-configuration.png \ figures/network-pc1.png \ figures/network-pc2.png \ figures/network-sync-pc1.png \ figures/network-sync-pc2.png conduit-0.3.17/help/C/0000777000175000017500000000000011326117107011365 500000000000000conduit-0.3.17/help/C/figures/0000777000175000017500000000000011326117107013031 500000000000000conduit-0.3.17/help/C/figures/network-pc1.png0000644000175000017500000000350511326117107015630 00000000000000PNG  IHDR6#^sRGBbKGD pHYs B(xtIME- IDATXՙkUWks s 0 ERQ DcLjR7bL#1&hH?hhSi%VF `=<^~0Sv'+w?Y{Ue$<X^^B5+@W %mPISX:@}P Vn*|EE''Մ3 }8 xw4fW="33oe&^VX=!UA`jǪP5,;<WBp"gFtz{mwM]8uϞ=FNf@WVuT[k᳨vGڵk>#Qc\6WUS_Ojw:JgP}2_h좎]k}4[(:EUXc=e٩VD< Qh|\.8VpNue7+seK IV瀭@3mpngabLE)QiO"'jպo3URdX"R*޴b/Xk֭^,Fy^ґ-+)WO."Kqw[ vij|4)3ADž&~CgMW_3N$%IIcqmocL@.<.Ig Frι30ֶ TFy9-ݼysxqlIs0MSGISK.׌Tfڲ5= j(8l_b8LjqdIS8! #D|r{9 (xcNx?us "AZR-oA<OSdij}Z;GiJ1WB{Tax$bQ ,vYADʧG2܆7p 7ဉS.uQ E)GGG ?珟+{dWnڴP::GۂzϞݻwzzz-^Kǎ[ڵk;'5u] ط~SIֺ K#ccMcZ_'<:pȑO:=zB=O~q:T]U^0QޱQdw.Vuv,yС Ƙ٠eUm渿q v|u$1M Z[-1 ohǦV]g.^ʕ+W/u?gP^*]WmOmB1Φ,FhmC"oXl1ٵ"P2W]Ҷ SeΝC7g篢J'NPSU5UXR!5"Nh)ܖ-Ouy|l.j+aOWn)t46eȼ!B_Oj< s >55660,Z])wfk ^䥙,ꐚw6gJ&ߘ|M@?B- nFPpLaD>/A_4ϣL?w>IENDB`conduit-0.3.17/help/C/figures/conduit-folder-configuration.png0000644000175000017500000003435711326117107021252 00000000000000PNG  IHDRZsBIT|dtEXtCREATORgnome-panel-screenshot7w IDATxw|E߻wKNH&E@, "xPOۃD;!#\r- a޼Evfv;)=  8[u/?_(Վ<t*٧&#Q6|M6 JpE8QTZ٢4\F&?&]VOje7ZPTZ(?5f@Aq' =*M5UU,’r Ź~mhd/f/c4Np[:yg}Tv g4EdoWޠ2N"N&4->T v^EիrŇSdMn,c$ߙDi~&i1 ZvJ@Q}ڄrs\e(AOiZ=:+0םiƢ* QP*hz|ܷI*ϤkPw=x5m$kNG;Bյi..]\jY|UYeDxGbH,H,KȲ뱌,I<x:-G7jtG u:7^ezjC}mC8 C|d>Z %(& ŗ7N&4Пi>:y vu]a#G\4c],QN5%IP5φz~PTcl4&"D$#Iۺd6Mv8[u?N|U\>v8tƓ0[,$םR5G<ib+ E?A`bO>]úQ{N3ž_@م._i &~ڂhv0h۾7=G8lRcڗ_\*k+=Q6p.paMu uJӸsX_hHfW U?t~/eQi6 ў\:)PSxJ]p|$9ݎxQN69!v"lT'Dxf., 2 %ַm"*a1 >G*(%*$:Rjl$2$O.-* ѾR:6Zˉ iChfc%ށ}z)x?۫Lv83 Dۀ'8ljR?eE,c lӷ_KgoqFG(J+czݣz *C$,J<^@%tjIx5oyDsE!m,r XLs4>zK $* FC)h˧ӓ]PFLX[%5W1]kq>}`8l;ʤ {ryI|!㒑$ SE)e9 iVW6y*2Gq= $2 FC 1amC%dTYNDp֬YBX?_G#ɬ~<hqfuvR%Áꩤ۩f.dP%.N\SvVPop4?<\;ҺϽD)?,/y'`׎+_O/CzvL u[j6ymNc}n$GPxp# >c&g}IXVN]XrpD5ǗblOYvn켺:TY޼e#z[+kVXddZަOCEQT\>]uMW=@}>i#68UTiNw?kkv$FH&^˧НTs{hf҈|t2r\лCuXVnGi-#Y|&BQYZ>;$ LލwgCi48( jScF<e/')⿏_OFn1=[o cy⣵gPMV~)+tu۝=i(g#EO`ŏal_>_2phqF꼰.Cm" 2m|Ͳm{W33Сو^X;0ݺLٻJY1*QFdhltꔡBE~:f#8JNS “( i/4cPQpCqJe* FV@PBqGXL3և_>yZҲ wvꇩØ++$þϜҬ#Z=aqf[AynbvYfS'rx z_~'un~zN#oz*lV׾S-N'h}#ןϻ͡9D0 ϲm8]_Mn.B,9աǿwqtjF́,xg6Uᬾ*+M$G.#|Ky!V8z*+M |.huڄ)3u/RYF_h ~1g`4!q^Hq=?j Z'0tau}``$80.onfBiym1 N((*uTjGaM^@ p눷Ϯ@ hZSy~sE >/ 'x!<  ^@O Bx@ /,*QAkFxp):Ϥ_nv N܎xyYBK&$8iI|ԕ_KJ;gdWX,y ֛v;sYV%#,*x}Ԧ|YI=un"cb;q͵ͭv;+>o!ud#ٰ_> >y {r*,G̬,6mXǿDz:=ü?4yylʺڥ?l۾5~dl޼5~$73ͩMAA{Sjٽy :v;|'Nf׶mVѻ?+my ޻`C: GoV[Yo"::iCjGh,^x_TTTл`f{pBCBlqu~#*_ zT g7lNN.WOڷO 'O|df&jt%,\0K.Ϩ1h`ĒGcݔ;J`~~~4xNZZ(K#<5d׶6q\M)/2w:kf-7L#Fhj oq,\0`C\u8y'NϢGnn. ?l~ S{}M=lf}2sVCMx4[]€^Wϱ̝7QgAM,E N7p8Qz=sK*t <@p$F0qXg l4'-ǘ/f\|ٌt, ǏൟV@h:`4u*sooq9dYf,X>& -] Bx I42j}'X,tcTI.'05q$B]>cv2+~3 /cKjى#p%wDu`Kعk-d2$wEڛNqWi4rL}Xvy- <tMe,JK]ai<6ˆ\W^GׁGԻ ?ȁ\v%̝WC$O>?߿h7iٶ/֭uKŗٶ}kV[e#5])lt՗]q~lڴnmHfMWy=O8PVRo,ʂQV\4O5PXT<$$8 nu޳S:u趜Ӧq=zg7_СC"a l >$)99 pvmuW8˝ ]_z҆N]wΥcVSyުCF#ܚ?TM #;;v'338t]DqFW}޻o̳/ؖG=%Gy\D+"9v,WVKEE~~~؏&ii7\Td$?11MezltGZ%;"xHj[%uޕ_} Nd޽n'NϢGnn. ?l~ S{}M=lf}2sVŝ -FWƭwALf3b1[\vv7ܹ3_80 >?LbR7^>Æڥ/^wC/!gug;3;첱Mw6]c0'&x՗Nmgmטг?@S.7W7W$  K]kZ @aK1zg%*&cecZ5nh11O=YA\Z#Bx@/ 'x!<  ^@O Bx@h-יmMzFF"\7,6gԴ%xe\2fTtRp<,*s;v^TUe8pPU={1 5G׷9팖^p澀~~*;wx? Vgee%:]w4璚L@``]smn_z5O1wn+++$&u%1+sGee= <꧲ܵ7չ#v^Z]܋_e^ܵם*k_;\O=un"cb;q͵uZn=fMኾvaQBL\G? OmuٻvNs{iٶoǕ[G̬,6mXǿDz:=7oeͪL]{CʿK7Ypy-/b |5(u7pۭ7s`6FRN,zpGzh>W]\=J&Oίۯ>=w]].{}E)Grޠx_~]Gä\qL:ŮlwuޕǮ\צ6֎:ŅEspBCBl%&׉YWSo1.ܳskg;Ǖ[\;W'kw~MAӺkwDCH<'~{㮽{+%<Ǝ)/}UxrSVUu5zO5#"9~"v|5];Fxxs"#ٵ_t(/m4|3oYw7]{WQ m8:7͸[n7F꡽pؐk-]*nxJu]u8?|mkO0~ ?Lnn.,XW]99 1Ϲҏ2.ݵםxOq:PaWGXqΛownPP vZvCh.^M@Ȑ#9>^p>8~ <]7g r ϰ%'&3~5 ;gE/sېk-m}s~!&OΖjAKEp`7ұ|LEpOHc1TV2v(7^ g-…3n77[AK+و@/ 'x!<  ^@O Bx@Mxܮy.fĈ ;\$OK%y*n}$h9vSMwNIqi#MikKw* UsNiUrqs5ֺri#luv pIDATLt*83犳UsXWs;[[VA˥S8%ud̺U8on,8%ud̺;o+ >NI9Ym*U5' 筂Ӎ[\ ^@O Bx@/ 'x!< yIZEX(zؤ@pV"Ihd F8ޥf'Ogߞ7ABeܥ |u*zLFr݈wa:udy իׯ/7oqV׌7\8v}QM9vaX:SeU]ao'<2(n5 C]oI6mv\⟳ Cᄏ_I~}PQۯw]aw*CUm`0x/f]3Y '}_n˪yCq${v`?/˻f5Y'?nfy"8 MUW5ӻ]|޽}j|zmjP^^n sgO?EDD<3|vy^zbcc `l۾^AKb1a_{ī-*f]3W?_GLF]̪l؎ŐmmX1J\q#zшY, u 1#D;(]"8 UԎ00rXnnuvFKEr,<Ux:YATUޮ+?;UUNUYU_5J/XHvv9{&^5a^GqEY>>LvWN-[*[lʉW3}u}|<*+*iTI~ P%$zV-UBPҫ/ZЫA&Ǣ_qW8WNIAU\z9]ve޽<Pr3xR A= UXA5 ?ĄsQYmǾz=_|/>W3酹u>EjƹK^:ZPaμ{y٧:& O6*< q۷ARFپc'B{)) <:4=TS nj͗\z.^({Cb&_=j4hǏX#pE6WvZPŔP9KI(bJ(htܓ&-j׾a%`ҏ&,"I Z39! Fҭg/ٸ$8 999l7zC;TxFCTL;u?]6Q\\@ Y [w:pju$vLLx锃N#!~.sՔZ !m@/ 'x!<  ^@O Bxp}NAS f@pPR0ީ X ^@O Bx@/ 'x!<  ^NhnTb?$ Ahp:܊&^}nׅg68y8줠 朑HLP`t#>ZO}6^bm>b AxCX8zhFK\|OayE7#̮[9䥴ś Ve5DFF >}~ԩ*'tk&]\G b19$I9(Z &@ӡ(ʩ߸p>ׅq#yk`NLHLpd†OԈ JtAgߟib@Y 7?sIKI e| 6ʮod3O1OHl| 8o7/6`VPUTڦ1Y6zAhFκu}u0,b>JHhP:Lܻ>I8ϛE⑙# cQ% (*yY6"ܴyF7s{v$EE(EGbrcؼ!4t68k9OǘdY/|c[FE [OxeLUQbaCJ I" hy&dYBHZ NFhO+PlTF^l3 uĠx))Gѯ$TUL *&ɬb0%}ih-cSq;쳐}ɘB+)HF9YYd{sGU@U@=qνHh?ӧs/4^de5qyΪQo7󿇨4ꔱ PQE"aQVJT7RYɮ%K9s,`2'3F>-r)ٵuֳo~&MN!*& 2ڭ}#xOMOes^-;u}Eh2mܵ{7WOHX8!a\1n<;wˣܵ< zmKm$؉o|f[PUhH,fK_~X _Wb̘KI=r#˹䒱>ta?mذc/'`{mI L)زzrT[(k2ѿ?]k%u?e(*ꩠ_GuXl3[g ,4އO>9z&N$4_1៽'2o7IRTፅ|d>t =9_^uC7_DiE%,KuϜ9q%0-3n9sfȲGӪիɬX))4[[VZ}* EEXr2)yM|~oa]̱XQ,(BY)mۼNIW_Ҏ+3i8~>c-7gaK_ȣ޳6n`}8nK{ɧؼe+7cE65ׇw1iPb9QI+b"(`z!28pؓIf^ 9?$Iv^צԩڔV][fz;~ ]xQs Z抛OCz: J ,֗Q$ YϛF|JJ%3*6j `DFN}cۖM|yd$^zАΙc?aKѮ],<-=l)_OME?[sd))W\@iBjN>,#ɒVEU( K*f d V#Si2ٗGddD###˳:m:}>}zj66-Bxiz𠁔~|Ѐ6&:$ãi6I>z<7\%+:2ZSuzJJLNTNfdԎaCc'sͲێuZ fvI\:udddг\.y ]7J 0YTEF5Z(*3#Ut: _l[UTW#3QAv % bcc8IXX]ޗ^xn@Ҥml*ZTs~})[G.ŬGOh;~&|x?ڎO l:? 4N#.֥Ӯ[g}).%x*8zSwtTG:,;:*{wQRg .niy8G0J+,3PTf`T0[Ţ>-N+'l碾k]3 ?m^e&O~Zp9݋ҢbuҬ:~SFcؽkGc:]s}s[^ Η23__wߣ ?JC%7mfly* |z>zsOb!V#nʵ)3>)*,n{Gl2{nne; M ׏֑GhdgCE1K$:GҫS$#H`fLp-mt\5] ˋ_wVPR\LIq1/.ァN?]z>Cn.>kSMUUFGѶSGN% \ [!QrOfy("K^.u3F r/^YW,]^BEE=wg;my_y`ǧ@LL W_cWvT?ZaO-mxldff9e7w}u9#絵%2w >~ o aNJ^ʂEq+7 |0s. yKb݈J7Woؾc0RQ@Cg,:/[J)6o{3 s^>o,eJU˄XwfdRF 33) <*s\DLxX(۷':: 4͵Ɠ$ t5)ٌŢ`Q,j^j4VO̚SΪ)fk>-BxxiĵkG\vM&(//PaPYhD$tZ-z_=z/m۶V~Q=xUX3Og˵ikȧN%8( 8K.]Ms.oRwxZib1A/CB%4Z|}}ԯku၄=$9>6br/x!<  ^@O Bx@/`{E3 iެ]!4B[IENDB`conduit-0.3.17/help/C/figures/network-sync-pc1.png0000644000175000017500000006070311326117107016605 00000000000000PNG  IHDR# }sRGBbKGD pHYs  tIME o5Z IDATxwxŹ-gOo,Y%Wa[`tS 7@ BKB 7$#&ܛܐB 6W,7[gcerÄj죣=3sfoo_Sp񀒊Q*&I= a?]>W Jv |,L2J&8l:Ax|(7_:FͤO%<^ܛ/JS3'x}>\DWsneUtt;t`˜q: kcccc$Si" [K9dJyCQ2dX} ~'Hr|d $I$H߳GACg C+]²aM Ebo֐µۨswcb:t7d(n!ogȗͤD^*4q<_*yɦ>ZL 0Q\/kd \gz]Kn B;ɘu_MM(>RxgHxv̤ٽ~)p?@@(DA٨s'cmxo~1NAw K*(CCS]4nY7XSq2Yā&R"Ј${]m'I0j+$Ռi :('vt}|Ɋf :Dg3D7 ;\K'fT3N(ࡕKr]-۞͵8܁>q܊VFMIt6_6iRuRn0kT>OkpY8QyQ䕍:(W9eL.P>} KkՐ#įs "n6ngn^c7 %'E9[EԫLF+Nŝ,Go=F@͞.ִH0bCvIG;P~d ]ˑGp1 l2 US s6Y!aӍɦH=ArpzA*ڎtg3$;eBE\5PȦZA0O\s<.X˺ng2̩)f2q w#ͧ&Q>x(H'j*czuӁCʢ&cH'sj:JH+?jkY ~&BL=u xyn6EH&.uұr$!x'v$^V\kXa`:._qDR\hj otӆSWDZtn4ȩ)NZ6D,rHhՂȁg!T$coe!2TB8҉(N>$3gUw 䣦bZIq^Crd1L 4Κ6{wh1ۅ1 ,0'W^<_.ndOri `&aRhp%qd L@Nxyc ?8v{+cpHc DQD6M"vwJsp &155͸pӎƟ_%+똂l6Ƙԉ!RۛhM:9g CBu n^_A$w0oBY2D7_N$^}K Bn}2ɜC(z}I#>=m蘦eŋGrIc9\$~F4GK1,'0Lyxn8Cˤ9i98{R߅;PK2eX>:i (̶bw!s+Tfz;vS71(ˉMA}V,V5z'OǭȬŖh!8gLNiLxG;F.ŭsz{;D9L"3yuS;K %;h1`HQygyF㭮gYsˇ(9YUʥ'"`%%$?m=\Ycnf . MpJU 9]gÞ(4dqH(f8jw6wPwQ5Pgdiyokۓ~Q& ~s5D^+4LdId[}'z};(iY6:߿VK@[/B^Ik:iJ$D3L^؁`tL.^nS 4:9b )/宗v/,ɢC1 " ZޫialYZ,ٕ@8ds7?x210D$mܑ^v%YR/H{ĊRReDS9FD2S`"&[;OaG]{wv#)S Mb~XVC)K6,,``!7z=iڳn# ~h4e+kQ׺i,d&G.bDYe)P~%ZRFܲ8e!/ X\_[eS .%FCTR( Vs"Էu389k~>BTs`&wJ~"RcQMkIҙuޝ1^mme2&r3<'nG >Ν9tۺD /|llRX5e;20Ϯ4(00ߏbZ##Iq:u 0 $zo=3(s&qzl΀(|8 ./~ kN0]h >wm~*MbD<Z:ƈAzp;۸tN詻a}azD6iJq*2Z":,BC v4trE3gxfeL* &Ppp`hAHJB8W3ǁKR>0Ćp9v0}l>혵Mfs$[v0_aҕSuVřzm*mj3@0Ll.Y'3,gͬ $AE"4>?`hlذA\xhhV)q8h (c&JNoml{ObtZ=d hF@jm (3/|l!ԼWDŽe=R"j.B!"tDA@OvazڢۣSP{bBmsQ=x]wIT' e(r: qN8LSFJd4,Z[OmC3]~tpDiNQ"m} YTuO;yhZ#LnyUɺ aաn [t0ax 9ϭ+.ۢ @ӻIfDU N:Qʊfu}$|\{RLKgWma/%#?ﻧ nT}+`Q֘rP2h M*yn] ^zo3v3ax Y0&"M])~ۜ9m8:G3u':,t&Pq@w)hh(7w^)?0]o@fwxq#Wql| aYXW>`?w`ϱVav~XD TVc&}Hc$Y=AOtu̡W/^Ft~uL&cj*FUA~oW>ǖsH.?>~A=݌x&Nx_רn\1Ti*8 L;\}nkOۙfkU7LyҌ\__ZCgRI%<~KyYK^L3λә_[JUSB?Wְ~{ "0HF#]0Rh1|%9[k<$R^aw[ֶv/ydi-)9D۠5fwT Q:ۢ.6ֶ0|ihΠkNQ1Ǡ| 4S +6JkR( 3stonBrE'?͔ٴ9)zyly~5-*"&UC|6~ ,ۈ  tEL`@'saOwvN?!Ļ8H% T QY@D_F-b:8eP;;uTKWW!k."31eIJb.6nfҐ|ƕ:E4&,eWC'U[SHe!;Ct u$ٙaG#'/er9Rsli79tQ&tZeήl9ZSin"+kizIbö=̙XF2Yh \Hkl0dq֔ ~7ϽbHCgq79~]Դx%,.IWFH9~$W"dl9in[$IKZ!2sl1,l{Ah2.CL>3Ǻ=Q"9bI]{N-]{i ;um1v424ԡy ym(m#hiNSAa̪&dX=!Sy{~D:ǶxYPX#1`W;+5 R>3+2~@ZUR,+wE\csSdXݨ5_19}P汹%CR qGS3"Ğ$cO\Y .o;{wtx]>rV"tCDQ\^TCmlhŇv7ZOpAGRg$1?li`C]QFqZY95gjBZ+Ӕ8{ ,`7<A1!#-gzMMa9$dQvgj A L.C$d]Mb:OS2qL@l?{#Z'@-W@ڊt">up$-4zcjCߋ 9ȥbaI\BV<[LNr%,iŚ o A0tzΊtzD#KǑ$w*Ir%ō&4~ =Ia y?k W8@wxCL6eq8ɥs_3fz6Mj -F"{e&ZA4=7=AJEXSrw:Z'z(+ezd)AƖjEG S?V-в+*Wѳz6SqxCdVNr(@dQ~regԍsպ(4r* Xm`h9r)| 5տ.jO]Ξߦ&&+.yD†1+F[_l"tZ&@X !R|a" S(b!Dut:M! z|(;\NCmق`Iב7r&ٜWGЫdEJKJMG>ғalmAe}(4pt0mX>>;#!&8CEG.K[2kⰛڶ+v(!d:jIƣrAtðViڊf@t&_PpLgަ8խ#[ރCH&T6Ct{w ٜ}ljв֬Q9Bϩ Jb YY>.>(c8|:HȘ &׈܊"tȚuj>Xk1d%"aQO@>g|N$So͗jG]LAM.+{V";h͗HZ֘G u]'L?iN*"&mtlA} {Ca`"ZZZ߿գs/ MlذSgwS}؇}؇}|M:Gxݍ l+.cdwK}󭷹G/<9*= }M|>/3D/X`0i~v-66666G7*?(?wWA=0kFJݸ}AːU=L+G ^_2EN;gH8~O{{`nO=C[N0b<$X ߚ%ֻ?x_|'޲̚9Lؽǟ|~XO?e^rD^|%ɤcC1dTEǞZعc]8i|dilJ+sr*n{!nzR:w.j6o၇嚫iˉͱPME^kH7V7wuQUF?E].W_ ;|84^yz:d㈬;僵Z,}whZ\Ƥ2d0%%%_Bbccc%C^.rI'rWmmGdLP[.@gg'V@*fkW2㙘L8O{_FDN=kyavG4ٱsMII=ohcccsZpPiIw IDAT%%82ET1IDQzˈz_~ dze6~_2x܄!?xl6凂A|>o *-AQd?ld2y`FCӟ |;`Xicccs#<=9.$Nk^r5F]8 *?E@Ӵ~~[x<ȏůq.W;fA󴶶>Or-6666_Xw'M#zM7|~-7]^t*>̖ /5(~Pļ١V!;5\t=/hcccU`O|ya&"[sEdV&aşhF::h,˸=JW^?h7JQ솰*vr[6oADvz C$LDam5߹N~;Ʊhjt1ar{_,뤓 V|AǦ"|Xb%.Q#GrRTXxд[m+ŒUZ / ġ889? }}Kw4jK'i (*AE C]B4M0 y)UOt`ݺ?߽ATS֭(..f*^|WsW-orqʜp\߰DŽ!~Q(qعs60dp'N`Lz(ǩۃttt}~2L|J,fN'wEXr\.ӧW l6Kcc#D~mllI(iD5H6RУQP5m*ݬ\ 5aj̪Uk<4$ ^_cnjaΝ\Ջ(Wq:)//';KNvw>$Oki>l(,;xט1xa io렳 Rz'Qǟڥ0\Q$Iܱ)S&s4LjjOʺuz 6666rꩧߧq@k HsB!<VL<uSjR6{xc ;lXť\LeX^c!'MN V3cz˖- ?u7~W^SM7\X W_{iS$UpuߦK. RC={1yl׿ nm0ٳ?O_G~e?0I18so1 à+{˖3*>X[UkyY@@ӭP(>$$Iv=̳IQ¡pNg墱\.GKk+>*Y[,Y.SoCYFd2^gpE99ލEI58̞5o/ XG;w/֭[ߺog?666,\{K/E%`hZP(0uWߑeɄ :e2;w{{0(++ y QwȒă?J-/Dq^s|8vM7\G^8qmO^/~[|~xy/a 6iSYZ{9s_9&z…|?d[%//~z,x )ž@QV]t;UF4 0A% A0MM1 QQ4 AeM0z/ޛPt]=75{:MӐe4rZ|i$IHԛ~oYwߺ+?N[1M:::;  0`_`t]X,סE|A߹s'Ӧ f³Os6R yaϦA].N8rgʲ|%lWAG:ȫ۫QJ\Cq_}((}b=8O=4xV8~?_׸䒋v|{…H&|xEXP9spICgŢf41M"`a Sevwngʀx?|Pu~sT }6?zp7wc[  *oV[oA?cTC",&C t@55t@3 D"t1pP{5ό֦:)˗K/3\Ͽ"8 -i \vט>}0_xc!oYS ~c(̷pl~GϦr'V~?_?lX 9/CFHƏl%K*W_+;w>{-z 0JeǑP_9{ 6|z&W񽹈әpݶ9(IH(-*[?T5{Х*?,K:zѽhٴT2nik fb|0myX'+ПE޴wF0=/snd4 }zj)&&")i5ٸE ]~qSTTs=?3D) 7 qP6m:W^y%ƍCu}],Y¸qGoPWl NZHnbL;+A>щCF#*6Wwg?Hkn4;3~ǵ^Yb7|3vVg; HpwP]] jstkN t+(HThވ,7ȳ袡sJ4ohiҕo gѣy91Yl~;G\ilA"9X>LGg.!SE/+  7Dz/ZN8YfX|9\bƍlݺ'x+W֖I#Gdv/>&J?A_W#5HNsu["bӶ'cee5rZߡGvz5~6C˴)`")".ZȝwIIIG*8܆$%@H$dt=J HN)5ыCqb]~ϝ; /=WQQ;hmm%LR^^޻h:Aqwo""^c̘1\y啤R);D7"ɇ(;6!{J2afs yn07-of-7f~VW,Z s.qdY׉not:{GKyqxs#Qٳ;Lub鬵~6laO#$XQ-xmXn?5WͽρjvHgȐ!%}G%E89y$E}gы z0 eLwha-))! "7y뭷,gnVOE]D:s[n?!'tW_}5/ BTVVRUUEss3?hnno;Ѫ ]݈pS%҉4ڊYMqqĞ@-Q@Gn8 xm1Y_.@0`-mpV{XvI<OfR]ow9}+L^SNoj_qaXܺ3V4a d r}ˏ]_h$mAj&>5)NE>S&/_ՂaVKf|X%G[v UắÂw!ˆ!ªuPVb ö]A`ȑrLpXsQC҈ f.T5ip}zZ@ op֬Y̚p8̋/-r@gq-At#"qLkdp7USMWZ#?W~?ahBJ͐N'ϑ' 8 Iq1nZ!A/c#HгhY/8`$?Yݳ`*XCwE'.8Ӳ"{fUa 'LVM'^1F :pК'*']Iu ]SO'F*GFV&N@IFZֽG /yR+ȃﴔX,ayw H"O+a8%}ޞ3Z F(_ٖE q#!N;oL8VU_;5XLss3K,{߻[o-$is.~׿/bB͈r^o292i8+PƏq-YK 8'Ly[2o~lMV̴0unXi[=8NʎM;P6QO ADC?j SE4UmXa }}-E:ޯJm{b H|tXb-(HQ&^l R]#nJJQXXk-[1LI莡Ȫ"ljjbڵs9vk5 g|7/>Vz#̪\d7EQܖˤHb/ufcQ;*?? vǏgʔ(++3dQv|jx<^f̘ 7|)Sf9a&O2L5A,#؄1lϻQ|u"nmI9Jlƶ c]f͚ok[@>**yG8q"d@kdF $)/A6D/ei͗Ӻ\y%˟k ]MH6֠ah 2|.R;<ϟի?6 s=swu;ﴥ_mkS`㎁ēN\>lN"V8He>ēN"1l.%i!(vc| EXq nTI,z$!O:fe)'=n"17[KH4]DD2pǶeYd{ɥ!! ](D"nwgݵp3C4Vx+hLY>{"tƳTOa<¾`0<|ҥK馛Xlwq&Mϧ5kְ}v~?~:-"LrUWrhjjFQϟ륶~W\ (..fذa+¼yekd2s=Lj#zaLx..BAg!ꫯrJN9fϞM4'.#ycQs2zBO;fTEua9^` BII']>: 'i2elݞ6;iUFI@"dņr4(-!\NC[YV=y TU%aZv ɨvc~PQ >ы[Es dT7mmɥ̐L] "eaGLez{gmVh}+d&wknذ+[`Ogf߿yFyx3geee<#TVV#NYz5D1c y 9O~Bii)'Ofɒ%TWW+cZV^֭[yH,\ك(>g8Ļ4(xi(uZ#Ļ5fDe0wT3e\Th|Mk,L{g*9Pxj+"άIA81fxL*:K/ڵk4iDGG>P__W?qw`bPWOD͜ '!T-G ]*.6*~&2(i.?eTCCgf„ \tE˜uY\tEL0`0֭[={6rJfϞܹs9s&/r9lnc„ ;ڵkLj( swa˖-7l|Z ^6l_g۶msrgO|rnfكb.c;3;TLyqSL i6W͛ǐtţ(ߒCdv4Qi )R MR躋)Tvn]AT#pGsQ]tλYS'ՙU+D98k.}673)eUpف)KwǴMR[E|~\?/j!U j ) CUUugHgm^Ѐx节~P4eƌ_[oj,Y®]ݚ5M듀}EӴ|p8̗cZ Y`Pk|4 )o&^,X|7H$x/=xFXT𜌪kq͔DRabR/SU9F5p Cw=~mHBΪ(TeP\%(&0MˌeHd5PّNU%2޴iC?z/mԧUQQ]wݕl2c\ve\ve?K.h4zT+E~YgŚ5k7n?,pB.\7C#ws'"qP>%ڞB,wrQ<P}l]Lzr*cѢEG k\OpIGJ]|K|R8,|;"0NJ]u;T߉S!>CeT!Wm NzkVUU{@EeH +Oo`L3 riNHq U F\Ч0ZgǾܬC2H0"JIi)LctYGgT¤`84,YD".B!+|! σqcrsE&|FܹsO@i&|GUUBFTQY^B&4M |'5(NI&oȣ>ʝuQVzT2Qӆv0|QnL8A*e7o._5<Ҕ*y4]!TP̢E5jԩ"4 0EO$DUUn̙O?MSS)qa,\~3{RbhBۿܹs~Gss3HG ώk_sSSa| %NJOs+Vn<#GCQ;AuPS#*ؾ}+l<ʹ4u) qcw߳gW榛n⩧:Kof͚7x_cJG!Dlfwill#fp3y폯2o {7S5l8-͌5 _G`\k`s<^s5ٳɓ'Xx1.?<i~@eoqM7pWH < Nʕ+ַΝ;ٰat"BKQ _W'*}a&_۷? &R.F͞={u?@WW5,|ӟ{ǪUP &/r!n֭[{l¯kE .`Μ9i3f^`Ϟ=IP!qUUU=]ױ?o>1ob4]obf=xWʛoo/~ nFnV^z%2 ׿}ٴiÇ1bwq{`ѢETTTpWs]ww۱X뮻[ru/zj֬Y?̺u;Yz5HGGK,FUU&Nȵ^ŋd2\>?P(ļyY7aU~ƤI,_~aܸq\pVc=F]]۶mwd;wj*oNww7555̛7ɓ'իٻw/?Ogݺu477i&..?֖omɬ[z(Q!9s(--eɒ%TVV//[8t܉_;ϩGmoc:K{iۿǮHHR\uUǤ>L˗/Guo}g?72|?~<\z,Y4McƍǬsÆ ,Zkښ*DM۫)StRZZZHXEYYv"PUUEAA~t:M<gur-r-PWW'{B@0vX.]J$Aеm$V_@jO%a+--;|_&>DQF}Aufo-[|_'xo 0~xz!x nfF5\CAAA>)**bܸq\},['RSSab$aĈ|;aŊ|TUUpB&L}DzeP~5+ 6p]w9r$wf͚5466r+L'Vx\v%wlb3)|앶&7݄c+ vs33^Z7%?{>敛*ŴG0o~7ɮ+UB?efleͶv5T8Kֲqqcj3L|f 2|&b&`ԼGgKP5 T vnTzE!b NH ,[_5LrgLBhᘏextBq $(9ty/*Q˪xftut['R6/]^!(T]yei1<;u]TU<ǥBq~cV\!P ?|@*L팜yԖTl jC(tYtcY %A4OH©-]BNC2TB1wm:Usgͨ@[UX @HJ!\ yYDӴ|9Z|;e`rX :┱y3ZoA<~rœ9p/'Eyx=:fThv0<(-+0tSS% /*.?i q>{/~<ҥp睹ljQulN7 ;nU1iHK88 =vqB*#oa9>MSxaKe 񏱿|xyER B e ]MѰ`̛ee' mm o|Μ0hhF`P+}+nj:"x&vwDOK<\m;3e۔U}Z+y}I< ڰc¤M?g~MOՄN}Y.%:!kJS]cb&owSҙ\,1 ^De{3c:n B i?|8^wGr|k O<+âE]stE30Ńs?u2q;1OWz0-E(ĩ_ <_

E?liېkeUE!hD}+Fj?y}O4<GVU2%P~B,#͢}BUSTunjXyN ͠}o:ٝjn SUTU!cߗ$kytgv5hZU^d\,Mq<>=X2Ŷ Oe e;miL$$裹sEEC}ފb44@Վlxx.x5;#:D~ =/2 cc{vB hecf`q߷mPT׃xDWi1axwQ` HWwbkvoUhN(q]ۡ9eGƼ!<%ظ6u`.a.c !C㝽 S$6~Tϡ:vlLmlUeˁ$m ]82q9# PiS⋡[ UY䫨Nẹrg0er%x#WEEL+W.`B;=hTvf@\t\xi' .@̤7'_xDw MQIe\CIS2|إ)2tz;*OR6;zNfu ZL UKZߞ!cnI3wl!{Ztgj*p0i7SR`4\q=ړS4,փIAoB ]7( - T%z8Ẹ悢iڴ$:uTjpaoV<\ iZ\G5* $,F&pTLia~Imm-~x<}N1O9sop,*K3Puσ]YN}L_ ቹ23|sW;w8ѝLr-bD1B!qzI&Mܥl֢+F>iG~Z1 3fe˖9f@w[%xg[j(= U` TUGA2cdqUCՌ:/KRB'.I*eca[APQ,v˰'?AΊ傛TT՗/StM7rԹ"ߕf tY{oTVqc.!.oYx]RBbLfᔖFzNgsL3QUG$u!}+O (Jgqr( A!N9mS\lSR-t&8mQ(UQQm[;0B!ć9H8p~L tfUV1o<;S;C_t:MGGnyǙ4ig}B!CG*3A[[+a`Ppa!@a҂ضM4esŴ?SqPW;w!сx؎n~h_cwPuQ5 ׶юlu~Drcz|>LNg,s?PWPTT(P )JJ%#tcDloΎVJˇQ\ZAHQ ]qe( ae3aq %;Z))FgG eÉZ))FhqxhIĩP9j@J B >_<@ :Ba& :6`uxGQTt]P zq C8M0Xcm!9]2^1$8.m˚6.**ۓsQ5ԶX=SmFtg]aNZB! !TPm׃-C. ǧ<`ױ{> s 8\r*$,ufRR8<9,3˻[דN%Olˢ`=dv|!$ 14#Ŵ57N~dN%I%0͏~…ń#%tw%,xͤB'Ga1|lࡆzbͤSIښ?R'tQPV9 |9B&NˎoR=jP1$:;[M:#kTM0RLiE￷ mf1|~*ع-ʇ ՝ AI0ͤ)G x7 )&Oل.4'flJL* 234`̄膏=R>l0f2(G1sNHcx JvΘG;?$kgd3IvLxq(1%:ٹi-#N$XwM1ز^e G\DQB\zEQ ?`eslh f&olĶLF@g{+vl (\ɮ8{wm|X5@E%jusTM8q_({~W`Cxd2iJˇ݉GWHQIK0BZB x* ‘\>۲f P>l$5f&U(V(,*!*lTh |6| p#+S;m6Px`;aPZ>,[43z5\J*I%=l&M4Ӻs D"((ضIUհ,`BlZZBH b/Wꀃ`\_;^bǞ`vdP\#:=!){@IjE&B2@1Da$ZLkAskHIDATqRFkST+-˫FR5FjF!'3\*±-!(2|B!B!BB 8B!\v _BOl&( }:J B` l6B|2PUհm UUE(C4tÏ躁h.P!-\l2fRضE&± B!No`/@(\nF4p$iB4]ǶLt2GM˽K,3ZB:wSOB!'gf׌IENDB`conduit-0.3.17/help/C/figures/conduit-gui-parts.png0000644000175000017500000020262411326117107017037 00000000000000PNG  IHDRW1NsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATxw|ŵǿ߫,ɖ n6B3J@B!%B@HH5zq0Tcܻ$Y]W3{%rB~ں3̞9;g̙!Bv}O5+uMl6:$$pg?irCB vXӮ`\,S&g!RP7ԽԉܞB(Cvrx)&-y]-(cټ2zC;$9;/KZ)4+@w֕+"kHNK!@ZNƥ}O_PJqÝOr.j^bq\(BN&N%*E(BB!ShZl{inndy{w[BCe{7rˇ(i! 4"E;V{B=,XmYGy5BwFYGY(4$M^glA(4ߓ)Nw;9 WZ#(3Ң uh#2k{+;4Mc+HCK]װ,I %tU0c;Bw:Pʘ99+ p{CUUҴ ұ)eXܣ׽h h~>LP\ ۻ]R<|xe 4 VVۗAL/z(ߥ\N!m ۲?M tݤ~}ţG6J;0 3 IaɜD8\V:ץBJz\-Pߟ dƖe5֞y+@8\.Llu)%0дwy5E^[Mt`Rf: iFiMոZ +BcODfHv|︣pAh(uS) ]Pѣb#ŧԯǙheǠlk;=o<^2Z)Uo0rX*FMBmyߕFO[#+-|Qhmm%YɇǶE6JrP9z N }#/X^}ਫ਼X2i7#&5nw>xLTKCOegPd 4,$ԼtH( ݁ ۥ(%^hFրH# 'ўVvsڈox HB*Ts[\_Opmppp=óDVJ1iÝ_3 ȞS.\>/(MuǓغv+M^:V 1]H[#4Rm99@)&[Z@Ro,АFJ@7 `2[?R)U?,OC} ^RnlS> aȾ0t}^@aFiۀ3PpxrBӑ+d0z2VƋJJ ./c&Ų͗ټb !W!ڹ_BNӼz v*Dθ+/R" 'ȬD#er^YykyfpnYK8PQYS$ٸ|-|=]b+qh "M2CzK)g<.-+ێ7o #74;Cnk_x3ᮻ`„ݿa+ `BAofeMA_ӉeK]N:r]|aFח!:V1y &:;{Gem-5Iǖ5$"זҹexG^5H%%W[썡 )hX #?Vג3nL8nI4nSPQ IFRlXO$ƑWNeE1qy=|=]Hw9E&eE+l~ WTҽe%/L8-5%/fJk2 1U~uT7u`& ?+q77]1 fp #]}H[o>9w{ƻĄ p41ߪ>W~{Ǭyg tI0kZo޷Dq5X6lG6j 5_;&nZЌ2t,$Bsʌjz({nKb7 }+<ops|y if)`{1efM.rd̴"&nz]Wb TIystq/aJ\|xj#=4k,s7f2.n *mfKjfx,gq`-ģ61@{K81>A"MolVw,>xPл^m_hpӉ,@6BIcIݖ R Izz%=,0<ÏfeܽN_v]f/L2U+_^ᇌnmJr{m17-әqDVn]Jm?w:$:/u +ӎ!E&+7FpL^^HnJEgm ΍7KhI#Fp&z:Z go6fkkZլsȔa?y ]Q^|mS\xq[s1:w_4iڠ-A~w:NVIƑ7ZZMm>Z"l0 %Rlq4[Ihj[eK4 p+@@D ]\hN81XȎ5!2FNʵ>'Bl+d%²ll3CSEs?<"_?q?p:]u&Z:ı- ˲vd5p=VS_Dr4ѶF?v&Ül-5GB5IFq"'M@!SxfҺ]Il ZNe&QElFx |j|煛i9?Fnw69ߚLMwSo`%ضIJZqۍKb+SY;%ut˙H;<:_g|e#8=< IӤ[8pSʸ7rcHUTL~'q(GdϏff0[c3޺Ӧq;DaTٽmmI4E/ʥ@mYHvBI'4).*į+i`Q>P."i ޾)_ɄT=dL}K3hlzXź ` ?XncgQn!S5).ܶ6͘"<ĴllʹH?0)) 0<%Kth2  !q%%XrѥB}x8wo(gWn%n)nϙYWϚH'7p7ca%|sWs97_\N;89/៭ؖ>6lRM,-$$_B1mt]`ܡd4/iJ,F4R|Mƍ7ݯm&X\iZh";=b妚e˲Q9昳ih܊4)wzpƈRDG4~~ P@0y2fσpޤaKքq̬Q2+q+ta"2/ʋ oict +VTqê$S(M!I%MvD_`ّ̙ǁ;aBms 5´m T}>#d\.hM*FѸҳ﬷)ܺ*Ex]Cid X ݲ{=gŽF ei- UQ_WQh > md պ-!efLb"蘖łUŽמ3Ȓ^'~=FAQE:@ L\]x4,3|"/ (K kp7*īѱxQchjZJ HbI0J|6\26taae+tiBI,Fؒt:e2t}~=)-}c6F”jۼ $K[B!4h uѡQ")!͚hya:GY K-Ja6&đ YôJm 7Ɩy09v+ESa IYc^\x߿^ n'T8І`N3 +52ŗƔQۋGؤM< xa@;06`1+7'ڟ?̿4Y^d]t~9wo19F´P㢸>D(w֣aIhp:P4B7p, 1 A;ót3VZFckf$t7M8}?EKl&B+!gͮaQMiqQ3mZ[GYyoSyο'+xjQSq3 !$Jk}q/Tv)eu>e~{ILvOTĵxh2e+eo뉰ަKw{dlzt#Ӧ`zPxC+- ,~)OYa}C™2$XøQeԺ,mnJ)N}F7׾Nmw_έm]w~Òش Vེ0ON=f$ 06zM i2maL)sj*n\V3ou31㧔fmd7M)-<ހa4]˪Ndf[+'@խNBIpA#њW%ԣYac'i6{ X' aI Ͳ67&nUx.bӣ;;z$YX1-:{h21Iƌ۲'|8ٴrus&0-i)YEwFg|-Xʒky@wI|eBJYr>/{",uu&k;\)X}]:Re B-PVKwHW2x"=/.ky5;kX9DApR +aFo)ꢴb"nl[t ie眣&#z83f4Ks_YT/ MJ'cJ63l6wߘ~ΡT6Nb)0^ z'L\ EA(P[|$օ3@f(qPTG&C7@$ pabhp0B9;??\tEy8Nlƶm^/x|xU8He\˗#dgƃg;,&c) | >GtΞ6y 4Xo1AQQ2 'H]4MAA>nݢ@i CI`iē2+{+Vx]!%i;(.#Z!31B +qh7< pf?O. w*(oHH8U6𡯧 A$ER:)*~1_ IDATI 0HeН q 䗕BXp P@ftu'),/""q) $K^i)n"֍#%Kqy] \#J:"DtʋXag<<i:z bzI:EA20QBzq"EwOb0:cU cQW3n1t޶j*W~!KVC ћX8\΍kp pTNơkۭB`&OM2mrIwn$Ӎt4?ٱ`n1T2skpef=(.ij]M٘؆iۘ(bߣQSOPBa2-xb ٺu+dr=W՗rW@߰~J)sNY@k"\d}2;7"rFW*Zn[!B\ZۖuXR)@0exJL~>tvfB)S0j(>!0+rLc Ea(A (s쳬'l{o@ٲs%IpHB+$ȭʥΖNvJs``יݽ~:Vڮ:즭x6R}ouȭOO@}3yM@f A&M*Nگt߬^sϹȡ֏Brk іߩ;[ͻMϥ߾nhl[:~',Asl۴69HՑbw֑utQS=Ho7BAIAͮ܎B&qf&5`xd,!ԫP->}Fࠃ #K|<[Vn{#:_A}6? ]UNݧC!kii%g{U-˖̂ ljډ}Zz5 :4mt7:Z{Nt%ƺv p!޾a%LaL q g.U>kgp0jm?*+?Yf]Ç D_/PY@_>"[li>>(`wi;A<.٬>.֟GuZ1:"&gCSf6k'Vt=8з(.d ?!3zؐ{C> ץ04 vφPJHG,VJA O*7VfY^gHeRC;`HA&|Jm(' u4`O5znʆ 뺎1껏x/<A׍&+f`z?1=^x)j}w.YV6[Z˲O݇kk<&@)cƻXz i,,bLY|}jtt#XfQf ݑl3u$ܶ)!ϙ;'Y1rVqiv9e@#MU;=Ow[+F~G|>x&B,B7rLNO5~,^MGee;@K0! v-g+q},zoz|Dv%?[x)$oL[t@2݌{Mpw6^EU9ӍK8=|X>{̎9Ɲ C4 ]1,<˾}.⫨לo)NR8J}< iaJ$|}sdy9Z[[viÂ\G3ꫯЛ[d5kgy-XпtBcgR C!1xp!6NIK8gpY'տ$&e?ӞL:rn0tfk>rTL3kݓD:}|)nMpwZV{mnj :%T:pkPUUpw/8G}~{RifX hjcWۋgcһyO#ܗ=%{٥!|7曷gYVh4kCx=Iߖ|Cy!jD ~gmTLet^e,훘u.vt0}[ő"B;\4/yX'2&W<.┼78t+ v|\ͻdC@]8vr*4Srw#|󎹐S /E8X僙Y(gx'o3<=Op'Ν;ϷK:ӦM5kc㷳?CyBn?~loaJI1ə?-]t._Դ'"w]ò$(o&%nX~Whø;D9ܸSkW3۲H"=1c]seUsL:E?$o.>*Ks'o'h1X}2rA2/]8Z=#}\/+zm=g̙wS,1`Nۏ0;obt1lHtӕ*8~~J-=:K"lNPhBҹu .gCpXVc|k2xu85zzQ<&xw=s)3;e!cb8|=.:c>rܾiį9/m[$ݻ_AČ4gX!iL!vp,;{fwq'cĮ0/ fqs$RεY1%BjFf"tMG.GR^X@u0~,/rS?(S-w=RJtyq`761ѽ)&s)_a*AjOe4O>fH@Y&KMIy &ģ\.B c̬^u0GN˓DŽ}+xLÛw36=83lȼ<\/X2{q}(T ?;h?#=Ci#5Nz:g4[/) dWm3CWd?O?Jgk.;"cK<|t,B4ev |A~y/?,AH[ t2I[DE*@; `]lֿ/)̅ir, d n_g}K<"12#|'W}m7f̞'9]b͚;o$$*__LCB,(<V 0XXt6U(q%%-޿ؾ`=[J<@F<#Fl1gŶ=[J x}\yiщi9WhNVQ5u yب i퍡9dGxeeHsOv(gW;oC>șo!TҶh ,9oKJ MQ2wՠgB`.Mt`.ݮxマ/3)ٽCC1쇡$.8?W! aCOBeSݪlR 4Az~C)@d$McRw|m{{R‡Lw/$=|$|6laC@);Q۝=Kix}xՎ;q<8^FkmerYQyјg:.)meƐ+vCöL"'o*Ån7a-L@ X>!9y2% g,tWO#IdlP 0pbӦ.J+pi>tR;ƲwVҕ/)ñU \ Vڠ'_{Ot#g1wT> q[U>2immҶjpv{dS' ע[Ј֎E#˰` ؟RJL3C 0!Xfah[0#V)%̤@AoO}λ)xsomcvouE+qGmiy7Nt 9\ho_ adXJqJ.{>ٗȲn3oN LbIřIbiNܚMv,9&uh71 ep: 1p;H-ެP&S5r,GC~Y)srα{Rۺ۲jeӳ!Y9퐬>|!Y}z;D=o\m[W0Ξ 1;{Uc!4t]":ߧb<ujuZ;zhOOhIũpz~Q~,^ıBn +q~?>F%DZ s$]u'Pe1/RN?>%.IV˝)gp]}8VvW"՞՞e# )mN&d=^䠕5*vut^woOtvG]ױ[qyIqA48ps3z1xQ;2w ˞ N8 &4P(t"ʽĢI n))ƈR̴`Q'Xo~rz*IIM i0S8TW1c/EtĘ-f̹Su X0qx~AePZVJˢgxrQKZGKE>J4{Q Ƿ^}t58Ϳ(|woOtd5$oOtY !-P#y}dNlta:ƌOwog*\/ݾ XcB 7~$mN$qA0/032 V 4CJe5S#L(A~xn23yYM}{ܹSaR&Azivu]W׾꺺E")R3ݒޙL&7SP>̇9_NrZy2 F,B<'e";3J+"0Qt H"e@`qq+ijݎڡp*qjqvqu{М^z|u[T|w rrTTiߦV4ML##IF(w}AGE?%w1TY_}hO t- iױ=vޝxJUdŌ' $׹(P4aEWy\2C&f͇ti7qUU2U/IEL@~DY0M"8ap&jH-֒%TEB'$fdHyti*BPUYj+ef,@BHLaNt~qk=;d|Kr8U~;pU+/W=_%433- ikY=dSS"FʥRŦME23b-b(s @H0e0X @yV v U"4 ו@b&mڶ剧f&7@X=K C`+_*, }.U(dkPVc/5Z^܎ZnKZtvyߍї.}*+RsT4XPoJY<-F"E;mV%*u,:t(@MTU!tM9UT,|6{ w;MiG`&5D '.v[1o`Zmy f 1/Hk#bs~ CB~i 9;x+^6;ડ^|o\5*BI""q姶]c,E] "# jjbde|z&˦gR>9+:zbH AnT[Vqb"&53WfRG1'S%S 3T;wϣ(%U:q WGttTA^r{{9I)xd}b I~ZZZ^/7?t'W/W~QG()nMLy^Fw)5EEM9~(ZPRVyTVF4Sɦ{{GEawhUf䒗v2VXX LԎ., *n'&m;s gmb8!:pLLVVM!29“TOq&L[?vk7MїΆ[:V[+;>Wtv} J˶UsZ-La+--kodg+w3𰋈VWZ=jS'{Gÿ9ZkM)QCM:7ƅ}bN)Z#o&B r6Ikď>6C3nIn2^K:_R!*-o"ẂaW e0w*: ݟxL9(lkoE}7R"ֱaX%jfgڝb\:Y4%Czہ{2W i*QRV͢2U,,72DM :s2 < ce^p L IDATjt5[χ MM紿 ?-B8GD9MFj:n :~IMǮ=)!'; 8̘%3|0}% Q>ڤR*\=ǩNxH"B57m=D5Jtbkq^AC4j8o0Kc`+09*CGg+O˘$+M*kMmsQR 3ה!/}J'o r4b [pMw2Ա;h5B(>ԩΓS#Ϥkf%EUqbYYTv걅U] YWP̶m {ȗY\m|T(?!+XiBFHaٚ ((׼Ӈ{Še6- aQ3p]%3VSQaAI%f٩kцMR֢lC-m Ҷ55;zp{SHR ٸ;RrxR U9uyepp=sT8*42ϓ߱'hJ[֬1P'uM K G20_/ȥBRviEudZ^ AX5( PP Js4db sT2*ʹ3T a ]gjJ-UnmK7\.U0Lh& *~[I=Nn:^-T~j{!ડ=/\5? 4 2ۑYОx|VQ2* +5rʹz5&$RSCѦ*u7,C1„-H% 'H4MM 39Wi}@mY rۨėB $$751%ͳ>ґunv4lK>[[p jYUɊ!7MkTa&>!/UƐR/gÂeDC"[BMQj8LBxEZ=x[' .z#ɴl 4Gl WH5wX~~M9CXN7Փj(p9p]Po5լ0:H)QPкga3VIH,툔!e sdQ`rj${M'jeSaWT$@ DS9$ME:}lKk~GW]Wuj-7qDx,jO$*j+B ${"j;`PU2FL=e4?Vs>`gO1rab=T [ ozsͽ+-6 @MGw/}ܜ @bMiVW/(%\@b躵n$*qOz͜X  @xVnIWZwbo!|;4U!P%_el&;PB!2224!@JP8EN8t?λqK>pձ'اX=W|ɟӧpJv_Rq%J۱_>˕\**/ẂkE`7j%'/ Gg/#';ŸÜk?bUI=nΦ@X ۽/λWԎ^~{&~aw9LjVe Vi3]n^7tuCc|LCsuGrp5+r[>ik~[ ݻ7UUUI8&:ӦM#++Չd /QP\^+.&?7U*iӾ#7Q0gV>#B ͨɗqWf+y 'ͼ$k8[e@x'NK W X٣{cD ÈYwf_?Ʉ٘RdO{WN7TvrCc"7}nyHMί~q+LnrEz]0]eЫW/>S>sMFnn.?i L27N؍c%odcygX9'[|j7Qn2*LRg/\{_e#/cxV&."ι|ߛ'X ;;ѷM'Nfw7|~e6#b-hn_4c*\G\G;U"-gI޽93fԨQp 04S⵺2]C:bUPUcP"L0j:w#GgϞ< 44Ql nC =$9'0nua&j@dwe5+l\Jelj4 `G2-UX۹i!@" اE~e;p0!$w:3;O_F;E  w>ۯ;yk9#Wkc=!i}vc* *(WWW~j\NB0 N=T/_N߾}UMaJ6,/g[6-eVwt_?)?vR 0~%rW#蚧aF C9_=Ĭfj`|=#'rBts=GGo h_hm1}7_DO"=#W j[c"X}26z,YKNHeE MC.J3aN8qʄ=` 303ޟtN 4L ^˦XyLǁ_ҥsKt+٪s^kpiZ[;)ۍ_& {WA,aݩOV] i-OTP&=#UU@jHCUUɛaUS6.|-W:+W1>+_?m{*(WWNT\5/1|ұX,(|`b /g0\7e})xRVlY '+u(*sݢPx#Eas˕~7t:r巗R!>rppWSY9$ B 2O?Gu CGUU3jo ]zD?7#~lxEΞ3_nimt[PRa{9H944::ulO߶m[OJGHNp)`j4׎p姵J:*1؞*=Bbgk% {eֿtj˃ZG4b?L僗m+ݮk{*Uނrppմi<\|Q/LӉVv[R&!!@"_k:/pӵRSU:}>; \ypڿ\#a"Ẃ0Lpؗ2MKW'*'D `DclyTkТ\]ho+ ں54Sح{:ǩl^7 b2Lyݍx/_=uJ2#Q%?\9yq{ 54+9|Kʾ"Wv媡\UUskh433Xfe r $ZU i*m2iHe kP mHWI\ D EPUr܆!LC֓ӡ#JbV UMTtH*8XiUj~l"?2l*Wm+CS+7?˟?WEʊ0 ] %KpI"+װ:dT"O Se1aP7G!ֿ7gU8UScyo2T(R'WB MY/RZR-4BvݡqM>^4&{rWm\5+++KխM堖XM{1%3K/ҥ˘2E.M~PV0TT1Y sɇ2ix&N܏S.F_YY &Ldҩg+مmɬ]o ^79"ǎc-kk6:d}{P} o.Z[O) cT;7u;_q᛭|/_3q'}q"'\5*dvovMQfY"ܥ3$33̰#18CDE4j0%Pu^ͮzхrA03bYg/O =;ҽT ZL\5pڦ^Ujv{F_a.]7AB^^["ʽ/+kоMGTZ ++Lu$  W(f[HN &l@^}=_zEӱ(o/.Og3Wv7t,WհiBUQv^N~M!G?8N=Rfv(~O_Χh4of3u Sc/1f|c6r}s`GO<;[N쮳gqШL9f\~ʕ y_q#SlHZW]ueee!FTUYo[jEFFUUUTWW8EMlaiӺ fNx6 @U5z! .Cia$<8ny .Hr]' T36p䱜^jmל-Bq1(TGN?28!,?NsO%ģ5t?Ϯ9$$,\XĀa`95"Rg F_/_VQ|ҶZ6]tWӵ4WCoX,a躞<ۨKsT-lڴʪ2~]M[~2*ŢR^Qa}]XvKeJ˟_xErtÊM(P'0v =nh$VG㮻RS/d3︅Gaɬh3*{uFwݍH~Ժsw}2zn}o9~&=&[دJA^t̳6(hݩ;ms9?zA 0wk0{֝Æ oJɠgӞb#>_8d N}=[?0qƌL;u%|+Jg3**"W8~8yσS2s=0LӬ}G9묳uސ װ8=Ss񔗗 BQkOuTEE"('''>##˟-oV:ZB6_o!k )PսaĐJuÔkLOʄ D8M% 4e5-ä0j0Pj-׽t~t{Iib_GN$RS4MZnGFfkTˎ醀iͿ*My VE2gfUw'0M C1 ndÔ,?kc0l}-TU#Ǭc1L$ 3H)iӦ<E3_[G,lb p&Yž"*$a$|( @4nU4"0 "7KQU5[md}4c )uӔ Ebq UEK(4(BUCS[i{Q4b:!B!4 PP5 Ev @2}Ry)cݹWvEqY$e3mK6Tj*YYaH{e0o]ջl~(}I}b֮,ޕ%D 5'}JCU5:n2aG#iZJO% %d>-طX{@hm{v\/o.^tRHh!TvKUstWۏRo _';nd=i%+@uLr0%;wʦw~5l%س6&GDHSشֽë4V\yMW*|O1޹ UUN~ъ ~NA??'3iק* 2zHh((ZV;Ck^-'ge•t1-Ucs[!ZGY&鄗Q;Q~k>AFf6d?otW~&g핫 +ʿ?;WM%%%Zny3XQdL:4wKfw*^|O%ߒ\B\\\y6۴iS8Uf?SHܜz7]]j]̟޹ UUUWEتUZG!U͞Ҫ=6f!AJkBXDL/6 !K+e:?Z>`r?cp_W]Wu5+|";;y1_BfE CV#UD*Kj}W J:_|y^iIyq քE;pm窺%'gBG̠UNAܭU<ӎaT /7}*WM}{[9h$ip.UFݜ]h|ϧ\O!e)Ny ~BIZvBI/WW=<[rڱcNcb20;n-}o _H7p^uxKr30ؗ?AZ/(^nUKV? ^rnU*_ z -p&^w'3q$FoOTkŦH5W3p^̜5{{Ȍ1vl 99膉؇L)ebUQ!06ȵWJס}yYAuyR`_ϟ<'=ςVmXyM+r}IIŅ?֖VnVvHpj0;55.=hc4 /h6UZmH+08^ڮY@RA-W-ny]hi6 ׶Uck953mm`^E%'ԊBStؑ~g0hP!&z?)cdΒMh‚E '?Z%P8"οO?O>A6p)1fqU"8s2ƫs6%Εs&38X/GMBI IDAT{g2/|޲l,+'W3xiV /?#Fs1Lv>;_)L{yӥ;j("loq6c'LFV(`8WP49?íWǤ2cS!dm@BSD\GU"Lfk׮@]`${ݎ6|;>-Y/;7蛗ѱB INv&9DR ?./OzI) VӪ2p/لXM߳Z9# Ana]w' 3E勧qyxܣX1V}xu߸ů>**ߏ'곇xkYR J""{ɌnhN:~F3ob׵OdgidnŒG/1sj>6úoIp}=Kgʬ ֿO^7ϧ@5_Râ/?wŌǘßKe'm !%}H%;ooy鳗gtjиr~qy*WW+Ẃ9+ה + //60oMM h60מiמXfm01Z)̫PWG!J΅tmflN/g-A E2a\tL8c,3u#{=9d)㡾.+Y\|^p(5UhU/n`LdZw"DPvn~ùù|q-e:: p Z_kزWm"gO ߋ+xV1{9ɉ][z:dnS,>Rnts!.Zom8e[BS檥\m}}W-΍WEx7sa5ɀH=?nkߚhZm"ZZ &sC2|#wHuuy(Doi^WgeܼR.rbF:JxboàyD>sF,Brk\5"sKּ\Yq<|<'.d#ba]|?8Sd>\>u/ϥk./cTVL=n=wz.9Ou{^G̅W#Q0 7SI)F{z94^/MtjN?d#j⪩5G~zlz`^;4Ux 6Y++k{D"5R^QnJ1 (_[.摩P5LFPr/cܘQt$]O~YOM }'~;>6I5"?zY >OY~dDt{iÐaøEeiVKJ#H%{r?Z Wp-Ul ̛4cqgbFgn[A+0ǜHEE20a @ GQjyE9LKF8^q8UUǸl(j}{)%h'v0XǘU:Bn|m]񪔵&:u D+L?~5 ג*uuOwǩZm4v]n> ?^/_ҵzӕk{>Rj ߘg WW_*Ւ\mI^83 :~UUqx g .0oyyT̛͚͕%*B$*V ݸ)A4TE @ta1՜~1 ޠ5)d`:'xWQD UU0 0-yMu+p"h%Gm_$ Me_ UIƦJ9)ʕrs$Rg黛+s#W9P"h8oswwewm4M)SwJlFSU3G;|$*Λ)Z(T?"u74UQ6᧔h0uwko`iZغj! VlmAVڂ(kU-hiIy{R6{NeHWf;ʿ߃+/b-y`:$_gu- NEQ0 >;d(bsyjCrЎT_Ӟ*&0 Z,3d݆ U*? {X?t4vUP~\\m-GhkֽN-N'u8RJT ;fX!hunmXKƙ/EUQcKpws^z|BSدyO ʕ]&* n\5ШlQI?-7B8+pVNn-"/7-?ktS䪱!e.5Je3=_A j>|},zjOG~r.-7{kVH*y;RMy=%Ʃ[K+^?-ɕ_rNUUKT&:wVƞ)y AiLj㮤oeϯ7V:{RrN+W\|}5ژ~׬YeKBASUt`dffPHk PI˳߭߰ybȑb)EmasF]N{N_%Q4YO{OQ0z7u,`^{Eeו+!r-ձ8,%ʡN;^^|{T\9e~Ɩ+ W~ppsZ>.0qO;={&L`ENyYK>#)6B&ϝona1\tFVKOf1ٯ`ړKM p[QZ7Na9[hWkEģ/_~d~'0}e bKp8&M>o6 kg(/c}w.=$P=s/^7W/c -W^JkWt\\\5wqGKX/^7H=ر'9!PU͛6h 0{Y ה2]5UQx4— 6sWvHie,V(#el0R٦gń3 x~꧰=>z0_}-g]?QYW>o~ƪdMGLl'u)T^zߖJTN#?\令UUD"ybvi梪jJCZ ڥ5ՔQTT|(t) 3v+05%|:.aPG#ֱ^vna Ѯ?gȐsX@a>Y_9G5Q*akՑӐ؍NUq9:RY)8Ɛ9f_N~Im9z2]-߁ ";CCH 2FnI\q c .& s}Z:PqJ'*OIl \5i+B0裏p.wNSPК]슪iH@:䪴Ϥ"JieWt}%)i* 'jոW1pkFxѾWtqGZnVaD Nw [ʙ N] qGr5Q_NɽT1r ܩزNazBgn/ D=ct,؁lùu :fa1n^nY W֪;My8#%gg*pLpW.WE~rV^_Ohݺ1 4 MQڭKnt ӔDucĸlzH歫ߥ#.aĐJס9I#?V\Z+c0 LEuGtE'IC^{ݏysuSw60yNI϶U5tpNN;W[%0q/GCu2BꐇPRZ/gSdefn:Hm ~^mYEka21[`^[YP ].~74\yH?Wn)g0a5OH,l%#2HDO=o+[c2a)|چVua5vGt~-鋨Nj3.WyI.Ku_O+3Xt;۫5fw-]^^>NJf8ugd|²RzMN;I9,Z_/iYY1yC j!+RZxkm+j" Q1%!+ddI)QFAUd!~K&+}}ҞJwkٯ*#lq+WnFdF~EVTdwdAѧRo#YEG5lk}IoW_{{0IW$ J+li|n=f, byȉ _o 뿺 ڵu]( ƒ{qI#M(k7Ϊ^|JtKüx|UG%ϮƽVXW_ VzxC-/&Y@ 5>“價聘vuyζg\Gf<ՍL'WџcDZ>=fƌ˘1coҁw0RJ dYtϩ$_/Bf\.,O_cHzyo ~l4T>4WGKN\W\4Y:_GﮮWUWb&l)#5'*d DSz\it܎_ct]yrvE-uyWrAGe_4!Srkylfڕr=yzau>VUF,qTVZL2XOO^4p'4E@<fM&D%L8a֦@ͬo߭ē|J@ڨIjuc$ZUHP=U>Ys)*⒊cW%ﯷxy([AE2ߗ4QYN]yzGm`c2a.hagde('UU%u[+$DP%&#" ylsʞk.UN6~~m[ @Hc8>tx>W.7;d'1n;? mdQw#sx^ZOQ*ʭRU 孲T-[ʡw#;aHAC9cc9oN~xeu巅i yY0?3/Ss mמU{Y2X_6J&NR(U^o]3h#3?WRRP@://wr ^:G%tnq&ͨ;3 8 ׊J.ς #oqM߉cy5=T­ ̕J72`×poҾ@o=Nǔ| 3,̣8{8op#Lk3klN:xλ?*B6<G93~UKk*[+0d<M}IV-VVhMU킫_ޔ!+1CJ)})뱓|aWʹs3LNz4-{R،[.&R[6V,I~9rǽoRJRJ)K%VKsC{IrR˂+ <9)ey<R}(y¨CEWH)yr[K);,]i?LF/bRJZ1d-\W*)eѬ݆*˥зRFkdl|i)K/gJJyKq-G=HryuɊu/I_߷um˭Kv F~Z0-ctTH]0#]&W}>ڌ_dfB-e]>Y!nYCn8sLny;D$F5$2CeZt38t<<*EZ &~ҹ3b!|0k Fv6FEqm^b9xUu@9 LFf¥t_ʥϳ(g_.((Zqwv:sg(> X`IK0g>)k><Ý9b zA(]X6LwlOoL0]]_==Tuh{ד( fSSi5]*Q{>94 MJyk[3d"mkHnMl*-f՛.`cv,Xr;ӯ3r"ѿӚ@iW]߯ NЌsw`jn}{ƞ9*,.|ȤBk#cXI)Qŋ W !(*:˯y IDATaϞѴPZԖU~Y/k*Mv]t3kcu]i Ia k5Vh =*gdž/hw_hAP`(~w^6߮/|>~16b__ϭ3`S,0f_y]{rϢq>v- v(q2O7_<),PzzѵGogC@6'viO.y9@#ˆ.5T9x dEg"HiуӟsR:?v=^ӣ{U4#ʋQTf5B*t60l)/,H ziMyg4ՙֆw:wL>v#>~y1/кu,-a%;ʱOT1U&妲tꔫMX4v]9o9:W$}n~wL=fIw19m>'?M#[Ap>xBzyۅ6YƌN 4:iI'/暱 _LlsΘg?約c>[9qt9?? }qFz!)3Jt5];4[SF73]-ӂzE]6 F9x^6n\ϸؽ{_}'4N;ݛ^`gv͉D&nzNa)V*t:RQbZ;9[l/b*WGVN4]G #)$e1_uos!G>ËWEtTU`Xb^c=RQ9tcU-=x* iTk]( uY.Mb;ti+u]CQ,Q6wzdS^.wYۦzqwۉD`.30Ϳ;RQ#lhRf]3l WvHxcIꦡjrNiҼ m{yfyVDPHsW.|4jvr|^& @ɯҺLeaOBT.>n"t8V6 DxݏUF̽(͚͢Mعj>8i. +f+]ҝ*;[zq3M i?VBAEfqo(tؚMKo}u*06Ѝi:R nl:al,cl, p=?WNu-:CQ2*W  R׍YQkM3l`#=kZ ו4k! k0o%lkG`'9%[W%_ԛ.F0rF}E*?Q+Q({U[h  /?FQ2I)i@ǰ8֯c͚U6۷AKhx_z}4"o܂". @(;!n||' k)%ҨV ^ewoq׽ u0.f9BŤK^; Dk:IED%EmKk[$72q X)j,R"@#ȏq(Ə=KӆtBp!2B 2bt6v\RU o.ji(1|VN*E/crG݈H l6@01y"|]x< #"Zp a>6Y^CWOmU}myJ }{xwxQUصEہ1fSشG<,6ê 9V]UVӢˍa( z` :,<7)'J]w7]|&cNQ.~+e)#ps/_q#sOYZH) yxN3kxRm猛#F, Uepẇ ؟fԘTUd~JGf:OM1vxUqJ;+7u:Ա3szI&K?7i+;="t%oGVN|R~eaUr\P*_3  rYgE7䶋 ;/RXx;_+g۾Ѵ`/zqY̾}.O~+9T(upg>Wn0+|Sl oywۺp`E z[ MrF%q(W>˭]r03m-Oɋ>417g+(n?pm٥{<2x s?}s˟g-`f-e\ ?lI67p!1XY$:T&,ө'd͗H';fceeV䱷)hVmpJ=]>z(..&;;;n>Ng}՛y{0 _wBӶ]ͳBi40PHkGt&/^_>PQн{^/>ni_m!.Okj~8a,/M#l>f`y4>-!ݨeu TJp"XMנ\L+1A܌>xl /Ϡ(S8yiK)]2 mn [I9EvyGEhԎ/_9EvQ} +k^w0U cC |pW2~J3 l>/~})Bs_%7|l2 ۰gۗ]SToFBRJxk Ct{yAnI^Htr}.Zdzh>Vz9s<-BA`():{"G)G$rO)S 'ǡќnv.]iQD X?ciՠV|NlݒY9mFrnOݨ+i/^1F^yܺ5t¯z_ 99 x\/ƿ>~ ѽ'4c}V0KZ15 O_;ݱ-gx *dO!:sv=iIg^C!pOZ8=\2 7S%uhFfnF]x/gjRG詄UC+g7Db7\_aD#x>4,dX˓YVXUllݺ)STj")%HcS~9ǏG}eҮIM˨ۥ1%J M75+ vqeg,GHJ ;3FAcTB,Y鸙0<ӵȬhOk+_faP*s!rfQ ?+x|ʙ:ɎIOm*mtI_ +gݭRX9n{`UN֭iݺ5GAWu/GoْBT;5Ԗ5E쫑Icےh<%|5iѵ!My@ Ha |"aQQ vPz<( AU XDz >at!Q%VN BzQ4.UƺP(d+|p(UjCؼjL´]@|r|ve;{ TGk Vwüy `fعo4hh ڵѣa͍=*G"VPcX6XBU6ĿbO?]BԄ_@Gc;P\8?n%EHQ=԰~"<ފCt}P̍V"zmὪ&o2D1D!WP=^<(lCDؚ1l4ဿn",kfǫ*5IF\ՔsXab̚ Fbi^oJx-9^dϞI{\WɐcChZCV?, Cz!BJ:'IO귞խ;ِ,_7~ DU$/YX5~?\}5̙c:Gp!b Br$w$` %&̬/']}k ӍkةֱxCwź!3'l%:?| :Xm'¦M @fа!Ν7{WƷ|)_|]QZUʯj\H9)eE$g´J%GmQh#^k&#Y۰rQdVc7ƷyFBpЩSalx57g&`рZVcLʯܓ@gc} \L蟔hRF#o]8EvHosY/l;=<ؕK7tRJD)8"*/&Oh337`\FЎ:u2Q ~'#o?r"WvUY9)1{)et[3OJrrdҭ:YsV(-Qxi+7(PN=՘ w/)S*ꊦL1ʇ{7b$d0X"WvCCJf, Ν;履P~}$vK.EŜv4>B5=> sd\'{JajOƵk,>= >'RZUd~~#tjvoظ#F'a[ǪE:+_|4mj.U520n+'Q) 2aTUFmê*tbuUQ;* 0lXBh0_x➸gCVV4K'WG[laΜ9!'ND­!CH RRZ!=&HBH BBZt#i;~h5c@<(kVKV3|ֱj;aLfv 'Yv'r!D/LX%CG;VG_=,c\iW\aoݺu\}՜tIt֍]2|pnV /r}6ƶZ)̣կC9Yxqyc;G( r@j:Ac4]'@̤RJJ LNiobƠ ֟s7lN'*#%PcOQJ[)|h5VĬ|抶+k>N2x&';WXVG_w߭PW9>sz!/^ڵkYn~)wu}eͶ=B *6be-ljG_Us]w1w\}ݘy >y}U/Lؖr%fFTU+,Yw}-awoPL7KCY4߿3OcK>vkOg@6f5%3hry@#Ư `ɒI6k֌n{/Gy g̙,wC. ߁J*B gM5B { B:~..rU֨Ŋ/'9n1^$V(#ƯV4fwha[`„ L0!z?p@VԢ*?6vaEʯ(Q ŝ5ˣzWa *uwЗ_d2JR"xz= Nwçرϡʹ{qC\H'OOG5g%n{MxX%SUH]D$Vvd-=ZU^^ڹ7 zj{=hEvFCȼڇ2vώ=WJ_̙3b8M_~n]4 p<0=tqPBuص1N4`֋h޸fzp>s[Ubt9YUH~UyϓّU6l-b|t4auUUqh4==s2h ǃyàg^Fϰ}{@%DɮpܷFS@rs%IWYY&-O/k3:FTIDijI?`SX~ռyEF-[P^^Ί+5k/歷ޢs}mz +_L`#u6mp̛ EOãxQ R*H F(\cD$@J@y]J𡺁@9qnPrA (w rO)\!tZ`C~p뭷F͛Yn-_<%u09bFmڴSqdyndz[ˋNA`%qUpQxDmӎsn޽{9tEEEP^^i|>~?ԩS͛xbx[m5pIn C ~j$2> 7x##''-[Dy|#4d^ڇUe6NyƤ=G!M4!7 RfV@Cz8_U./vTሕOV[)ۜդI .3`.\ȁ8p@4}̚5c+|#4iR'cU}jUu(ШK-"K5J.dpU"~&;цW睇nc_~Gk& k.&77ȹN_&M]zXb+ۼ%w-œ>^q`)߆Ǫw-V{7&dӏ6XBΞ]qMxmVC˖-ի۷O.^lmj+V균 uj"-yyy9|HEtM6cȉC\DxZ/tJ99wJqX7vX*tvaW IDAT6G#VG_͜ O?m ԩ';pJO0h"HWա=B^9zmoYӦ:l"oN^{uvٺ;DlN8֮].4KK^5 fn-VfLjW.6cRXE~»Bd}0x0U2g"y~R~e˻:phфg@)M% G")x<ڽi\">3 <@ʝNcoR70E&v`Na'C/)|*泖6VUxb@H=.ϪSD"@Q$$/р!@$KQ$_yGܳq y WfUG:WvT#X%Avr"n"D/`m*wТ{_}:D뱐!_4 #}#߫V4:_Àj3V)J-9P"`7,%.BPy[>=Ax\WoifSN1ÇЯYDgxwɏ,Ć2VL.֓(4K#ǻTrC ?^m|\ljr1x('񏷾7ޗn[^Xصu#}t/cY-ӝZNyF^/RxQ}9d{"X;=X%#.]|g}4 >nN<ڷ7zz7`<$}Klt5Xɛ+34QUvUW^N 8x `4hƣ>JzzzkkX(zP=:ko!R}^EE Ş!fJ)mex/KZOL94N6m:#Ck4<XُES(LkLif@.XsV}r3FzY3:9;ntk!1~l/'Llwt+՘#o7+L~sh!rPc;1Q}W3Q=n=/[7oi6lq wSꤧ]4dပ]ZU p50k,\XˋGB)B^11Uʯl'C1 aHhۘ͛( >(ԭ[3sL222bfwZ[4.8p FE hذ1D+@koSRHր /Nj^O#a-O6D>Xkے}gQ|:2|.bA=eߞ˘6MvK]^zu?aAK%|NC/7ri7zzY+ 'N9yiYJ86~:.~AnyХֳ=G=t"xLBon[v){yyh?{o5e_Ϥga~W7~`ǢձprpHe ԍCӶcWB ^?akBZ_VW`Kwzؕ; ,ݻa^՛K;7og/;زa3rK U蚎hNI 7 uj2N8u @[N?-sCOEQgR(Q}ϋȘ 1_{b4CA $ ?HnێFbR`뺎ihZGav\:%c.~yOHC+Y[y瓑Ւ (!OCKrڥl?fd*W t7c354?YCz*՛Kx/SϚϮmy3eӧ_ű=M'VּV9vU&҇7D._ܽB!o /wcu P<~lQ#,P￟;3n8B~VudSQ=R'oGPE3*HrөW! pS57^G +H,d҃rg\nߚq}Σp.P (Xsl~<&Ic^[<]Sri-aU|.u2Npsѻa4u_^ `3+J`:P30rz[>]< "Xa*ov5}H4R8օy8&޲O]nlln7du 895L@RotC ?bNGN;mgS+'㽃)bOauce+_Q(?X@Bբ+z]>!MӘ={6gq:uBӴh#hnU"\yv2x><EUN0@UUTme("_R^0zP7G9'r9grl4l؜ɗJ}zl5MMUÍC:w>w#Sr7#4SG^rFt_&CGO ixzfhԎO{k9dVtʝ}9Hauxb(+A ynjşEс_rP=x׮/U` ^z ֮v6(bxyKjњtvģ -͏4 ƲeKiCn\ ~D ck!!EHcI"$@xTc tPP=𡽡NjD*)H` -B!<>/ʃ^_ ?!uPT':@EF* BWEE= D,<^OXE ;ɣx=ƬÅ>|O]ظ;z0µ(E)JQw>@Y)evѰU'k>Nv'K5^)RXXEHQT ~e/BءX{ 7ݶS (KMXn `0 LdP4=O4%pgPCUr1Di3Vxlٴ-۱i*;4]gG2V)JaeΟ}èi h<ctL Gml;RJƌZHkbgjUvv]9[X9٘xv"B4oՎblG7£_Ja^avJ)1Xut]\֍VȪYN<!'=9g<=9]چg' ~ݳ3DN:X٥Ja Xg! 3%Ô&UU{B *)"DQE?07PZ4Mk DҝK7G%vp + kxif}x`!]ש[7@Y)u'(h*W)RX%Ƥ:&MTR*d@UUWJd$UfȵQS6.XQVV0k؅\;GV'UrxrpL#̬1B~q#-_FZZ6F:ٌ5mHJt@ M{R CK1LQRP[@^=b i1T( iybխELWE}TrUuxd>kJJ?=EQIKϰ@шU2rSXʽچ[J8kTAQQQtk 8rom[.^R~`d3(nC< ر ?^Muc7*;fyNi^Um} VVGJTv|lUtMan e4ma#_JaRYiii1Vֈ!?!%%8Pkb &L=v _-|v<AOzz:x<ٜo?cG3w|Z XW.==fϱo] q=o gnC_BP9ʩt6Z)^X]pf= ЕP(H] iAWXUUVuIa^ڀ[0B7p7|3B!Q\\LYY@3fp룴43o u_<BۇKft$3-?]wq7ٲa+3y[4Mf?9,ttabaWg:PJ%[J!KFǦ+iٶ?]^#nXES~| +zX%CqF_~L:P( 3 !@J)))N:<۱xe4?nu.k{1!s=l{~fîbzoge _j(xƺln\ +4'2yvoN[tև@y9>Z%RXʪG<)RX%CFKKKR:cGQEF M&-uDjaqy _o%dEWx^^'TRNMOn >lҊ7a>Aͺ lk"RǣOM?džHKde1`UXjeRX/s4ae&WOԩS!Dt"K"D~?P(zEB +FP-5sO -tlcp\HxalP!>*055f%cct6ޕ';[扇Uk)y+W"w쀝;͚!7=~J좹DrU0K~Mlm]8V.]s +'~7JaUIO;SXom#gddئ[.ݳHyM4`0ȡC“ca.] ewa! `wҲQ&wdBLJ5'MxD6*[#XYt+h)ѐ\ZW)Kauxc ŝдiS[U$ Ax&!== ÍG]FMѠQ.%##=l7:%ʓs$Siyׯѣ+Ah6n+pnxvF0ʂkhw*VHKdmr[OE~eɓ*Um*Yr5Y7SOnm/BC/HJߣ$:;i= 's]dyGz* oaxFk޽aTط9q"| $wXEuM~ƔP?@^_ZR<<?R-J)RXN%W3$m`|=2dtFt+%^UqdƖegv69sprwհiq |b,* f<a&5 QgNJQ(:TH ٟܖV +C2?R<r?% NtVqFC0}:LX~ǎ,Zs2|6EzN4e@JCVzW+  !@ N\򋇷wO.TY Vdkyc*Α[_^|Giܪl(45R%#7z{7,\h$*qm͛7ӡCZh'̙gرcر#'Nd߾}B ,$tTFTY{>^=mWpœkx9{ ?zpޜ?u :L#dv+VwĿsw}1iSL!+++:rڇ{f{]l#k92nH81زϣK"(?T/?oFŞr5Hg+ptiՁk<%w]0?~Cp#P7ٗ.9NϜX|kKO_-pZ7!GmJ4q9E*MsIW6}nݺΙͼ2M:Zx[]'V rO)S 'W'fΜɓ 1ZBPXe;[eᏻ#EeÞb[?3{l+p EAuI@,ZGy/4@V$ĩ\} ̾9ˍάS2xlK?~oMgP^R@x)A^y&|f42R׍QKWߌ5BbSI. ƫcJxviy'0tizmωEvEUyʙPSXՔ_iw V;V!WC`6=4! sɐ&,fg1 j̳__,|^ֻ+r;[=Fey{r6ne>] n]z'nzyyewbһ4>oW{^fr{ڳxaI5Yx zi2r.}Gۉ[~qCpI\H]G7!H4ԐpAػȐ~qƱcԩ ѣGB ԣ Nočەw]dGmrZ>U ꐫavv6B̛GjTHag߀5 b?Spz:h:,XwGЫE 2Rշe Xr-BF~xTPwۭ|W(U HB\=a[G= 3$;EM,^T%5hw4NC .dԩ:tFӯ_e#d&5G9M4jbego}M+kV)kVɒoe[p< šo*wse2;rNU+ Ew-ma['(EY HHܓLwS?N̙sg yOSFTb֬Y}̞=;FEw̦?'ٺT͕bCaiHpUw0U:W{'Wj lN)Иf_A1=lZ 6vKr9MʹIۻm̋n[d|S&Sn@x~E~s#d+'\Hl.'[ɟvۣ;[+]tQq{{;^z 믿~pO?ݘlEެZTI_p޸>`}Ǖ*noVX]#T7խd=ʻ[8u{Bw8jz#ΗC1o.䶉̙:nI'-)Ӳ!5i-\-+&A`+${Zr\94zu50 TG_> RV o7SOK_o7c,+Ǫ D|H8X7G>DSVL+WF*?y#ʕ ;qdE\Yr\r\Nj6L.lȀ// q[}[BTU~%e46\%}[PvxjGgF~CF4͕Ʈ$jl6ƕƮqrU-bw^ aR!+ox2#"DIj? C+YAcDEx[O܏$+S;9v,qaϞ/õ¥B.}c ws ƌAqgϔ&݆+Ҳb$;1IHq5"qJjXmGs*q:纺7z< V<}%L`Ej3P})BDeޠ:mNR\tap, do0o^4Y/G2Em*>M~W:8HZr5bq+{W JiDם " < @S[7+>'L:@/h7G3!*BXrټne$Px?1C[=Ԍ+*)[oD._8,<"a|SGG+oٴ)'Z0eNI^Rvj2֙8Zp#.7qCڱqד$X=Pחh6X9GƋzrDf /ԵP(Xz̚1$,E)%A(xgVq&GJ\c#s>ZȈHA c $ROk>}~Ca˖'zqL\A&9oKZtVq6̓t]S1tF&x;o`wJ8 ٹoS3&vpȔ1ۻyuW/->sq6B)%vn7]^+A%~|~)o>T"ȯdz>&!xkCgrʜ6v<ǽ> @z~LSj*L `$7 < d=ښݒM}.)r%'5;}=zMJJ_2IHrU 9s&0x%t Y em{oQJ-0cWqa'OŶ"}E߃9cf l̛iȱQ|5ϛs*a܉\mȵXӞ;9KOư7Ǎ׏K?Q~;y[y~phWfT=@j `EkkܹVDl6ErSFKlo~$q< վպlȕqk͕Η,4p\9t:^\U k_~y{zzB2hcbȹKssG-'X^DI~iQJ( ISC,>;ǂ[ya";6c+}N~[p>\,*Ln?AG/=A'z%:oyYAc’ 8Du)HtkK ƍSNLdOZErevqNlDW)_Z\͕Zq帊\U'/_NPIQ T,!QYT%O+=;w3q֡B)魼gOmo[1wKe@nB>OncM\8~< ۘݾ?#sLfOo#䋋٧3? WtSFe%eOIFvLҔK,MM~4r*?&W~\Ճԛed[%O]Me3yOb0>e>Ƶ }2lݕgWg^ūBҘ#ۘWAPGk_w: w89,w!u5g};;[9oWy߼K>A]CO~7 S9Y $ G g:\\UqecVX-V9+Q7 >›A9r`gO@w_WfUY&57{D3b d;ԯȃqٚ%7'oy[SKF~PgFY̝.c?ŋXz=P2Tyz@$ƆNΆ^o;6_ looJuq帲;ڸVO4UV<,J$fK1h${رHfАQg7{~Ƽ_B@fHJ"A~6CJ%!)fn_?&?0 v6RZ/9 t.าhk1]VbrJ=6}:wj6m/P 1y! Y;x'ٜ?^А763&c< "SSC?%SF"SNL'o̫̐G4 5e}&}dxjfLlڌ&\\9mWÓdǑ:#4hȵA(}|1( QI<2,E Ȯ^ڕsMi`ꘉ̞2V{Gd5>Vn]pd.iMlV\ؗrq2q5<>Z]#Tsj /ˑkLAtm42z'qX|zx,l 9>Y5)+ھjKkM'M\jh;Ǖ^X=>T$tm6L\cmcH4`$j*oiAɦhŕqID^-T=iVR$ k 6+UOŕqU`hhlBWNAH$ 16|*-3V.My449}+W+:$qRuj W/gCw__]-|)I_ Wir& W\\9W@X1Z}V?~?-K L'L^#<+3<)B&6 VP]ɯeMZz-G.!7Gx^Y>UJCfn`Ui>i}>iYA~7W*6t2p\aF(mo{k֬<04>BxoggӪeGKn]/s2}`F'6?~"BI4ز>ǿ_.8eW]˵mYU948-+ǕK<ƥ hnn<'t `+T 2!4e|f(6&IKk\Olf`*PhP`_ryDMOo#l:}8 J4ElJLfT>t'=޾ h RZ!Zk'cO<_a sw?\yX>s#|`erM|w~,tgS:`ݶm0$.x +F&ejqYɱɺt024:253fPt\r\ -s\ =Iq d2\CAO_UG'_"8 ֭9Ex!e HB!kܳDʨ7_=ERroE~VB 1}>ߪ2KX%J'~;OA>t51q53}u겹g?Υζ)CTu\mr\9~@!s.# A\J[v ècPO!@Ȑhj) @e%˰Df=AP*!frRO6AʐT"Y6 Jr''D$4ꑭ%^6W.i︲osU-3B)˛jFJyOwM 㕯_%:vmar̾aH)O֋i>_Q6~g`lڤKիʽ\U;nŕF_5UUa|`ҍԺѽxfO3nkZuL:c{6/m\r\m;K47^oIGg$-:%'L$ ѯ'#)CH:dz lWdRdJ&Y:}+M]Ε+ǕjVaPj)%Ap1c4>@Tq=R(DZ6hF A_BLK8rbM '*S IDATAMtiW+kU=0n̻i&֯_I'4d%u|KE&N?'_$!  BIGg>&Uz0"ݿ^Qi-,?dzd"}TQ9jP6\uLvԶqtz|ɛU5h*W+UaF(Ofݺu̙3g`7,@f<«,yI9^= À  B)$m'lg)&6'P0 o ;M/2ӌ>.+\{˹m֛ 9i1daOd$rNGF.Giz/cIm&$;Zrq帊t\ݻ+Xd W\q ,2#RJ¹'1kS\I BW-4؆HW޼<7usj Vx -dxWV2MgwOV@sݛ~MiڛgN~ߑ_Ǹp陋᷸s?ΩGMV?w?N!'pg1a`Z3ZnɎ_ֆM6jt|ƟUR\\9WwG}tЌ0>W4$Sw8n,Ƶ1ub;[s=?Mxt5hh=7̟k&r]\|ƛx?n».fd8xLS@#_vc ,^8_<{cr. \['nwO.R븊?Nҧ/I&ۦx]=3BǕ+Ǖʆz8A X|yq:!BƷzl:B& c[<^Zu?A_'-͍X_*cŋ6ˠg;]'.9g^Vmow׾J}iT͐!fM:;:%4me&tP`e$?\\9tzu߹^qr-wyC$L#^JIH%0dRs{iaAN8q8TRhoidOt # ˛=!Ag~],>r ;\}|y'w_ҋXk'ތ}OQ8@=ás$7?s⪺6O7\:G`}_A0!s?d(iṉuwW*se!d\3Yj5Gu G$"7_}ŀr$r̩ksP_c|%/ %?̥pҸ&wh|1g<6e̩Z]glI:r5C3N_Wip\Ogq\ ƼsySGw =\~ؼe8h4nY`!8Ȭ\ߘWHY^^](sY|B/m AhXRJ%ϐ=<ewV- 귑S?}x-2+W~8V !r̝3͛7#dޞn (W6QO̕muVLIuIuIuWm]-#nLTm2"Sfcj4DeR2WI>;}t\踲qo$,h#&A]T}&9UO5 +O}v\seĺ6+S_WU=Hݡ>\4ӝʱJlN&yS`qxq\%Cm*j&z0l3BJ֠֩r:;!ɗ>N@Rl՚aG#W6Ak?JŕqUX2X&}&Lemc;j6?hŕjP2 m:.Ֆ*S1̶o+{T8pqr\V 5{H7q͢LIVw\eV}+WfYǕj88 q]FjaoIWp\qU4麩|<.Nt߶bTgjZgjoC5|6\\ mZgjsU-g6P2j2kײ]\Wp\qeǕ=A@hZխN!f-\O'oeVI}r\ 2Khŕqo~c;Y-a*}&l|5luIrq+3W6ٜJŕr{D5j+[A]{ HL'O3IiMhJEj0\\9WfEGh)Ȫti'_mHw\Ubj0\\9WCUIw:>j4Mtt>ă*i:dOา* pqr\ =#ԍʶYC3*&[qi gS3,ۀT8 W+^6#?\~NpZ\ 'w\\ḲcVpNU;}ɦ٫f!I+;WzWv>\Ճtba$+{F#TGxv]t啺n5[ѵխGڪH=o]% ]U\%qq帲>G7z":;Q*Qz.4=jO*'+;lrqr\rU+RFU"T:bM} UW\_?&q:y][U5\r\9:mHCuJ`gEgZyi/+{8}q\⸲e_Xkơ ILFW}q}ھRset\/*WpU+2 NMv&]&)i/o;nC71Ḳ* +W+Ǖ-WyuNN@NLG&u6uKdq\r\9+#nU%UtDTr|R.0ə0qe+W+Ǖ-'fZ~lW ]pٶ>W#8M+{8Ḫ ƁvtW?Fy]bUS{[|ZUqeU=W~WGׁjiI_ZT]ˤ9W~ר꘩IiXLn\-۴q\UW.W+[jŰ]#4eΫ1鬠BM\~w]_!w\6؋6\\9t;a؆xvWTY[T:ӝ䋍lԇ4?+{8ḲǾ̕-j}B'S9ֵU6MLFէUCN'I7=Ǖ=W&$Ε+ǕJz`:k"6ަR\En:oA'gQ};I:R?qоuqRuGW 2jgM'A7'e'GLZTAR;6;WzW$;jQ+֒Fv5*Dl i$%q56pu}SG\\ mZgjsU-;6r”!Xi'[ͰWM}M\q帲4m:#hH29dm`:9*!LՓ:9Հ.lij3rq帊9ҹV;'8Z ۓOw2Mzll4arqg@D?ٰ-?)07.љՀN]l68\\ t\9Q|6/K) I))zC(HAҏZWmV&lา+{8챯qU {74 2l-v#@akT=NӍjvImdSl]ץϦo+{L6umF;W.W+LGoNKc߀T}ߧ{@ k[ŧ?n6.I1ͦ<ާ$;j{ǕَޖǕ$;j{Ǖَ~窣3mmcJ>dА㶟LHR^V?69mGpTJDnĪmM:u%ߦrUm&>r\9~twu 򽽄Ba/ x\%CWCW/s5HA&oaXdUtttpG z|BL=?p@kG5w7s+{\Ip} ?F&4a܆aoyo~l6˹G̛;R d@XIǺx]\>:M2W.?ώ+;lrqr\U=;kS+3mTilߚI C'g ӌ%i0٬viq50 Eo:|?y闡T\S„ };l+V݃e3z~ޏ^dma!$!|BDy>R\WyvJseiWӷv[K\ůIz?VmъZf[reo 4|@ ' 0SN>9"X __X7mq'NAxMͭYQ*=z];8ݝ=b}w$}fv PRߗz R 3^t]_ŕi/I h+H*u LavӉ^ի>RO_BD] nܸkײvZ^yPcc<;_GP( IϞmt 0ϭ3K'kwR^fjbWφoUu:r\U_+R5g'Н jO_qUWI6%r j@yY]|g;w.vv\rY-n5O>MMkmtlBOеq|)߸R[w@6Z6M>4Wv:q\YdW`qP]^B YndT}:;㊞v$.OC޸oaH ܤ$w/P>0 -h]kjAngw87x"CY><̟??U'ĦWiZ)%^z dHb"T(28h$6֭~g.wqqUA3J*gaM$MYHώ+;llYlvZ,Y(;Lr%-hXQ֭ZM^ǚU سe/w6L&iefⵊ+ǕQqe$#p5tzNhN]ԦV8)<7gjTNMlA7ȤIs Fc#a_)sR(JL^shN!4Vmj|N$Jc3ǕU#:aHթ'jV8Á |_gٲesϭhLk;^$Oн U&٧W@4jZ߅uT m#NֱzvMSu^>8F^Du4\n{.Oa?~:Z]6ӾG}rqr\Edsz9rǽΎ +ֆaLl2 76;|~`r28(ЇvWQ*EP$ |l**A:Ǖ^Nq׭lk}+xj467_!>S7SmU66tSp\\/0LW&`n>m_(4W]I0{ :N|ߛrqm\es96#^)"Л3FH$!!X$8`9`x`lr&D4` @HH(K4ypQΝ;BL{tZjo.ޡdU eT恠JT2 0t6Hґ4Dv L130<$PAQ@ "efZ]ҹOyt H:CA#8h WWy42 @H.!m#I"H!43#%F , z!0BZuB#aŅnbaCey,43&513KeEFƳhTm9"IBHNJ}#$QQ {ODu@Qas.^Hh4R{eT݃+X "YA!s팞6*o9#3 ARU05TSb4\pY< 9L]d=$[Tt[މTͬjW yAۼcxR?fӊZ]E@HPPB:?"v~,A@< 0h1LӲt&NqD&E+%HQ.DD/4;7nUKCDҳX[oO (D/ڠm3 5-扥jA`F *-Dt4D11YNRCԉ)y0J(Μ . i th4c5<;"Di$aVjeN=7R#Ml~]"8X "" b֗^eP錂 9QD0Մ'|7`JH6Q!8 j /n4LلHT-$B=f*EDЂ5{KSeJ2i6Uޝ0z QHu_tu/Цjoa"5Y*%" _Vgumש L*""lfT=P+ UMݵ vjA+8Dݥ% 6T4T'Ԃf&Pvx nFaTVAB@J) HaBÝ&BLDҔi@,Fj:{틃ݻwۻ~=+dY?LUo<Dc ^\8ݲ޸ßЦjZsAfR00`HxOxIWHXdMݬ.LI-jlo&- ucc,_K 5-)$8wN|b=;d!fǝa<j]]#¤ dsW,F[]}-_f=ۺ2ZPܬeʥQow# 5sssk5̜1R3I3UP0p7o;#'Y9̜o|k7wZ9*b$c|ԇA8֯25=[B2X8/ro[ND-wpB)1FqN]nep"a4yhsJB4}, &' FM̔Ӄ  Q"MNg} hm'O}3yM7?⑏>xr-hm:avö{S72Z;;\.:0uIgsܻAj6Y U466YVU{_UDlj"&Tm"jձEе.4ۢ^ƼiHZrJiH+(gr?b1#DDR,C=1 ~%\\a_m3a1V0J꽔hԲQ&IHr EhՓ*qe9g4w7]'?P߽62;xhy :=qM7LOMeغumמ}o}=/_`N?}yxKro䂿}ՇϽ- qоNYsHAEnmǟ_}{v=0ݼ?|~=-ogw6]7~ O? w;Ϲo'?m6,Ȭs!4K?_-u/>/-:Te(ӃF=@'Me^wfN3L_ҕ[M>w쐵໒eh^=?>zq0F,.'}<=1~wlTr?_5y'}qyO] _?:25S>u5箾O^?_{W>0O~[7Z~ԅO) =M#΀~;=X2t Ƿc JޣꑅvQ^oSOq(Hēzσ?ۻ?6Є G$>5;vMg΢[ԒJϱв6x\]}r`B *Ư&F[a,gH x$V! T꓏Ezu~sҙ[nT Dn*4F*رo$D1*CBgD>;7=&sPY"woT=+ f/]k.~{./.nX6Bq^r[wt`xG>m=01"~F]dgڒ7ܸkzW]y[oOܗ 9 /ȼƑ&st#~>'?d(=qb B|rr&!Jx BD߃ti2?*l`¢{UWp\XnE1āQQ,>Aw߹{׻ϯxp=a@JԼ~+ ;XXc6lp,l1.Vf7iCI+rL$ۼa1*nmu|t3ln J*)ٔx!+Bu~c@蔚M࢏G,,zwe J{=dewG;O0f5~;͛v=35AyPfj { )'^M &em[;7-%6RTS`U>Nr1Y͊"j7L,*)!bEnEu7F78.e7: Х 6Y]WoTUtvmG/VzѥR h8_UXRTpCa ]$Oĸ\lzAeQϼhtGlЗB.=A4)sIe }({N~ʍ[N"P'`˦^\,2{Q,;u6(\v-оXLϽK>OK{ޗ&D8a?h2G^ $,NL?u֯g]2M.,LMYnuƭ @7 7p}kްys)&İaadoz^_\'4WJ&Q CNifG'M&m^& ҍt,<ɺܶJ(Vu[\Z7J'4YסFP)vu\o|M'KĺǷۓ]ipeQ8-Ob"# ё.exM(fJRS b(\,SCm'NC: t# >)iEht# "E `!@4ؤ-[12 J;sQKGbtr4%ZyzA){* 5ǽ? ㏢^NGBpiϱp L1%} La) ^hp*Ai bq8,r]oՉw4BG ^M JMJ!\D R(LbaJT8g#7v;Y>d`TjWd<:CǷQf E$ETIcr #eyؿk(˳]73k 0z ڗA&3/ed(DpT@nmODpVR֤e2'g̋BYM$b [7?~[~ڦ>H*wt(o,~LkfХ  ʑb3)MJQI8gDN >\&q wԮrGqiiTiw2TJNSm+hE9,}^)o*ç@UB!jUT[k IDAT+i pw/kaLFjzh' DNZc+Eq. ,r,U FA){S1'S-JȬgUjv$2GXxfAF_62ѵרQ{Hj-1ϮlM Gk752 +'gl֐4KCH0J׈( @f UMB!}ѩ)*9u=0, !8u1}{1D@F3uPIMUhd&qCP*c+Ь\0{|owR9ʹ(Հ&킾]DrIwwpjPmJyDuMekmOkPkӫ7aV#lR(/TVqֺ'>]2SƱ0VgGصxñܷ{G>ɓmb?K>™gyI{|;[BԬ#%1ՠ*OB]t.c&-Fԙ  1h_ZZJ[TQ{[v ml}KD|$ Pbjvm'?sSiQQQuNEDE!uYMf1F1־UU'$N3VFhf1ZѐUɈq h-RQ$Y$6"Φng|+_ysR,Ь'+wx7:k,v| ^ @RP]ηva&=>4frH%Y9jp%QK-VbЈpLM IҬ*46iܯ*MQvCqp qtfC17 3̆K|"" AEd$qH4 Jeћ+`beY:48(PfR*V(bw D`¶oѲZD;Alb"ZT:Zt)MedM'i5{ƨ PALP" bj3aQ􁡏.MK"#*gFX8,/+ ^ Fr sqĩ~\ -S`pDl+,FR\!"3LVƇ,WP,e`^ Aȣ+9sQ6MR[TpTИ1TBt3"̏0`w `oW`UZh# Txި mBM4IåTIvB!ݏMCa]U UV`hkJ&4YhJ7)ˋG&fMj=T\9,S-7>NH9(NOO/..VӦ^#"GZRĠB07=w x#ׯ+s`NUTcX u_m rC>rR9ZѠΚ:NJ+! fk0ԙ(VfjڧkBQJj!$V 2"g_Օ^T jQShI$wN5őR^:PzGGy/ iY*,[VfbyYtѿ}g:3$S1$P3LxwuW~+eS/=qe`ZŚ>TJ2Ͼ|}gr[_12wpJ@ Li6S6 SNs;,\fXhYy~`Hγ*TI{ !QPnټu˖-k֝;2tg>OgKRi1Z4fvm%=xp8,2}&Ƙ'ޟɽ(B1PUQ =LA GSL 2u^IzZF*Mh ]UN hj'/YI/ASSӳVҚّ#G}_>яz#Ƿ;Xߎow` PA'p U:mDă*TxQU<$sUI;NWz\MfNDisW0t\%fxB\w%~!ҦWtM!S*ZVZBuHhG]kB+z=N 27ss~~W_-ޅ/y֯Wf&<-^}֯~/}}.8q{:%/z+o|iL O\6e 7^o}Ȧ_n;[3x~nmG>׼uY_7޸k/xy=b,Tա ^{k.hۿ(s*r`t4q$^O_G^}g</x<9~jg|K^b&NY )0}9~$S*JN`x^ )DZ'ݏm &6K)JJ>%.(]'6jVX3k^yB',{='Ygt`~x{syG=f~a>ʨyoqz?^җٹ3g~/>g8O{8k']rɥ/xsןu]o18??yӞvpߡmo>G7?7-2_^PE!PeQ\p<̍7[@leY4n{SS|;UMKΩBԉ&TTJRj(:IJ݇BSp/{'w mPA/DUU'E޻ק$U{*JvL pҝ?kTC p.]_G?tzCnٲ._?yˍʳ+wz7,@K&mo{+>y<1;}/ -XZG- {oy/=_8o{ﻞv&'_?[>o{?-.zCdq_/y^=O?0,ozӡC^W8Sw?(#7k(C8-K?1]/?𼥅luAa\,Fa1ZX^ B {o54M7i+_squY1.n-yU߻f9MxN}?΍Ges^{UW]w#Glݺ=yϓcAXǷ۱JBX 2 TC5(81&`P R%JB@UҌP*\##` )6@R"SrFY WR4i̜*MB++jJTS:SAY#E] ;LEbj+}u1%Һnŋ5xqnzry鴻_X\e1*/G?{셟XZ;MۻizŁ|v `yh6ZȼA6*d߿a::< έ+ ,`Ruk6X\(-.̮YG53޻y4^.};33g>sy%Q[O}xs=[og?+.?smYO|/|Q>p\Ɇ⺳8NˆK.;Uo{t-z|3gׯ͹TY::9c~{|pw7z؃?ٯug'zRsW\񒗼dnn}^xh4.C9r-wsW}&v|ݢO侗IHiNeY8uPrBD GCgjA Sj6b8tS'0(m1F}K'> g}VQ aTr?%a8׾K_ߟt=| ,@{2M3{R.9Zast:|o4g1et 32(͉K41š1 N%ͧdi\4KWU!8uN(^;/?[Q- bt‚%EASKa?ˍ"% &{ Q W 轙Q:Hp4s1p" ­oǷ4̯1juhorR˓W1H>Xi>=JTJU RԳN0Z_Ҟ \:?V:RMk%`Qh Ug"V ;E: unhDZHJSSlcJRO";$@3u*A,(,%)f>b: %Ōy>ib P&͘`:Zԏ,Lh繙yc̲,!io4R({ Jr":JHRΖ78K!JMh7Q2"J\ĴA!<;Jo1&}<Y'Ц)$Dk p̢td-ٝ1^ȬXY;B%M@FOS);j[`O)tKe1L5ChNQektFiS[ޥB*&@Ru_q@{g !Lť!z1 ( rKL|҉FUƙTՌ@˜fAF3 eT|)I/ƣ:C QUf!(Fs%w^⤍b%%M5 F=Z)g魘h J &"Ki bUq8:F)6.ّ󍜃(Dv;7*HtK >ǷbRt8u,#rC)U]``+MDuqDMB\|r(jUj "RuV7D{k`JVly 8CY[}݊݊8<ѦۡU>@q[eDŁޛqsNd[Ugp˛'̌{ZH|Ue]c_%Ʒ1XMŠRC(0#%udssY.ZS *ij\\މB2(&ZSz%d3Gq]DBιBZ}j"Z]_[ܟY{5PAqe!Ul!̙8@gɼ$99h"|Hm "d?laJ!L5 }&At J s$cIhf&sٰfS EXBiQ:9Q@1oMoO@C/>5վ!A׊x.l ݠZ:u\OƴcALzNf'Zzlɦ IDAT*RQa' ܅8)4YƵ.fm@e**2E^` L0aL2MH8%EdLk, $Q5R10yd'8trw&E.af =6Z[FVEOs.V  Π9j„Tjan`N0J.aNIjbPײ>>GoMpW.y6Tm@¢F/,~H1hI: () bH ,fg)1PU}@w1 KPFVΤSIM4yBmv}Ӆ.D? ~::U9|&ӾCqLR}#bmry*JQP3;:Oj 6ZH˥ZBQhfScK&JB0)'EAD UNTen&ISpdn=fpxa[eL%6Qgd/#pi=rjQf"2}Rb@!Q٫ZVc\8B}Ql944R|b fMd/& M? ]s pCCLxW\Qd,Q@*U[|έcr1i>; Nmiu,Obdjc*!4j(1:tu© ocgWT21! WHgJUT(mvC&)8h&tXX,:fL^֌)뒥h&IdჄŒa*3MgR%,?@jn 4LE4 ,":Y&'>BtѫCpj|2T>_]@LYΠɳJ`ʘRm\jDZ~ d tBC4ZA0! zA4jtSjl t +IHΜ @ul*;d ̥LҨP53'53pS1D_wrY83vfu!LKMU1`xw)$;D4ZT5JLX9IY@ T}B%R 5сʬ!К`5[/)%o%=@ /eeA@I)ka[h-ТzW+^`֬l=h4ZyۍkG2DjX q~AGhLi~<ZHf~QeiB9X!3\rCsEƤ1`22fŃL0ZH$$S$ ``fI$jS4); 6׺&O*@b~^z|.6efmF 1%Q,˛@iHVqFDZbL DEPU-FhF-R5"T-j1ZLVMo$TAӐFF5”T",I X 4FFLI%ЀJ4 @A E"@zcZ%1Ej QBLdrFkDdVKelf?fQ,Fs5鞂fB"3on{QPբ3sS uUtd+⳰zOX x'⫞3׮mn:g-fSRzK|oQ#5 \L'T" 3EZY"Z坚f<(cډyTP n?*! #J=DKՐ$v7NY()3^SO ,ګzD IU!Icp[o~֭QǼ/x׷(QgF̒A3/9)/|ίdztQ=瓬 [qoanjDQ#LÅ/|{pm˯kJzKNԗ-:;ƭ3bW<6LǢiҲեm dt4U&O)qO0n&,c1-4ɐi 1u k~FK*NȵwKW&&BB%4$)P $UU0Bٶ!̐ _4Wʪ軉ٰnŃ'|W[tꦣFx&4ޤQCÔ߲QęLY 6郍bP, 1R#W9/ÚغfF Eh% W9,$YLgaw5-TF WS[*-j`ua4{O⧿Y=|%''?f{E]{{#_p1/rꚫ7/|b+DO{,T_ߑ)@Ѿ+Ea-4S^>+8u7M%t\4Ջ5RC -RӸf?@IϞEbd-G:'ɡ g4FclI3XϜfu$LJm9DE=@tTL-FfZ3I)LUH 7x*51*p5+N/7|%'=I; CTxQ{z>nq 8Skă~rNx}Tdi:yٶyo~|oX~o~^+Ch}Řg7ǿs3v;F[{?8Їy(R9v10yryp5߱K~ ywcb;3e hib 9y/|qv%fu{e75pǡcͽ ~8\w緞j1@X5;rngl=1unnQz |N{1lcJi@4֛>.{{ʖ3Srt]xu4m^ KtYv.&¬QRv,3]$RbmVXOOX3 4R@44%zL-wOYPKy'"i:'4H&Dq؏M7WJ- S'gu1/~zac8⦦Lu=pz˩֍X:zGo1D'3'Y{1/xŇ[lia|یOZI5zYo|◷~;龟j`}*?7\ {N|g2ۦ|O|OG 3%tJίRr3ċH8߭S2 .o4/~/sXtϾ7{?bWQPmѿ~L.79GSӃzEnzՔlDBndR߿ŗg?合}TA370f/|)D2 G17-A^d )bhoЫdG.=#K|~ ohVJt<47́iMI|7:M)ל$dų)l8 ,{,LOLeQ袲Z9V߄ip2kR@IJF}T΄W-*6mu7[ &Jh*N*?MMlf'$*xHYQ}Ђ69!!`m";Zz(Z43h|FHY&6DxgڗڹI-b4)d3<! Vt4 "Ӄ8d~xhsFm[10Ҍǿ,ˎi/A+۱7});j9r8VL:9aml$l1rmmMY;Lrm6xLJ*e}Imf{%:&P$%ٱNuLSٞd:uT'U`Љ8/v.WJ[%qlN4/6퀂cO[s 80kfRV.Ɖ3QfZ~K㋪Zע2ރJ\eY[&jтZMP058s^襧Ntc(t?eW\}}NpQk2eJa\ ^H6(wϽ_sT@D(Xz'-o=R\?ɀ.FOՅ;'.⤌5w}5 3u}a Ll(Bͱl!Ș5T00 S4 H+G=dŹN%TvpidQ9 BݵG1"}(X? 7~:5yekfɁ?OnGe~/=n>3?oeG'7ouow}+_ܧϘμ#9qrђշtp_mu`ןt=IOsϽs~zO&{=pwu?y^tu -($yd Ԡd$m+fQvB1Xq_JڲMSM LBBwy. mU>fReK7.L| u,S +hI\XNјA\n'7KҥeN5V-ONӞ {Sӎx٧࢟Qx?~_S?կ|avf=/ѫ)\yE+wX~q^7We/9 o8~՗퓞t%kc3M?ޙ7c~;_w_}Csl܄aox+;W2``^=ՅՍ:md(í܈%ǫC 4یR/il̛vbAөcT}GiC2٘a]R@ {ŒLd $jb];VgZa=e6 NJm:_?Őӽ^?TH$l~EBl|7 sh{c=\IŘ-`@=~sq!DivDž=qus-:HO%Dž{Ab:JBɇyݠ)euqu΍'SҚSBi'7z`,d{+o d%u7)WQ̤czJ)UccNa^)@F/}R[lS IDAT. @իC]z:YU?[/w=9#%{N;أ?3_7M h"?ɏ},;}|3}6ʻ^}«_sU}fo/E'ڷQoz~cOv/qَ=|o;~߼;tON%@q کyX,2mBm4(%E|)(LU7󑷾l G(,7|-'{ɺ[iڵ`.4Y>F{ qvh(Om4Ʊ'F@oV9@@K DX֭ٛ֎vV("o\0[XSg=q(:߾SݧFȌf9aL24e:%9I ~. ;596VZO ѫq$90bs_zXmtN+Đ.Eݥo=*f# q:1k"<834RL50)*Ch0)T=g ""Y4(Ga:Q}כ\:Xuŷ?)Y]Tst&, Hwoaa.v.tUz@vheH@%VPrPGj{t.t9<ȼdyU,pϼ̵1݄ouheIFtL3# $,ҜV֥dl!5;,(A32z"oP*`&%R@V̓0gA! x̍P.'wL b^5J$FWFG~Y ۟VE)R ) NE $DkU>8'*GƊXjI`V܄: J@@v7ZkqI:ϓsB\ xd.za0,՞2ӫ.Ω`ıglSI )3:j87 iͤ ѹ^41 Ct@D8ou"CTWT'9W엺oeSԕͱKc6lO4\աn5Ds,ިZy { 9 4u#*%Yy!r'F+{*F#D")=K6tC2.mKRfX1F܈n;7ScTիWoʺka[}Q V{9A4ur\?봒%ǘR mbfH}_2L2Z2̭'͍لPk2u %k@1q_bϯ* M72bE#k/.qzw]cU} i0}H3m&=d8sFżH7*(Ph?NGHR "fm,lw[(3xĉVIk Vf=jk'Xe+Zr1v$,j}U*6cqbcQhk`tz=FIH'Dj Yɤa'Cj)F6͛栘 CZDM#"^^ha!ZU5ISl/4AX5*z10ҧBOk6n6&ff.r o҂AbJwu⪧1$4), -FdW@"W2GUFO$MF=27 z>~f҄NX՟etUHD3ӨL8A-Ӎ_m2IH˓2_5t|=To{IGا߯@>9RU=5k̳1zLM8UFU2mK[ß0يmƧvF?}VVr]f Tisc~lՍ/mc'756vZ|l44D*K'YN MӈH4C$~arwu+z[3jjюۯ~{^#cO~W_^NfVzN6?Ç뇷<|!G8z?{ _Ϝ~s~V}SF&\h\lcLnCwauaډmΤj|,JcQ֯m4baCZ٨FB7f_z-ΛFF}K.qu]ˮ-TV~cI^hԢ bUv[W=}Z^>9&Wت~_N69пyG?>Ӿt=xO<ݧ'?wӟpŲ{?G?A| u҈=qO^z5m_]w%E:g Ѳw3s*s,zVӺ yVE;K掯Y`І[1imangauS'E B/yEx2͚Q66q^m<2n®¸W"m!ɘۧNL ~~Ϗ?518G?wkq(|Fu\]v;cE"N;}王;}򵞅+[1aư83?''^333lUU+ٵ:L.z8{n-3q1yhA߀}*4t@8MQh P&ۤilI4 a|(V {ϑ"bű- (U u Κ@1LV3R=$9q'_xV:m|Icbj0DUw6g<μ6K- j&֨`B;0 1VU7:91 / !xЁg|kwJ q8eM4Z:S^;3= =;~+vc[}~ ~av&jcWB>\5Xկ}jE5⩳(d`#ACib;Z>u~rϖ-=@\y.HCyzxӑ$ـ/{{oG <&0݉8!!Ld3>g{OZ(rUUmԈ18m#O}SH!ß/«~Ӟ4P6Q@/I9gw6W0#jB|V/~JZ랗5n]v Q z/xm4zm"zjN!B'Bˮk;o߿_s㿼ū w3}.;i嚷t{ٯ] ~Ȋ_OЫqGOOy>LM#[4Hm=r+9_ MyOv%KH!N)i@DSq3>_}/mB1F `RPSB B`Sͨ&&zKEJ8z*4B]yF[ls+gAY14 ibҢ90  >u1NxÕ7\=7;[nOǹη'Y>\#uhxWTcv=3';auU !tK|Ϻ^xs=/z1>_Xd(ޫB߾~~W~1X%= \=ly9O|W^uLB#6UvEIE*@u lؠ'A7൮*"4xF8Pk@IđZLUQ+8`ς:{S. :434 ZƧ73_bϜǽ97]Hp"@@d՟}h3oquh0FwSlXYGkHD "ǻzmȶZ1ƻeBrj;ѺiD*3S5vr'\95sUw+Wcoi^K a"DT9']Az~0髪z&{SцAo0QUs6z**3TՃ78ߟ$%zˮFDo0o|sjr?WUJZ@9o}G~pe1wzǏяx;Nz7蕿|]?y^cyM1e>8Iau1za~Q3wҿᰮ^o"$z?5ι[,O/LN`rWU߿M- !u4MQc?Xz(T Ǟ ЁR>֗]bC7ߴӎ;$^Iowʵn;]|ٕ{s̪_\z/{كwXr?RG7 O/:[xh}NFF.q= Q^(B3E dukf:t gź|R{(ha?,[._Q_:m;N#llt4}_g}v#|Yhe]EH~zW"\x{ァco\|Fyz{<3VJַ~1U81G#G&z9O/~.߽q}sS{㧝~^q׿|oE#8 qr-M*K߭Y ^9޳i?{M7LaËN88_, %DO;ϚV[UEgN0CE љXy Hh+A.  JM:ec&*q5ejsTH~iZG5R~T+r-^{cKmSU<6hv]piv1GMK.I\sMUUPfcc$a(d01ilGIjJdVux]|S~ή[=4)˯,nC-\zA+N{d׊guV6}mhtS{wsaOzo{59G\s啻A7:20Q9u^qg1DW9%!> )8 kPMԴjPh0T418j F:׎ܒ^P]c4YT:DT4#X*^aP{0nE` P:qS7f]($/4x ^Qw.D=Xj 07"몑Yy!AzQFuE1sJAՄA^DFaYp$T##}#1@XRIhbhYAڨi{@*|9M&i AJ}~ϥK"&a̒ҨUij$VwTw1yLenPal;'4ԩ6݉)mmM_~;'/`vjbXbDT|?K_=Wspv$b˗.jvAJι]-Sn᠃'գnJ]wUUs1FuSA' `CM_qVF.8%0M4SiA%$ bڸ^렋TboBJtd*,5OhW &8jL3ؗJdd1T 01TI]JYѢ끀VkW٬ axQRB^5ZQzBF }3 ' c潃(kjq2oNUL5`|0}A4@Yd 0kы7 #梩Q@ H,֎x(Y摥Ψ :WEoj&ri= xEYYLRqwk==%Q@PaY M û+i9֦"o;(S"CTr@,8T5fT`1k0ɝs7kI?,*Ƅ9R-9u9ͬKL;CY,{}f^կSoR^}aW"!Hn1FtT"C%G7+ E UE 4Go}`"G -BB`@ǣ{ુT:SR!A޶~2ACjbBܾny, A0"sEEOBfuZm [W}ȡp=6kWttImIWZF]4#јi%M2N[abq+M4:""sAnFVV!jDJp.}ŭ3cQ’%żEnCF;rd7r{T ̻65К~bΌ39Gp8u٦뺮G֮_f陙nBlFô>^~}]aݾh4Fu]ggggggΎFifffFe+/2LpZfO|~M4LCOfwKQdoTuDEDAu9y]s]WEŌbVk&UJ7Lw9=s\Usᙙ3=S]u懰03ƒh(^K/>Ǯ! %lD"lE@)=}ӳ co_bSDb 0der QVC92[&1PMWo 6?νa_33`mVG{ϧGC(!+iӿ~Wox{U{b;Cڛ{7\wAGΩm]菣 {.u|}eVZ U6uңb(’o:}SC\SN0<`ݏaGQe#ǟy^쎺mϝnpWߨ-}'}O=N9圃[E;w㏤ҥ#^z{ύ?~YPO_UyO?b̕W]vS-/3D^MCi@EE ze[ID2zD_c!/@qdV.\+#>7m`ͷo7.(VͭP iYVr?tHJJЩGq^g[+o}~Um=uuBjq˧E@ƾymҳGyFl8saIj: Ç=o uOvyM6K=#im(ꌓ;|5MrruOy J}kuTՖi8?sg0xhHUm傪,;5$0L]UUp[wy߽wx!Y=۶ތ~]r0ks ~=.;\u=hq֬OejNs? l󇧟oy*2jv.ש}pgJ)VeO'O8q%_]Y;wN'U_k*k5嫯۪KI˖[.5U T,0aِwhkY7|ȱ+;:HrVK,PEb #-1tC^~ PbqJ&&cP"a*Q-P.PDRVki"U =`a% Pl쳡I;'g2FhLMDDjWϻ þ9W h鼘D}ihI\Ė#0TRrRFgR0U5 %q-5N˸S!*D^|@8P-β-,>c5 p'dIҠ*5Ȳ}YbԪ0q ,)l4H+jN"Z(1_4s*Ӽ|c}hU;cߠ5^O^!R".sjJؕ :)a>yf.B JGJsj J,Vb"ʾR"Lʩ )QGRN ԅN=!pQCߔ{$[k SvڶWo3N\`4gcoq)8u)2, 9!G- :q>́D@dˑD "a 9&ǎM;a8pbK%Zp1&#R PsQ(0}YQXB<X@SJEA BDd LnU$Yr;߀{f#""ڴ@īvyc!xSxI; kIyq$<8Y< JGC 1&FB]dA,^o:\d0_aHe%V %e `lH &KNrDa\YH8qȀ ӤRB"̎ 1rj=ȥJ RRecVjo$1)e8S'9# À$H\;Bf "K7dHaSb@CO6DM~o MDdDaM*P5J ؈IAObQABhK]")fO,ڔZ2`, Q(L8c@8e0 l1|\JԨЉQqF5Vti7<+ǝt"W_z-|7(9%AC0 6 pX92)Q6L( NS)BBp 5&e0p.]  ,1Z*P3e8 SJ䳷yO݂ygN7Ğư  bfr!XɄa0 6xԛ3r~ژ_2S| 3c?1˵c6>;2F`~mڃ(qʦR؏2lɒ!xU5RH! aÖ b bQ -&x) Zx@@կwG뛺| <]tUĆ׶]ٓo|=3nx9>>ȿGcץC;\9/6>h`iO?wyyac4P*+wmKJzޛ|Ņ'[upAϗ>=gޝ[]/- kox}٣ !/lڡ5`S?p_.)jfϙ\ps\7E1dVP_SYYO?ƕ-U&=>\aÜ@ޓM)#mFE&3=ۦKL,N9JxYo={ѱ}N;S^妹\¿_mA ME :{}ϣy^c93`Ez:fa?ۢMŕs13mYgw }%p!#@f 8?~lݢbG۟3 ng/MSȏwXnGߞ~w0g~v+wΉmѢr/>Hr^r=u8{v9'q1o|e=>yֹnLIc6H#%,q[pm".]:o6zsZUnYO%DXg̞F3LRmuRH9]gs9uRehXbCwO9Qh8 [nq9r19]n( r¨7?ꇐ&Aq8דw:4û @ ~(bO>8d:笃ڻzŬuӫ/h6>:`SB-԰WTCpm& + }i[>߰{);H-H[(KQM)Ay*3Rt6=iӿ]m7rƅ7 z_Sý4%Wwy x=. O;{k'avmS/m.HrRg ۰m&TY39Gb۵MmuJnK5@%0 "_UU.omH5weϺhf[t+c(EV9͗Uxu{3D䉂Z'e[hl+EƆޫ1RYc. ]Y Q=[5b+9SPZ+ HL.v6W10+>&yE?T΃LkD~vaMK.T}qG^sXy CFа+uM6MLW8q^{Iȧo"j1=QmMرc qFIiEN:.̶6㘤 译&PLڴqC 2*ꍵem\*]rͭN4$I%3.-0 U;oÞ-drĂ a<>3r%P.ZjI1ATJUS A:_cHUCc;@EƜ[dBY*`zS kjU%&)T&ՐI5ؠlUӯ$$S$9"nH,/6ڴADzUH(++;sLn+%n:'6TΏ}wK+iߪmIGQG)E,qa7hqjEWoJI3BrL}X+ u?` Q"AM%gKZ x ͧl1yk"dܼKVYUIP(lgq(T_ .….G#lb{LT@r*Lg/`5I_6jhPEGݱce9*)Kꄭs!1Ybej-sEĖcEOjd*i[c)!)AQ'7G>wj!fR ZT.`ճo;lO{(cipЈjQ 8EW cqj$mT)RӋ}r]aI((Lףfb;F3\~%n&"+o߻+[IĨXOC%4iZmC6L͆BiѲ$.Jl""!D; 5AYl553G,iHI5 )V3hH{V^RIT}hQ6-tDV?ðgJe-oԭC f*Q^/Q19@UJDK5]wfq2iz'ℜWyeCܬȽPoy}3R/glc5aǿK6Wcڭ۽:Sd]!kc0SQRJH[k"0A3m5҄WRG^o|)&[{a1: cjR(X&gkj jHVC [vw{bT~^bOf= Vw$xM9S:J54bφ$;r>9qe:¹s1J+.GX?@޵m۶m 3쉸^|_y"Upauo* Fںj2'Owޱ1}P'P0%"8BQ&U$\01 o}nłƴꍿT`%%,Iuޭٖ\!oX{4_E]m%n/d 6-r Yg#C#2 Z $)R)WEPQgGOСMK@B8ֹؒ5dIҀ4$[" Ӛ&%"YRyYز3$ /E5"2*a D B*B/LDHăbkŐ% D!K2u1@Iٳh (WK B,dLach* iJ "6Sc<<%lx1z/K(e&6{k FYmJ&0 !_5^ )ebI,E`}JX 2@`H0G`4t*EΠpG dSNay"uA]*$1Uq&؇^HB{ eS5,=KRfk`@Or%pӫ#^ L@Xb"Kΰl<>x~ѡ7ZWa.#ꍁ͢^Ek2\.0ٕW uݔk+朊s g+\Ɛa3Ğg̩t(Ʉ&TV {cE(E(sয়d [kǵbd3Y%U\}NEb-w)_qJy $萿H`ύØ20Y<* "C1j$`*X9`<q P(B#]…TԁzUbɾ'IyJ[n6#_~.xy_n =ao/0m%Kop瓿Uf'vop0}WOff̚0gGϝQ .֢*n?gggcѬY?1G( IDAT@ՙJ̝kFU[qǟ7sF6=+! &}ԩ?D1f͘:OcKL}c٬@nnK>`̌YGSUU曯io&}5c|%`eE.QZEKt ,KV+lYaT*6<1H\ 6M ʎH-:?i\(mm._- v%ըeec7فP޺Ք/v)^+ŵu1f/Mu&Xܝ\'W\vڮfW|?cwR&OZ0{ƻ1kn=N\wuvN:v"xq뭿1'+2gO;qs&i~;7.ګӦ|5As/Bh"QЊ__lENAJ0ʡ }T\Й= J[9F }떭7+k^*lkYU1L GF@`cwaRr=MpߚIhR*;̙9fG|m].3ge86(d3uUW^vӲS|mҩ n=70E-wԾ%QOs6jvqS ԉee̼nEhewn0G xt7wZVXwv=/oh&:U1~]vz]lγLNovǝ7;ٽkN<>rK<9s&[~yM7ҽ[שSYRVĚ,&Uă82 qQ<]77ѭ|3Ouj@1eC&_tQ&z^1Sd0ݪ[6jB^<*%7zx)fkt([[ڵk\{n?@݃Cg6h^ׂ,"-}ɐ79rNˮwC̳v۵v~kCۭӻmw8pO8붾Mw֚uj%q|ѕ;oC8  xM7x|;q]϶(}flw#|cgeuڵw!ޭMI#sݮx}Ͼӯ }Ͼ_qq;D]tp&*'Ԙ;sS;ztqnjry?{m2fiDu3u¯:g}ȝm>'N9C}"mZk3z %xUND'@tcg\U5^$ 4FĔJ*Kg>c;8gGzqNs* ] @=N8pc ycv 'jVtw-خ;gNM_$w K/_{D(p{SV?:ٽ[)-mű 7G <6t~Eu}EQ!b$|#dHKчM.%gtƏ߫WjYKYO h b_0wE7d'EFaQȧ:~9j=N`m<&ozm>N%!Q%_4ӽ鵙tN&t ̖N%8af116DeU\57 %pJ֙L6CYs03#aHL>F7@x؁V+ >b3`X bL i^)A:E0(LJ]U7S-ޯV޽zx={TUOObq(XokݲE}'Ven {Ϊf2yH/s6LNw<}yڗ7ù?K}u e%V6Q V1 XアVDjsl?wSAbi&j=JfJ/؋RS?%&g_ojIJZEAE$N/ǯoU W3&LV[o  ?3T! ܶn$̔evS* {'eksVK[iA]ncC֙`Jp0R jqefaVnVk7`䨱_`(.+R]L%bnG<+l$8/K ?~o6ZfIN~`HRhS\o2(kfR˖-vݘTw"")`Aʪ)PN*u%Xb  ]I^b2FG14Xc'jB6$ϱ`QIAZYP6Q1Ok/L%%%L ~}z˖-;tMR"jٲ%-ZuÏ8ͷFxUSKX.dCYρGp Zf$XIR x,jD"210JNJ[6&$& 'h i<:^OE9DfΜov7*?}.ʕS(VcL 8ofZ hdBHdeZ6P'uq2:-/k IX[( cQ=D Kt"A$ jTER C7%LFK&[jj.*ES c w8| lL**ְ'߬ e6L2L߾}kjja㢸nHM 5zd\VDfۮ?c֌x%MU]Xڲ5oi[غ]ך_??S^:vXI qD9OC/8N@X(e21ͰͫXJ xxru 6_yq>b x͑#ZcD4VP8"˧|pBi 26?4^y{a9z|3;1bUAsx駇2*{#F1Gcf|>ߜIO?1L#^װg2W^9 <)X Yd)5j- \{ ]~C7ANc}ǩxݍeΰӪM\"fL1$d| Mi>]^1S_LnJ=YGA$s`?H,2 %baT 煒BҮNj,@4?Μ~=wmvطmozc:w='MWG] (0٩?M*Wm 9ǟzǟz'u?Ajݺ|T<(iʹfo"hbUH8VP` Z_L]nĞpPڲ滒MCsWL%Z[:wj&ˌiJ7mya-уS ,<I!d̈iXj9;hXZ'nvy]2r-[EW^զuK.[{iǞ7;af|Of^dڌl@]] $=kV&*MG@gZ6S(7]%f>pRM1`A`gYҀXB$[hAUWh Qm5"Q 9L"r^rĵi;n쳕>\6ca?{fG,F4PX]b`5dd+\L4!2:;}w?X{u&o߾UW,;cmסgjNR{W_;f h'|tIǯպ{a@E}rYTtU\{aUp1%yJa\PgĪ@6P*;lc@9di @Y &'D1H j4lP8j5u$*KRـs5=zl9qزn9m{ӭVЭ6nͶTzlV) d㍻" Vy49Ǫ`e-[`-کT $eFVjԭ#Ԁ< @a@9 $L ϒժVJ_wРeG 4iOU"xb~[ư6M 16׍R"2D^" @ƈī r*E +lXkD^ o-IuTJK~7-3ildv))/N:j(S RNj )%9(kD,F )"` ?G;(ǟCP% HUdX)i(y)@"p"F ( (e 0S'HDJD^qNW ^A f*`~WVWf_>PFTT"BU *kgN=}9ZbXaHPyN x`8o4@_{ڊ*Zyqo=SYVe,8A8"9o)E>rM̛ RPkU%C6Y#*U*8P A՘`!vHd]_ pZXUU!{]R[I}\=yEI+trj[o1^j0q;`1&V y]^b}Ee ?5DӤ !Tböcu IsD1 8SzDtbE5WZO(TyK_RCË'7ik4V+P/Yi{aوG+{Uj@)8UWpr$=8ב $j!ffg2t)E@$_0D` b#=vbMe1`~O+ HĪ0~` |ErU-+/OjY'ZJH/ h,I'WkS<.&{ST7JĽ7lQ2,W+lXαk@TY8!p;>}הK:L}5trJI~I eb o2_QFWeETDL2vXW**=pcЅRq\ХG",jm*KdBA=3)5nYɆ!WVfR*Ҫ FW&³*xоon!̓X aqvm"'Vgʎ;黽wSDJ $"b^cˆn^j!KM QҦMc.\ضm?l}n'sք=epSvQ)X2ZP)<)D!cy PF [t,# 5D$95r@@~s)WN(;? G܄ݻa4R`P= p8xހo3*2*w2w'z%=^ND¥EU&80h6Km۶KN!͉mQ._.iמw{WW44^e;w_y7x냃l=vWFwm\po3soɭ]vY-[9ZϞݳF}C~>^,ް)2mHv!R!8( D<)H8V -2iRRAdcp%D1%8qx+V5Li$*M]M"T)AI* R}|u0*/wdC5[+c&c c (w_c?A_|ld?ӎ;OtnE 4g\p]y'=OƖ]6k3S'E~AknjΚyf78N:mjUUh0?(&IE`zH+gRČ4 8$cﻣ䨎oUJB#@$L4l,2&|`@ &`D#$1LN&gD Vƙ~gfW!X}t_W]ֽ:ʝu'dL(XG(dfoƤLUtl&HK.Z V8 D13-.{&ª%`W>/=a7& bS6CWg:MW*+|]whl H⊱oܲKo[ j3sI9QdI@9.>"&j԰:_mp(jFM!/bƩ33 dX2LC.Sp 3U֑ #b'"AUt.{뼟ŷ+zzzJ11fg嬠v'E.2b>!WXbsIҤV`vљٗ6}53;7G4jyf$6}G03GV gg"g0[AپIpNSSlRsζ5o  >qJąM J{$ȐfdN(yL}3[F`fb61i`d: o(nf[ou)`Bd bѠWJ^` Քk0a1 !@BYPf^2j"kd ⠪djBĬ29sRAiCXvg7MӖL*iH,熅Z릖$)!2!Cd,R`!QHMyHaL2Y0˗9I%q'j}qEzEB+ ><}G^P[NUELDkA" ΁* BDl`"0&G1D1aKΕf0"1#6c8uTT{LzE(^}9}_5 4-l& MZ>FZ6J8y&DM`DC6N .Ԉ$H8Gww \ߒXV.,R6z8 ŕbe\WGF\ ,ay]͏id 7cNDjߕlj@5 co&FF5+O5zsf1T hNcCS7)TSCxɢPLH7 IDAT+df(*`A bjWVjojBռj%חFYRn*jVÝnuf8z\C5c{W*׷0w_Ys헾Hd(rY D)\l?jԻlxٽ(Ukܙa?] ?6:| S| Ȓ@T)R23RM+A.VUBԐ̨ L)ei! (MYy%#%dF4PfdF fxUVdA}jO̲4 0-EBL}LSS 0Q`jdAf>Kd!$ ^5weZeS #Ȧ4x2X0 `Lf*Y CF{va&RU#! /w-釮x`ZLє(\̿iXe9Y}?er9Λ';Wg.Ny#6[ b)*T\SDgC{g&P f"Y ȼOE1@H\14Ī1Ej0U0;Jd,RcR%/CRVGR B32ȳ(E&ŦĞG0S9j0%95 9h#&*9" `G r45cD!s,bd^$ Rb4(̙(䈃K B֥Y<)|^sr" D5Bd2   P&sJj/&_Gkλ/9)!"8`ɩnzy.D]u@lŌW{UWig>xwlO1_1(@jeT>L?gwsrGyaLbfV "ߞҬa{=3>زCln$@$Q_˾Wn~sUL*BZ;T[nȂ`̑j c>ާ{kk뮻B;S7G+A CTE#ӌ9"q;z9(\ˁ$$fL\|Ũ>ҩ'}qG6M ĸwi;a|:c@8LB$H=ןxj~4Ǒ?nǭw!F:!$ƾ=.<`@5<%B {w#W2t< 52 y, H[['|LUͬ>0i'Æ [r%G&[de>l~Lz1u<$j`Ae\Olq٣$jGvubΤsƨKn9b2if%jD52P,_nQ_{ r<ZFȈ:?N?_~O>zaѿ1/ھώ Zh@gȒ?W^G|Ow.=w KG5ɤܳKZC9 s.?YN{ y_^ycxW_N\pگ8:ȃޘm5loNz? zQJhE;뮼Xgvt#'}&3F]{틏> ?0;޻ӛ.ytdwtbxޙq͵W^~ܿpG8p1|3.Gܣ_uO=+~Mo9gvU~po3b=h]zI}/?|Yg֭|PoddrCakBGNXe֪ W"0 |'N""8q–[o;{ 0}=<$k|#~P/-$& .,KHX:;BP8üf.e&T)ۿШo6L\!:<9J:[Usν8f;;a:}ʤ>r)m3 tW&}6{/2 5>[>k_uwΘ6W {Uŗ Vq 7VΙ4G0aG&Onjw_y;MCA1rISnvcw~y%]^w"Qۃ7_m.Ƽ~O$8~=l3楏 O>pS.ߛ8۹3eσd>:#f}yn2C=~j/+o?/c~N=GϿ˯)/L냎pU;njzT{SN?{'PJL.;+.o[5$]=^[nl(D3eS*u̅8CUa&"_ܽ)J3蕔.3^4J~asBT!` duPc#eKBbD5(-ǥXҋ9^*i?`09f[TmL6s{/3cƔƼp]si~Ï>5yB{]=pr6tO_zͯyS0.-%uq|ǿnn/fLv?;+e{\mY5Kǟkt꺫.3c6q~uǔgt.묺O+H>˯xa&=v6mMW IQפOqR@gSȢJГΘ2W -vɼG>؎÷{;xi2(ۭmڧF_7ǾImIJk}_.zEYyFWL+'g}DyS>묳6GW%BKKKCCcE:d%F^|is532 3cc%*J3˘,#z!1({1Ay(IgϒFFR!fO.H3W?/> &4ѧ~j'*79WWWݖ;dҴW.a |q$YFS%u՗-*:d$Bp^,r1J\A/rWWoTι@z`0$O+hGo3(2#GȀ蚫G.q0DPP򜥥!N1q_vʛ0|LA 2 Y` HWJTȒr\WgvqbԀ`Y8ˈ$K2K:1n) ,MbQsP7/_{7yϼvEg LL('VW/_'dBތU5(Thz۰aÒ$p%I駞x PSņ%\b]grGysüS@Zb*ebRb&JfH r}N|̔By[@2Rvc۞x흩r$Kov;uk-1}o>W`~~1 keAHfN5- o(OkYJBƀ^EH}(DQ=2DՈ(IU#($q^"KI]F'eW,RwI`p5t i0Q1H8e|.O=CL# 1zIՈA梇YRXHFI9o%qT (B'qg5'T>"1A2 . EuCZW1V= %H5Ch}43D/=2q11R4Wd.wttiP5g*]8 L4eWB2z4.3P̠bX0l9f Iwj&s کϋ\ƟK@ 8((Pؔ+*]4Z-FYXfIQbGd"'s"LD#B,`lHQ"QE1sKK˖[;}EBr1+rŽ iΜLc|ڈ)J ©Dxzy#0 ؄4($9b2eWȋ1A+L 5MXbqR6b._q.s3$dF$@>TT*QrD-bXb!Y $F$į!3j7f՟OmC} bR}4+zcM0R>5g2}ge @gᡨQSt|/?,("^nb=<8.{zȫpu=o>s#9>{ǁ@1ԟ>6GT|~so'}g{;$xyg7_ۏz, ĽSsGC8Iy."wF^;N=㬃89bv=C'sA h~m'zGdԵ̤fV뒩R~>wz *_Y(UVMZ2B[ɧ_7-4 dJ?+,RJc:`"P!m9h7Bw 1Zpq1c'yHLaF-.Nrb:;PJuÃ.Š+:,%У/wmjgLda׸J]. cy}FvtAM7h8hȀJV4qC6#]ݝHX_\t],:kqq-S0[Y8|cE~t`A^g>W~orvmS| h p* |`B9)cv> n[mbc-dؠ_zߙz,o~s/j0iՓʬ4'[S4:;Woޓs5k= !$R{ur1*2E@gLKiB\K% o˿éukJ,B0Y.bȼg`g=.7 BVrQ9z\Wc#rТĨ-UMx|xf<QtӍ+ٯѕ3ڗgI(hiQP*$]ލ((8oS̱>ZZ2pvzG^).RG{w!-RT~JSJ7/H.ؾ\&A}F(L)JU#U e8%GQf&:$M9"2Ŧ :?1iH2c0K-7߀ \Q`Ǫ^8UGT03bWAC0s"I@,8 sٺ5/7@퓆^R0!4p1zk5giZK5RLZN&sGAXaDu)cqY1H FkyM0p^~`agbaVV ??O*Z[y[[a%"8rFqj0b+`]lM;o 㠉u]fٱc+ ˔~aw>wjX:nO<^o:͇mUJ}sl󵖉>yﹻw^yM~fO9ob!]{M[dxc/MԽv[:5p>_fҪqʧU`)5f \G͈xTDdڴ~{=B7KZ3m9jog/_FRˠS8ITn)נ3I/\/m^`+AO첋|0|C.cM&Gdhz UA}:3e`}͵kE/l< /Ђgva:fWr26gYP (k b'ªjj`Bd P| '\s=OH~ڻ{ηsToH[x1O^9CWO yj{Eu%%ƺ?95IJ'jƴ:n23bc9Giuwiy,@p %\6&rfq@`羨dQ}0Ym%D(8K/|o;hg5}kǍ؊ (殡.B<|M:O<;k]l J{ӭp Nں6C_ꌀQ8,,}ՂU/8I1[? υKON.1Ȉ"\;'K̿^ԬiotWh+HY^d8۪o~W`}[kM8gT#'5A-O jd(y2-X1Lc0QqXsDEC3Y@]aBoU>f.^QٙcɨQ~ǵlseo5u}dPԯFDjAc@M7k}ķg{WYtQ)ڹ7#KBB-xf|#BT(\ *!`0@p098 3rY Qp#Ĩ0g0O0ê<H!tЊR%͡k1ZUhhe\e SP; w{3egvj>6K{t) *%P Yh#Pe1}d2K=O(c66 g<rlA._͏z}E0* 5#2{\Q]3lPk@* *TeʤJ+K73?Z!!0AԔe~$Wso i0oqM UΙAIr+}Ry%ڬ¼|au%4-!r4)##"%&Vrf0 2U{A3Œl db`y]|@$`Ȍ(!((!'3W2o-@ k֪jIfj½N Jr>^ss7MbVOYI,"TMϔȫhtxA!A͌ ysWl0!ӹçW2QqLՖ}%嚒)95GȄO"5 REڹČ3+)B ds~y@="H`πA02r^4YH9䎈$$2+)z_wӓQ)>L D0oyymnIH__V"6<'j) ~ɛNac"R'S*1Y9U?&L`,!df>[XL(Ud,33X{om)&eFn>Zp "B9Q,3̄CR(DZy7*H5(L)O)G"!x0X@b&bB!S+o8f5L97YA`DPbqus|`Eg2(Ϧ|z3{ 9@L Nĭ. { 9bNGhv ̅Yf sn>a\8%!L,ECYhm~`k[@a,3q݀UqWp=9]XTX s `h%O2@Ii^>ؘEHqNޛQ^2%AnJD y tsI>Yoe8$ek/[J3{or1;s±.ZL-tDdpFQF$,ldDe/=s܋/>dFLuCj^S|\_sk)W?㓶Kn}h7<n_΢iYfLhY39zlCePlxi:Q"pSh~=:?489,8aCN=_hz{_ϽcFo ]ߛe_qQEQ ,*Zs2r*Ycr*8ܟrǝ12|Eekk} O~ÙӞol#>}_xzq7r{2}-2߄lA͍RCdYPebm6]{U?d-:?eߜ C]?Zt#K nm4u v^gZφquH];Y "1ѣGҙ3"fdEC}αp|17D>אoMϿvedɉQkChPصyW(ҠŻ}?_ܖ루i`sҽvYj {,t=;T B OXARkAfݠAKL8"g\'_Ol!dJ`&?5ort̘6u/'^HR~d=^G]z }UB ?'T7s.c~ŗx5W.TJ;ltAO %zgN70묒(7Am֖dLN[?\S80zp6M!)+IP!"!bYda)lA F(:+Jj0pҌV\vCZx1^%Y5,hnlmh-BD f#HZD7,p<Ƕ$2 r$R Z@W4_⦘=,)BCEy睖Ư<&mjjP.޿կ.8rؤvUFw=y;dY솛W:&Y*$"9f#̱2da!@!EW LFd&st#AkAMA$5˘3L FU(a&"36d)Z`02ؑiUpr\|G״4K3?O m9~-ASdᲃBI7Ls4( Ӣ(CҴ'" ݪE˺zYbK~{6 &e:PROP~ ^*klgWp!h"~r5)*J*HLNՈ 1VX{g[ 5Ґ>qe_g-!j6C,9D&+D\QSX h=l Y.[2BdF'89 UaABU&3q0er$E`$0s_%kz[kr,l&}'M-7S4Z׮R$!)f0H G=,"y|!b"{xadA>BH<iQ#<"ʆ,!)6м]^4ZI!1!QEYSA*V PR2& J0N劸DH1){0s!+7'R#]w}U3{A:e! D4 &L0`2h "Y2& AA%tvwf?f/0NnNꮪWI!2X` BvĤkJ  f=!`Lh jQ*<++YOj}rX=*ɖ}bTR ɫ"q` D jg58w=ϞD3rSDaw5Sݐdƣ18f+9"J$ c&o}.!9p RDF|s^ "A"L Sv;yjERQ['BR/#@|KiiZ9Z&PY9G0 4T(FQ@ D@I``!o=XH VRZ IBPĨ; `S2FS@J&PQ RT"嬢ECXk ]oQ2@%:CL BV!i*,Q;{ä4Xbcc d2ۦ_~?x[e†87$( ldFm13N NTn Mܴ !@VJ,:J 5 d[Zڢ *`)1d-wi,v(%!(@(] (=+{ "@,qJ)1%x2{Dp)_)#fHD)%ZRHi`%&U%$+E@Z !i%¾fPIJhjF I(/E\)?2{Dl#{f2dЎ;7WG;wVgXOeS|R@ZSq6aYH*-%6e0J[_77m+}I ^i(Ҫx.AgTA8%/-,)hɕY ug)K< Kʀ -P*S }!"E.)I(D2%`[dC!OH)| /TY 9MR Ui"5jhjԼ$jy$B/Zu-i-$|]Zs[ }*F FJQZ{M\1!>67wY21UMw˗la" ڡyqE`.eL/X2la&:m> l$m1"j_RjPRI!"O6fn+VjAT.ˮAb"0DY5 "C͐H(FiGQ$x ȐR^%3 [PVzQ8AL@ B۞0~1cs1 b *wڑG{;kS\SR̆KCoYe&k+EZR05o[*5- *u1 e6|chiM;Rnz ]y;n{|}^vcęKϟ2lfХ7>/$>3݁`?~( =ز'{qgos6 Kw̔K,W㏼uMM=?^^ 9 E]ࡅo֬>w -OlRukn. ,BL$]㱇Hu/3}-fڧ [9v \^X]gU+bڒ-4s]?NJ @kꢚ˖,hh[g2vVay[ÏFǵ9h6࢓'ά~s]%+.D 5~sr oݤ 'Z޾$[Un{XVW^{Tf 6U?޿knj#JnuKy7˭d~-Vz^۾lZ}U3HHHQ4bSQ u.ZF.F$OZQ>vI~f=0Ф Sf&$MMo{U])ZUEUDJ C0JoԷ~cy?RkrJsQr֥Z?9շC`k1iʧ2kNlYsZS7fϙoӵ9|osyk|@&>ҋo^w߾{!`mΞ1gԚ66^--֭[ov  @pK8m?;Q@_7*?Y[>;P 2  @LLj"I-)ۄ@#bXchȚT)fwSZRI, )4W6DNg8OVԮ9AD-d㍨$Ui뭵)x RoF*T%%KS6T\&c]ֈ5>>ţ!IŒ 5AEf% .okE. @lVE-b"o~۔LHh"d2ƆBf)(X<2PkEL&N$ 9l6| ӹ//V'*G^{wr jN;>rWbV _fd˺_x=a IDATG_&gX^;m(6 r&wI_ks;f)Z6adA}!c8q"Ld=vW^ k>6XKNGu2cxQd@3l!XkЃ>\! 5`ȧ]B /!5FUs& n߯5Ev@YlnQyn6sl,)GM+*vZjXJ1!;wIbكж:Y5=?=k*ʁ4di`IիeˁUZV !Ah2 3sAaÀWd@x"C^b3,`%@ 3 <=TLhP&fMI])\sOk8f"a ~{7XVIS\s AjMS-Q|wSbJ6hށhI0LP%1aŰP/ e`5\Ҋ'6ÂOEYEp*a)I%z@Ʃ2)+Rs"%LaRL,*m*?;*KI\sM$r*$u1|WOE ᩹cP`@Gx?~+Jr%7*sDP)5 (ɤ\ZR j[$StUWCUWp*0HRuVMA JI[;24O~9^EigҀP$SPouXl~Q(A& ",ʤRc=ASTjTҺ&_c(m%n.N)N(Eo``J{aKtԷG-T ܊NM韔^]~WYNkma_sOkI_Y<4 H?f"#Ȓ2)<2R)XKgpں/DaIz~hMi)[*ĀiՖ2II={ED)*-\  i0%||+igj+t|сh'chʰek/6bʑj4[f $iL.*P  UZGNv)f.7SVHA&R (p.%H=RʑǸoWc+2`X hm%ϫ^{N*D\0VDA7/fݑhRձÏnpBBdT= A"mj=aɬuc]IUpVps b[WmU1(Vrom?;=GwwT Amz FL;7=1hn.[m OI< NBJ8"UP-W/t_ 3+j/*/d2K@Y&b?+Dg~wpuﯖ{\}=!}J|Pm=!2~(l|ύ}~{SOT"կT^K'r]iMǺƺƺf,|+A!ލ?g4\7B@)S$FubczlGo:URUeF\/pT֯?c^c]c^MJBLRJPA V4]fb)!t9tԬ>k*tV\hQRrZ*IsRW /Ϸ張ETku[הZxW0B FT[lX(BS&,Ar^~#WDJwW<&J`-ɮJ^TXSbZMkZC8$Ujiī4ݳ ^rJOӯJJAJJBhґMD7%ڧf?^upS#%gӤ@fa<ҴUYՅjF:79 O/j1C#U:/n剚*)լ [lVK/,7_q%Ez MA*D-IQ+ͧnyUK3RWscB3gpI?@e Ȩ0)'*B.[6$ pM7"[EH%4MT)\D Eo(4X2`J-j]Rbr9݃[@km+ {zq D]x$ADDIAbxE#iD>OzF!I< sB^U;UUDUDUŻĻ؁"%D|" VCȑy!$2w*A+j&RjuBB@$K%RU;@ .Ss Q %u$SX)D8*| u:缐*I|yFuP%$'^$!D}TUT) H;@%Q>EUDKWADDI5IbU/U/Ի(޻DUD4Dᝨ@EW/WBp*pJ$/{ID+"EΫzq5iUi'Jx J@ `OFaDO^`a2kY?{?rY[oWL[qV %2 &.gS\dV! 0VЬdxeVoͿFQ eS Ky0TWEB_3bOmP}$!&{1  BdI?C&A2p{$"xg\z X jbJE+^$' :cgLo\ 3Nk_uԀbEqQ$S3 R$@lg^N,X<Ğ|j5*D NEi;oCs5֋Z |6u&3y_\R[py D/ϖfΘn)$EKks-H9s,+b^]\ ΁h9kĀ/&EW 9*6Κ= ɓQhiђZKʚW7a,KkUψ^}w=ȧmΜ%?Oxv}iwŗ\k/#D:tɣxkبK.8ǞSN<*f'N6dp==QlYc]r=q#>z qΚ0is O=뢋sm7=\٣q%\x-k{OŵcS@]spՖqrTocig7'Gh!uSZ֛o% .l6c`e:lu[dC\PD'ǝs3f2k϶fͶ=wFS.;n0hMŜYl~ns,TuzΝW]mT.ɂ|%@W SWﳗ-^{nS0}& l+kߡMUy۪7X&(TUgl۳ί1_5)'<1ۓN-| c Ə?_0m̖m37ۤ{2|M onuu=&tqG^"t҉wI ?zN_>o~N:lVھӞlֵ H||G?3Ń5bܸ={<MiְBŻ|h;ﮨmߩ뮛lXV/?ޠ+rϡeY+˗-;a{:dmX駟x‘_sO~߳nQC?_t٩;g.$n6{ʔ:(e:nӆ=Ԁ{Ry)[mУ~_p73!~yu~[+9ʧ>}PA+4{9q =-oknW^:z/&qd 52gqڝ73?}LeT\k93۶-D?[m۾C{DAq޿\V_V=e?D4vcʪ}fs9csд"Ɖx&  c]:g2 EY2"#Q͔U$?5bw=l}ݵ9协]Q7曮?농z}]w|s݁[mv)]-HpJfu?Q1|gz 'vkSA'^'ɻ_C_GvE}3;knh.4t>}o_)Bi-{im3 |:>eYtr^y3Uo'K.]fLسoO\ pԱ=Guu谖eDLpLyCzڷT^s~>su6xĉ|_{8.6SOlwPg0}Kn~ 6 @ύծ<6Xێ>tMoӆv9 nS*˂{v?FSO8c_zoަ<Rިذ|? v=67}' _ҿFǟpG6.b8rmkD~CMQvmwy?7=ȃwŤX Oy܅?m uG=#|N?&;Z]*˄mڷe!a QVO#39wR3knMU:!ƫIvpEfֹl.qdD;RvX#ɘ~hYNA /8ySDn1[}ɱ6P( fyej~Kh눈U8ș^_#iG^2uݺv?QyUHs9( q{Ðh "A/pc+{% >6y2b1 @el$@⊱͆0Y% 0L&E8;oQ =SO(ٽ#c$%]֩mDQ+r 3l#dL{ xPzF9y2[R2l8ʄqq6 @3GdG2Z=*lʃ0"Me.Df-6ޘ\-kW$^yqIb~sN9lkS0"s /G8Wl)0 ;C2lc0! e ghB2O!UۭuϽwyQ& 0: gISev0+؀Hm& g` Z/RXBs 52b UW*^Lgj>`CA7Lޫ3x%{!Q0H "Dl©rb)pƄD%EAQ\ưyU1N}|h r&13U%4!F QOH`̞^ʆ!fR"Nղętܥ YS&hgxO " a5JaȚ $7ĀzQ&U(<LE}p ;XDZVVE %Ecs(}){U%U-1%D\dbG B#C8̅qf:k &kVmehNh>|)@ A0bl" L3O?ec>X[Wi(ΑB k`(p BÙ x1%6L&&p/T؞XN>-qDdK1 "+0CTt CL 0aj016#Z,H4cc85f-8`0 x5C ^W ^{3QȬd#7yVdmV#"b&fbbMLeok^cޚ H*11@3" V ^dfZ"kNq!wqWUG6uAu*#B`&Fx5*FDYf= rBA,u1GF014[oio!'XSɋV;,1`VTHÙO`?t'?zWܓO{Eq 0 IDATNm\{#ƌ tG]tyVHWd6icGtg6sԷw]r>v[=TKx/$nk>/:}quI;=7&?{7fXz=4`,wyg:f{9Β0g Gw_֨^M|/1(WV6}3:#ɺ/rO;oku`{9dkjϺ??4`⹗g* _{/̅U'}֘ `ͪ?}_=l˗/>p衇̜9ee .-sx &$&+ecTyT4)JԸLtbZB5]~+V(oMb%y^У/EIC\H1qo;޻|3O;/>wgFm˃s8uYM^TKuܾeWϜ<ᨓO,XVw9xOgpõ/x" ^_qOq:S''}:~ "lڲ.FГ{NU qoϔΠ4d3}o}o^p {/h1:x^|c۲So;sܟnƿƄ8wz; Jrw:[nh\d W\on[O޻6ی|ZNs7>r]u6xٯczvR[7Q:C\x٥omФFovE^57_=4;r뮹jvUon{c]xm<7^}e)})LЦ{5~lmw>Ï:`}>=?1I*7=MVKXk{VX1a¸g{EEeE׵vV ḫrQ4__[dQY`,ԒKCBm&JHHv= i-䩉7\ѤHCi~ŷ>{2L6Gtj-+8J<ͫ/+_5ԮX m+F|4lIn KTkjR*ۭz;?|K//2OƌZԐ,:=SӦ~2:Ա'3iPQ6|S'p?SB,mnjd[mwڡϼ}{imکK< dISgv-e۬WR[Is̙=++;xQv[6:յØI?*f)3MXEQn׮'ߩ_ѹkZp`:kkܰlo/7޸[Ϯ;\ŋ q` vm*IbYxiǍj+76K sTd4&ԣ]E常cLPkhɀ̟;tT5ίD˶c5K.|VI}77e@ 񊚹6rs9FWff]X=zڨKVOsM;u\FOlS|ԱfMx7C~ ُ{Yu+++կG\bslIm.{>w{n=nmc|c뗐$Ú_bϻwG_ѵ'0{NCd}CeƴY+[ouDiuY{{t=v|.ۭնna}UBϞ=c"z뮝M!CvhM]gVNӦl,[o/ˮƐe0 'L] {\zkw?{:?81dshØv}w@>xF=VQ>0e[l ]x:w L6[: K<[ ']2tYgݮ3XVܔ4]x;NYM6Z{sun6j,[$C2Llo;=rЦeWb1ӧMgLtR7[snXsCϞ1YsU;T_{ kukW>zA/lf[GA sgvނs1m;խϖ͟Vkn]އi בEhPi0,sz'I*6qLy$dsT71| F߂QQUBd䰡v>B5.c7iGF?dԙL&\{u'NؾP,棸Zݖ,׭[$Iv:gΜݻϘUe|Gdz'M3J}CQ%&揽θv{:zU0AW|ӗ(3>be8$_ 6qE k3k `H: q 97HY6 `򊲌 _0$d >1&$9Q(!_K ]AX}KP(EQ r<f.LƊ uUpxVC"G,Vsl|Q˲Nq B646`_dk--Frb܈,TwXR76X8oXjI@Y"WTZFI)!(o4c `T|Z;Li 06&筺"6ީ F! E8jTJMbXaЗCɺb,%6%rX.HV"vmn5#W=*VrˣВ*@93&mAٳD,[eZo fN޽{Y3sm=׭^:thlٲ6m+/X],n,{m9|u6HkG[7k`iJB.g] EL2mIIlL)/\`așL `8k> KE!Hkצ X|lZ52`I a!T /Q&J1;R/AZ1 +k  ;Bk𞭉LۄDe(AX%! x-@ Tc(O\)"ְ (+3m#ҬZ%Ga];P!XqP$d) 6 1 Qc,y fEcd2'$0 l z؀Fh "Ɛ8FA, Ш"xϙ2%f$j {qޗKRVg?9oUw6ffaGvQDe"DD? QEhܣ~%h\5? PAe7# 3 3s=]f3L>UoUgy .LL*M@Īf66Qܠ[V[#@NabŮm!BcOd|݆K.@CsE-_bU;1QwYvhH=󙁦8SxD.3OdZY:B=o9!2y+Wl5eHEGW\0 mxj4B2ѠA`F{ 8JTACqz&tɜ A)A r*2 gdT{L+Q UBHg b&@ puAA)$4kxNuU3R y E <8AKLBBEBU)*j AA H&d B\4= I\ѠiScezC=cjjuOA̬D}J%Rˏ}./~k${sϪƸ12K6vskogWL=ñ^ttjk z{ ΞLWco41aA߭/ .Ĵ[7qF4ε{INl<豞|S1,ص>grt zƹK-Hv,ow' =CձO=+׹Hi׹* ՗~Ǽp8Qw@\HB2L0 Ns=s ?V>wQrg/< _dèa\|DžC'o.O D;%?}go/7/к榈ȃSnc27E{r5}zZa;DN=8hᩧ&wūJ7>c=dYFF?goݗ[3a׿|> pjAg',o%(i9@=SzRRbBpOhnBQ$]fM]mx\ #^W sY3JOL庑^98>a9mqo3Z'Y*;ܒ0ܛJ"TKA5(:IV3k笖yP6٤5:{F#,cbs79F1J(SUt6:F7[=ϓ*._Zt<"s\Q"Sf*P n MaockGjVSzlȷE28aH 7Gbaߋ7X6$U)xE*pyџ]Bdh+MJ֩ÙᮛgikyoD*96dۭ3t?:Yf6it{S7ufv ӭs!\Dv}<)"--iR$!e$9 Pqp&>ؖt3DQ9\D-ET'"HyJ2hH ^:4袒 2R5Y!dV'm),a 5z)7y* 2: da %`O!"eQ7xI#s&u5-yS] `SF@ZoLpD">!5R"-eѥS“]@(iE"<MB7*]:17H N9ՓH4cЦmGCg$.H= r:hb!]T0oUJBI-$f%/BH#\ .@%I W@m9jy {4"]8 ީ ]YE$WH%Jꮏ[M73OA$yņ!¢˳8ݓ3e"n)E(ͨY n0^$d.j6ivf?0na戶^A-LTTf)fZ& H Ce,Y07KTxRUXBhjII LHP8I0q*d;n($գ%0#4&0/hISV&H,heZC`@FE&/-ݣRz΄ @GeAt!ݵaLX-)5cLE2 <%*XӧSmiM<˚gWeۋA-;/pg q ``.걝p1 Fw~/N{XL P*\oLH`όUGRQiߺ(<E};ܝy>a@J77y脎o3f ȺGm@]A8sr5!g?W}?I`@-HHso}K^,&\2C(&kR$4Pߖs=l~N9nbbÚ8\'p(p @gܦe cN;{7݉d|mҙuG]BB`w?Z/|性sġۿtN|_ֹv8أgƯ_ҥKS?IG>㩇 - ||l7U+vu|ל`e|7^.~?;_{[|uz[[e;2lp\}}Dcw/շij>7<_U9G|{?wyR-@g;3_dasgZ˞Y?c [n޻}h]ox>]?#}kwoZsۃtt#x_~ߟ'+2+$]+@k| ^~K˥]o{W~_~ҾU50;:_C~Em|{>]/g .<x9|˽v۽~׳,OOߜw%Ig IDATxg_z;;]4ZW V sc ^rOo7{`@ i,8i/;;(tιW\{g/>gE}w {yGECZ6X=O7~qr;u' YX+?yqzX:6I3, G֏|?.1'>QO:b% p)\{ \p/~dYs.xxtZ?1`Ɋ??{|W faQg4GG>xƛW=gPi@af}a'#_~?û?/6!.{G4AHDCr߽ ]rյV׼Yx.?><2"jd{3s*ERS"VTe`MAZ762A AP%^:l(MErx&qRSR2iy,q":JԱ(Ydoßy/8s׊U{zbt͟׸vm=vȚQkO>y_eK HnDlʱ?2 d^x{_o^#zxEf8ws~ree\}9p|^ڐ]~z)޷WKxq+v#|uԳ⧿qʡ]w:B`#탟r}CO.kg_aO~=Z 0+֭0K"Z%TPx!_?K<.gBd^]|943GuC׮/oDž觎~q󲝟sQ h;vMiӆ+ǁ}sE X~|wُ\͜Bjm~v{b@1V>˾s3pϵZ#SIO{>IVj1hiUhذI،-|8$('$%ݴF׶%dP5 x΢n%|z$ZF'=Ɍz/vw<K?7tonJ>/K7i؅Je6Sj$C,nXWRqΔ 3wbҚy甶g'ivғ:G:P^*"p5C*@h Y.<YzZABV]Wpy}9=jmT=ܤ"T%5e`FEC@C WCԝP9'Bӝ!.J@H2* !CPs( $xg{[! 3kT2 L+:̠t럆CU7fűP9?y@:g Cu=xɬzϜBhp:TPTTdJ$ zN@D N-~縻ZJN)DM@CƖ8"2R%GYܳ)zѥw{{~)+f9F[[r[4Hk[89RbNR O˿:B-"q!6yQH""2X_hU5mń ]׻7;+^.AfgZzvo+hUW5;ȉDQKY ;+B=5wp=$NwӧmE-^36OTjtkGӹ5K(jַwb> +VzJu]4'~ [һCtM>+qzR]Bz0Ω1C;wW}|vpGOZV3m{+c >$&%I%voy.<^cNC^y;.®i7,?\\ey!+J.痷7e(|aXp"Hz'̳{M>t15zxPN[ި h!󍭤Bˣ$cl(6KeC[`l0,]WQ,#auc~ݱ{Y\?ͧ-7-&afOIgrv_6ʪV6X}&Sf!UUguŋ*`V7;MGZkھvh;(kYmqpV0<<җo܆6JE4Pʐu՚ZAruOk3W>XxPjdC#k*etg2֛5LSun)xV$/sdxс R1 }!PLd9mbdE̓Jھcڍ=)"䇈BJiJtP"KȬXy#oK Eq5UA,*ѡnn!E&;  \ 6ׄ@pXei@][&Y6 u J,q\ھ~>s3T<…;{g?} NJM, Fd0JhL%ZYZTw.F19H-=JUX,%P1f@ &X28,h6;±1hF" *#$ ,TcSU:scv5mY3cࠃ!O4ѸaǕbHk5^y? m&1KjbÃ!n)*&6K/}yLKOդwt]U̾3D=\u.y ,\㝮]Y{c5\]mm-mzV{.W_dGGbKoa皇wa;ĝ)iq<ٔ%hQ@cH17-\"4"}jվoUU9Ss,o6V@ Q>Gy{ .X<,w,Xl\ۃ]f/ה wxko{B}|h^~ełka e_j%USãu|Z@ƒ#s4@a79fkHPV9*nZ,Y*nx/c-a[}޽XGN]voÇSl˧>yÏXv}k< >hZPDިW|P/qS/\,rJN\$EwXg(Ʉ_뛦ھvn?"[A$> 'XdDܰZ(n@SAY $98<e+8"Dr䂢=[yޢ:al@G5!t`6a]~EjEEVhGP&wI3Je T+i7@]?}vcCƼyBin@=pÒ5vОhMD hoNi?ۭ]Nw7y{^WVhu Ar͚[4NU7I0:3}m_={I3;C?)o Hn0<ڙ:ztyBõ/}KRvs{\(6!=VUg;W_̒YߍA̬7:Daߘ/:ge7zZ U1N9kvXdRg)BNnVV&udɮe }0y_>V ѫ4߻v#ءꌶv32 . tYta'(BnJ~qZUbSIjWe9QAwfr]>ŖW}cJ ob7GJ79kl'L4itdr'!` Ll "U$p0u|ܗǑ?9ؾ7!Ѱ&ig8iZ"ldeZ'e-)76}e[]J爛rL1$|;zjû3fcYl>ׯM" ws)'xQ# B@#d%)V u-P:o[I7yx•{x7q]q쳯nh?&k\DȈ u3U53]}_ŕv{?aoX 4J12U7jծUöx܃gBKfIx˗)6?p+Ǭ۳My[JfgyQ5|lIth˗6vi```5;Jj5 dYRB''֏bVٸuSxjn,bѢEx_bpWs!;ʶsh\W|ŗ<H)y?ɷU/ʐSDwYJvUW_~˲̲( kN cP!N T͑ !k|r,^2k>hC% m 1h-mX׌v*l4A1YSNy[8mٲB1FMe=klf7͠GpR}gI׮]SO~<`"zTdZ9RA&R,Y4%q²Hf_oMBQ \q!5}/ϟ?nYQUn3xr֪%6=w9tvk|\(`&RŞ{ifw[,I+lY@LE)R[@U9ز,Umo+2v;s3۸ o֍&p.+VX鞇rATug]9+'fc['n(uȯ}GPeY!k׮]res&I.6QxbB q"b&e; fz˶Xɬ} fTK\;sĘfS*8wqժUVKD6DzNaكw_ypBZ4%r Ȭ mChNֶhoGc,RDRJc["6F;zNMZɘ{i9 /?ֿۖ [9DDDb׍nѺABw8F:.DVTNR@]!!>w33Ͻ[iNH0mt=6m]i[&u_H8Sz=oUO"Ɣi{F/B PG4fF6Up$:wF8ϛ{m9fDEL03 D_5i; PksfF:]Ag*sWFN@볜 -=̨tǬz{ܿGTBB bHə }cңfᣋG`F}Ə<ب<{a'YAFq)G@d"f8wCqݪ@m2lڞ~>ߛv1I; u}FK <)T@kz:4 p H6W-v2`;6s.vo4A| ;5Eƺu›EyY\X"y^d(tFaE)V,wnNYdtxb&z6I|3[̉C8pVA: I5fF58*sIب=3^U/twv\Jq{ej\ᎉ@Ud$ %-wQ%Djy74jp SVz-ZqRU(kB zխv0]:<`%pPf*V2gQZ0F CU鬒x^F@sJ{ Yb&PA2p:L Ap2ۚv+&+ew^PRft]nbFD#>vz;H l' 8"ݤ HNszŵ,uh{?T-(;SH_f޻7失 M%I)A=wn \qTq"VQ=38T0t\5R OFB!Cj̢Ag9YZ;1dA(*W1Ҁ$IPWH7-[hEyTlnZ;wN>Q:G9s~xw"&j0ɟ"VrJuMPiN(08J*VKP&W nR?nNKRVW:^vm .ȳ4A] uH1 85Pփp$ v⫬o` eE.ŭr Qs H@Az G*!&ܟX}NygRwi=B3v:w]=)lt_7ܭF=8V=C "ãt9YgDe]EeLU&^p哽NlvUbS U) Qz=u<|OY#XS|N/cˏ;}I T8##cU$K^^4緇G!t袿z$vJhK L b*Uz%biK_Ggfq*bDD'Tٯnҹ v,)D_/ WwC^g7?"'1JSpGk{]W;F#pwgRQ"rsYu9R"ohJ)c{0_zஇ~}˓:gAY[ycZw=4H3$|d ?Qd|SN]4/9@[_gg^{/zY&<y'ʫo2 N/Yr#=G_zO+rxt%'९׼'n M&gYHocF̍P/>oU]'d!@0,I0@X@wgqgFGQ qtfsq_l -la=w뭪s?ޥ "ý{].ROO#hŅi;&2Xel3޻mx6Ml`wײ Ħ:t6yxMڧbhUqj(QxK,4X;䌌z XFNKOMd¤ttpc\ܿLY;u0#]t9o1F s=Ѕ~+V|ŧmߝy?__/}tGFѬz/u?x+oZSFjª/? Ǭ}W_?ld?^Chqwt|c˗/{k_(0,Y%"_c߭gQ7Pj߀)d#eh*E:JfMX,[~pհej }r!;N<BYP!9́ac{!rAٽm%3yo~Xbj``XĀU{jg}+VxϻD@[M:kFMRժV.r=--ѯ}{sE./}wҝg)/,;aoڲ:ZO[+5ϟ_ыP;m6mO)7k{i)\OyM9tɬ)`r7j&N9[u'gu$ҍ̶W9hSXU1-b/|NtCT)Xnj~ՙIjZp{J) o !"`$A*\#GNРqK@ILm;Q?+DB>X ;̶g @L"@" b?ۛ,0]@;Fb;ADRm]Y6md"e_wÆ vXe!1} -@Tс{;%恛P{Ff,yɬ%{6oݓ{.?dU"{'_~e7|˩:ow͓O?먥7/=fbpt_|G}y|^Wt"+_̟wPU)Z/Z9ٻsɒZG6e^nݙgizs M*F-w=TnR7#&{c! ###Z#G-sĒ1J @fLY+6)4L&v"BD?/R#)-,Mu٩0*fɈQ"LRY1pɈ T4#kپ} aGQ[2h&Z qm6E}[]u]zC=w񢅋׿u?:o~`azn1PZ,يFӀS[f 5Ϳ`S{7d[MM#{ @"fGۄpZg`R-S HY(s05Y,@:1,yGQU5RSw4'zJzCœ:BƷC-bxMvA]y啷kJ^(h%R.5rZ]*\mcRL8+T s'Ė)N5,lW«~B[h<"8&P:[ 64 nĨ2UFt Q_EGTkW"aR#m!BmL5)P bծڻ.&\5FYbV"D)baiQ{(#q˰ML#Ly TPy(Ŕh̙~:0H[ْA m"pKG`z$SGOG tGm! w}q pzpnmEPWRh@"+ 9v&bid>b XA0wByB&&ݫ@euҤH\|4#PYF0 "--IX J)+ϢA9AqH۫M՚ȑH+DVj~rA4S3uB$ P "AT,!@lj1m쬆usc^ثqٲe?WԲ$2ٺ˗ cX)ؗ6@.t-΅lL6MAiQi÷ϊ-b ŵc6SKp'W7$ƺuVZՒ) SVw iE)E(,@L3@"BoUk8&/ +$ , QYr~Ғ$ٱs",UJBAZxM?sf$ jtdDj4rRrEzV^=44D#"  5M;^-鞃2b.LԇSBQ_ln3p P%Ƀx(<zU;[t_:e˖$-,'P"Z lDP PETy|S4s?͢{ L '#RJPQг3%'.N 4 PA"1V]ZZV.GF۞ޢb;4zFr|:v Hȓ8KCPV$ڮZAOOϤ$2c@) d6X鶆#8RsJ8VXҜc,%(ĚD1o*氭(&Ő\],`VBU.%nz)B &1@@tD+lxlwT (`+:BAOr+ QX/@ ̬@ A  D ZmfkX$bSH`ggQrܶ1Q~֞3XJ_£NL8Ccn 5!,FvMkdZ;rq8 F#N:$kyX*,EdZ5QljR9SWpʗR<ԩ:XoS؜#л>[qM|2LhՃD?XA,bZ[\ ID0 +HP*EgE[vRKJ&M11lsPq :&3Pf܈QqJ_޿5cPe bf1 Y4e  ť^00$+)YJcB#Z2ȤLeF$\XE}GmDZ}DR~G>jC5TLrR#I:H]Z՞fN{Ivw?c hRAdP6OtZ0:ZQ6o<|r/Xh BeE©&l4P8ygh;R"l@lVw.σ zhzP>C~7jAT9\Pf;-Jcr)wEvה:}"$b"o$345?~mQ i9*E RY}eցgxҹFSUc1(TCqF! 0ō'?t@C\v?ዒFtY)T&0l>+cWJY$$$ܿ+1L 3`|˯d~hÃ+z-׼lMZz/3 0hRBEJy^7wR<_jBGD=OqT58@%xpVfuc]B;4yD֭$ĸp{T8+BbMYq`R+έۼX&8&n\1@W p:q֔{aUzҠyh'T۴{[j9].+)_O~8,]Wӏ/]?O~Օ.O}oN?[9auࣟѥɆ?yɧ?ryW\vW&\p/w^z%8+s+^f>yҔ} (ܻc&߯ 랉,R7x, x2JZoCmB=)`DYh00DFG*&O?u?^j*k]ӡ3WP;N&ePUZ@0X! ;8Wg@4%`S`/Qu2Owז/րNm_u #(dtKRS+`Ϟ=MbD###|;$BBi*t {:GVғ66oﮇԇF^|Lغ}=^)"}Q剧xg>>8 ?|׿7^ZN?K. > ,?7||JQW:W 7'.9?|_쏞r /:__._ԍP8py[-]ɔ"Hr䋎-:|E0Y̍,F=],,& :Q"bYY D̲,Qf2D2~>Ε!@3"IāQ)ư\{u'~隗T*AQONrN G)F!e:O”Cs"w-{TߙZLla\'QF ۟f Dvٳ:AּCA=u]7fEa?H IUzJiYG$Si:H8?!PbNM<so!T1Ĝ4LSd7H`Ϯ]p̼nݏ/?aon8wLhBYga>iӦ~l|ŋ7%m"Ą$˟9' |ݎQZaoT\!z>g;<ہ, Pzl^S?*r<%:L"1Wȕ,c5ulĴnG閄k--{uh\4M?Zp|dۊfUTIJ Ӧ qƩiь$/\ O0= [̑JL0핧 ;ޓfi٣qL#/Z YD:>EH_urf͚#FD??"68# %$6&ꆤ Bx!z#y>D0Kj6}r7tϛ=m]vdUgx JZݣȽ Z vXǰI\:@fM`6df޽$I={Yx4{Rdڏ'bX-jZ19k(-(Bd/gO*5<A!{i "%J "ȴ H9R*{ozƥFPzVE7 \k:7{4B)%~q#f8DF)LjSިІ^O<=8X^`Zo/uJQd!r#yyL@òr]ヹ%d -CPFa)?"%B9AD PP۠FdRYHDe&QlȩXGw1~ UrR6hXĘ TqT2dROZ*5bz+&"5*ra%YrsnUZhGlfwJ{0 S jѬgBpH#RPS?[Į 66S?EuA!ǥl'!r (,$o2V.SRxy)H$)`T#@@ 8єHuP]P\ [6l@,W[PWmZCO3.EarѰWYϭG>W -r\(DM Z[Q=0 L՛yN&1TPK@+AmIf)$SJ[ؽ4i]ķG+$<:C//@ $@̪Q eq$ $ @]e0diZFŠB 40죔~nmc)!C=444 ;%L$H (D"C:2y?a&BB ;m"Lq]fJR$PPr]l[В;uAD.26qK,ZSmd'KH*NM@hFcEx],#`s&4ռ˃yFb570NBs~Q `{eDeY"~4oO{iD dXG eT(D@!!lH[Wv$^J=_[0at}J`"#TT_l O=5cڴӦgSc|nyjh(O:d"kaT`mOa裂Z[xIQcwkSz6iNiwlsu/ l5-0QH;9P ԖSȏw~gzLE{VRVKX9D /P]k<2 FKr0B PN}775B_2C Y\O6D I$HEB@{iO\5H{[XY1iѷ-C{Zxdddd۶9fRvزYcwS+>nmNDTDIQܻgڴK.رcǒ%Ecx<m.LAKs!~퐔"P7C!b`¯?2 "d]JҎ(žTr¡B!x&\P|kx<!wL9n US N51L,ߨj ~PP1 1mNK8XS3=#{[?WD dEt4:i+: _fE,$iikHImct%?RH4SDO?=tC#RytxdݫW+C}V^Gg͘ycRZoׯ\y|LJr ۶m[jU'I:WW;V.";C>?`o(y@k(X7b~׀r;6D٩m!4cN+(Ţb1{%H+h Q.~5758pQ$H"" !BM^|o漿\E߿=v_t5կ~pYg1'^rET';ܼ bI9WWuK.=88J J;\b%(pΜO=n}xNز[~ue (0 KJ&͹7 l1yn\7lw3i#mG776aL{[bW6YbHA7hNhmݜH6 =  OUEe4M͝sw7o:ujK"t^r茇7tZ?gbӥ73nA>|4Xk@Q/52sWZ6q߹^=.ןhTm~ݽ{v>>{K3zc j /~pΝa~4Ν;i$ffFTXxqoooV=rrTT=eƘᣏ>:I8׬90˲,=phhZJv?log˫ ΛPHQ>jGW)U0@8 eѕ$Tތu\?(A:ZUG/Z]^TK]}ozӛm{y6[LȻ_{oH@ k |oO?͟sWRwWI: {kU 7qՒ Ws >Olp q)h>|Z( ~d㡋#ZI& @^8G jvlzv^cl+=X|e^'Q(|i| d HSsw Ǹi;vDU|G~bykQr=|1-[m(9˔:;G߸ʗ! B@P$փ-3<~>UNIzzz+Q{o[:P@&6zT\dT$2a5.(]%52mbJ4FJ)jC't5нӺW2A Cm9$ɚ5kRׯ߲e=4?mX(0,4ZC*$kQ2(8ˆl 1^ώo>$F{\aIٴMt|t.? yvʢ۫i|PA gIȲyfbu:mR6YA&"蝭 E,L7J rFLƬ3eJQ0B6@q;獑H du@bRn(cSoH˳,P@($Ks}pSO=5 lȳLgLZ6=o/0V=ZGqCD|Nk/7"P*!J..#Yq?[~fr9rY/FsRr A:d6f8{#2&rB(Jኑ Y$]W`+TM]I-uΆ :ϵ+1wsP;[Vt+h=T4YВVmЫ%`F,Dq8LNJˀQ"A!jD0#@IKF1F$1T1H 4DB`|x|ߞx?%%`G;hgДl5n $BH !NK|v AsʫA9~8? 8'; &d.%cx D@Tv{?zAE!d"[ Q b$>zZo۳ )9mU~-vxr S?r>.W Lx\V.)Ws/I7MLfEP-;I<6Ip"" )\W3@$XG?M`, (mAhF~pN8V+Ʒ,T3*Ew1eR(9iM[\ oD&xDVk}bè*+2*g%M96s@ Sk&{ '@ܢ˙]I*DU7f>/p)$ U;w|` cM~mb\ VîHM˼cols9Om&YÌRųXsJx Bf~oF"F*@4+*$̸>s*Bp 9?gQblƷm:iғ$iE:/?^6t=x1: IR@֩8`Kʉ1NΥ>tS5A'ڋ2SdA " o 2U-{6w|^`k,5!"j?Cik"8l.$ b 5My{k9lICD[/Qp%fffA }&C*n]Gd( "1Go۟յy潃G,[Zzd_("\"vo.+'kRNY9Zj[_zlR)gQEO&ǼfТ䘱cڙջ#DLNP6PgϞ=k֬z^jeu'K@h4:K^[E>Q H16xоj#ŁXHɏWBTBD\w!@+Tω` A( 0ٴT+-=}}Z%|/lv'ٿbM `.-GǾhqqs?zN&g_d?N4Im3=^WpY-xN> -ܯ Y9w6m#6TQ,FBPEJ)@,YCԐ14?q\)WrHa$L"`lAMɠ[a3?%3sQG~m0+DY`0A'Ml[h7Z'A4@Y$i4a篾' 8- K.u~RZ?ڃ&NW/G`_ /"d>hcE[6Gg`5R(,9R,e[ocgh Rrp W4ҁ9nه::Bd7Dov:ka0 c; @Oy5@ }gv %~ʝAy`a.[Rm}2gλ;(q*E枷ք ܝ="gYD-"y ʞfTf_6;8`y`S7Ϲ-x0 L.lx[ ^yn2_yD$R DЌ(l$*B+vA n67WɂA+x0+G+Ò,XviI̭J*xHX옹?)~$w?C'm[Kka[DMp 7W8ߚ‚JNTC7M=cEh (h_z+&6GϵaFHZkNI/1u)ȕ8ʳ!R%RRR^BCikҦiCۻٙ{Y3װ$g|s=;TL"|X"x 8FV쩪S3R8xšJ ~P ʹ]9d)x:՟Fn)fuT+>1a7G抦z+dhPxiOL4EIusMIJ (ؑ(=`%v{/ n*\8N7Y1N :مV7x3z_[ qT ZY` }ǀgL5F_ǀn^ݛT*snˊtADq@WȓߺyZͪKQ=y` ISF: 9VvL#ZY6iIo'`.VON7͸^R,  q6mT "I`]R^i,W(AAʹX,200DX^}L5P{ah CK)%bΝ|x^vmzTaJZTEL4?1L&"bdy,Xؘ^Da1.I5)l F\`kRs~e[[[3EѮ 6SLh xcIZqXZUkP$flG}v,Y{ˏ~1u':s惁;w{=rϥk嘡 wUq?RՏ888w7E3kXby@~Ⱦ}&Ba52e&r҈2+\Nu[KlJ@atg끗RVϱ077$SP}qHСp6rJa?#y )]!ab>_(Vb"ugH6K)NozZfg=O|]IENDB`conduit-0.3.17/help/C/figures/network-sync-pc2.png0000644000175000017500000007207711326117107016615 00000000000000PNG  IHDR葬sRGBbKGD pHYs  tIME M[ IDATxwř9* (  &0pM:ls9D,!Vasة?fvUD?_LWWwWW[[oU WP|O*pqqqqq91m+kq՝Ni͟* rBV}nι#D2I3 nY6DǶ_aJ I@ϾMܠ)Kj'GIu3ZC}My=͝lqX"Et">WS9D DBNs/N" &6PCW %I3t6/tϑtR%C)*.F--Ћ[E‘۞c1nP}l3"'"Μ]6G8җhceRؖ T99԰21BN +TrX LI"XO06.( +v@x#`i,D$hha7!4Z ;*REEQ5ՠ\tLz%B iNñ2 ?{0@h{D$Z!HP<>d+!&-G}dzGwg. +D?^+C(HL xGk,mxA W tʍF"GSN%%!4NV v=|ǡV ˪)*B9JERⴶݷ1-t@q#-@a$zUjE6N$Q PIZF82 !f PHH)4/D+@GJlC4&FX\2e&]iik˟ɜ`}ddMZ_;N=X} UpT|IV Ճ6 D:Ye,u4;EcWBWdH\hik*THH &_4O{iv8lg:s O- GTRѷz2=k62<26þ"_hU>j8.iSU^5DŞ$mzh NIS!䱑FS&Su(բRQ%int/vJu =J*IyRvf S.;d F0<&$9k f4N%o4~Ep 4!J↗6;Y AR=CDތNcP73C:ӪalX -BN-[Fᔩ|Bn>^qz!z*o/4$LA+If4 jGH=$Vk(:lIDXGa%($ICN1,QŊ7Vj6!m(<6MV?A܇4F M|ҚD)mp*AΛ;@+]|03RЙ>3K@R浱m&$;)$)PA=KG('xS*%B$ˑo:(OHIiab@1Xߛ+o-"rq6_9kΟHh5cH68·"VҢ0c ,~tp@)>L3ʼùtLU54t 5~TqbDsy:5FՈ*JU .s I[i8wDi9Xزlx此w`$-qٺ/A{,Cexlb{`۴H ?C@Q2tt)QNًigXVJ'*(iM^- QF3Dzn;—.)pRjˈ"/ί-FMǕcCxU/g6Ɖus9ӸjA.\8//gHfnı|ffyE|j~CfAnn6 krEUعig;<8RmLQBA ɰxC+N3*+,S˨)Y/S An\4*<@:>ONƏS*+.S0J6}osYP.(㎋)N vlopX d/v3] ٲӺ\( H MO`_N8'` 8(uLf׫;WT1gʈ2b--Ι]R(!1SдvO2sL>e/bmۙ:˪J0}T&V33m!e He'X).KSu }mM /03gqc#K6 2ҋpLlC6`QDS$b1P4vh8\~[0r$?Kѹ~/MZ^Lʜ,08- eo$롸2m %޾^Nrk+^M+y~^hrCe=vLlngnZ/Uaa%xyo)JhWxA 6[Eӑ!MCSVΠRecj&ẍmLVJeD*vR޶NRƎu{XbremeYqvٴތfB0l(͛;fhed:I}RT6=e82gudYƤ(죶)%`˦(H3nI[G'hCQᥩ> %Kc1$>LL&i>i;WA(hR"@X&1t]TqAGZ$R ,{hb;8R&$.6;b&d: 1lm/n7Mbo?f@?O<HR;2Jv _!1QEj!YX20F:|aRi;ɶxmw >_- gWUT˶KYlζJ8pg$>MHLF*yN  d5̚P [H10/;m_#ưEmKIʜVށ7!<>>zpCVbXꉲa{[6}G_(8}-MW`c+TTE#H6R&c+=RXi|BTt_\p)R:H'{mEUi-#4AJ)U@` \[DraOCo>ȬsBƲA0S(C?$c˜\ưXNia>: e> *6@|i2P4!I_"I{_+v$ Rp!(ȚF%$m|`{0s*@aaHsE^E5œN.\@}U1JFsiSkUx$1BG5[@ )a_k(˰WXk C0H8uDZ=:n_jc3t6WMEb^1O-A(v%מ>h j$׭qɂ\v(7 ptnYpKnړF:mbeCEq>߼;c50s'P@^50iL-WNp}tJʋ92HUnOA:+UPﰧSCꪸA񧚹giޒ"Vn`u,9CcK/i[vseSǽ!cmcp?eagc>|u?qC(E 0f\¸z?.J_0xV ZKsjI[vu7Ƀ-q.U%S^R)m \4v]6?+'rGڲٸ%mQazm`(@wG/]4,3H+Hv#l3ӋQT/H u:QL'T f/J*LDaYJg@$:=B *A:@ #uo<["H_ܿ8"مbK_1LJ*aeH W,.(J2 J'XдAS0xd :vҎ"L/xzRd+A:/^D7a`BH3Hu#l0??4Nd:oNx n-=Ky=)j'PkOG$A"ՉN! J'X2+K%J(LL @$ |ҝ( ՇH DH2уIĻq|x*?v4{ 1e=Չ1p@h-W~Rmd/ҹ`$b8DRx }7 ѧ8̮=TR|hvdw32R@fͩ"dgX8"Bd$L:ٜueh2f'?,W=;vDa#cKTM΀₝"3L<a!ciFYv/>B-y'm2Gں{ZHm[~A^ np 9kFv?eSo U8ҋPZ--ߑ1uGՃ+8rX8)3=(/M+?ӆW?M[h :4y?u.ԅQ]Љ.....]4d[x7C ^\İ!9!Xt^Zh. aizټnm Cv6 VtI-֒Ңa'oRƈ!(?9Ӧ2Hᥤxʒ*M Obě~VRv'\qN6M0Y,s2)*+K'Q}&iHQI~i4ݹ4I XȘ3ԧ.#N*:SN;;iյtmj&NѼk'q.'% aWT|L[0kLmKj'r'?.-tV=xCͫ>v>߻=0x' NO]ݐse~`#7v9!-....':N,^%Lv|YTXa+6eahʻe6eQ'v槤8"]-é&Xm]\\\\\Nt>`вLҩ3..... {xcM#Ox!wAWY_\+}L#CIk[; ]D q2 ۦ۷SPX:X(gwuUFpg3k\-ޣxY; t7OI} hYgsEQx PT\Ux\\\\3= #mc[-9l͍IncnЉW IDAT5$Fy?xaMpy 6X髸`T6.gM*.jcޚcMU(?ˋC#{Z[ݐO_Fz zifs޼*^]i f X+)ȯ&ղ?_-n˒cflsO, ~z9)5g{#90$~ˤ(jV#Rsw ?C&E{xMB;Ĺ,by"MOGK1fyɭ_?L(bYMWszr#_ 'Vb̽7gk_߀'(: z?_<1E?C@Gܣ /į{x<7 욦@Yy|KFϏGk\]?P8"!ڱURZ^=yQ 3DU]RcsQ\\ķmxq~A}BQq/6? SNfW۷ogٜv<{O޵2k8Gzڶͺ3q4L#uP#42i2锛.RZ Vv4!8ͼJ Sa9(J7lۦUVz}4aÆ1sLXtC-c憺LGa?We )' RE?)w~B~|WD;SRVu\_ziwu7k׮u389|`֬YnfpgyvfquT̙wƌq; ?[|3CE؎Ķ2c;NV ̽\⨨6FX7|,v5nHǩ~?D4Iᩧ"q pp1lI6lo΂ ޵3AK.(t5wʜLa8ѼZ.Ggƍض͢]!x^847oq3}ĺu8g+|?^ZKCCû{Q1DDZrd@C[4yel^Vsj4;n?Xo i(z]D}@ 4 M58Gu:p/cmwMކKƒ1~'\5(l7;Fo>s.kCq{/(dw`w^rUFզ~3˸ ,})zcu ^[$-!5wvEQn !4P|(‡m{8E_Hw*vq#0j,U?t1 jU E H6“aز@Ynry{ *@;2Z&|dwT JG(y[ ,'A^ yo6lŋ c n3I=8qFQaR; MQB )|!_d*|0zL@7~C3O V63t*?~?x)4+ Jk֏+F^Ÿ.25 J)sM'$:aB (A Cg0B?=irxA 1C7ݔ5k.GYaZ @@͟SLo e堹.>jNP餗};P}h۽!38ij~ z:-0f8(ihj͖Hizx}5T Z86C/ AU $z09`n1`pO¯+? Sj@dn(hq|?6so:J!ޡd2$޳]AMWrzv:@6N:܎voe]A')y5Am݋6Q^CQ"pNYYce8EV\/YqCo ߀,? ۊlwm'l*yIi9AZn0Y=L?CVh<[`>M6P%B|+l(plX*eZ qax q>t@S3$(sT N RGޓnMWda{@!L[wwP|(j)i))naĴ9:̚qEI$B0izRbb׻]nUUUͨޢfsTfLuG=Պj~p23=6l3A^k:lHm af'_-pב{`G`A=l*8+MNvJRyl #G6 h3TJr$[GN).f ‡P8ˢH0Ƒ1<ؖvVYG`6!33;e!sm ~ThWDY $;og_NW`?S0Wcm08>a*$+N7ulٲ|;,\kweoM!| t,wZϤQ9XT2l9 vp %D/C@+CY |80y&n ‡ݧ[~΅)!*u̱|ƝS"`AXTTDޜB Vi.$zGS{E:eX!@vg{d%n$^ |  %R௄> avxi%6<"td`4y7놦}/啰7$&95ᓠڄAMP,_෿k֬mƎ㖓wDZٴiWK/w<ܔm'uTx4P0.Q> ˑ9t@l"̖)#Dʋ)Efȕ!0) nxc)d

ux<|)`hAdz3#O6EWBy< {.,<JʳcmQw6HDKf#)z˷] CgBJXˬ'ЦBXhBbat6HoUr xa;Fo 7~ x/̽'B„H5Dat Z a^% ^70k;=̆Wae\6 ~~JaxؾÂQ?3`TՑS2 hl~^f W^y5ׯ'H 2nڴ-" {ql۷o>~ÏpSi}}ٔJb-l #к/&o3aGe>safM7>2jgA_kԃg_pׂ-:|;vu`ٹՙOA"O&}?R&{v{4 A&&'x :ih'@ qøQPQBHVC0\ x֬:Z#\~G`n5Pla0z<=";wqH ~bIu#vn7@!@^yAAx4x/<_b&v⮻殻~gڠ ]VEo OytގVQ)`F$s\(xZnG,&`-2${;|QGXUrɼ n:B3:7 ꇉ x.KW@p?VÈ8Isa]* ;`w\8/%t!>( AAhYnKT}h}XH¢,ӾqkK5W*8i2ٵ}߭ ' |Wr4ǁB uWCm^ B ȗ󎓪:s, XbO{[h,Ă5X鷜, |>3s39sSN;Tj^!>Z)B9А ,r>d` \v0 7k n8e ,@F&mP&(N`f? X/xuM2!.ŶmɭkB"0cwv߿?KEAMe`布M6ukqu8^` qC%5fmTMG꺤\BQqk')1nMp؎iWY \H8{Ӛafu -l1ο9 _S;\nw!ӧO3$8ù 8C4ɓ} kB|cEUhE~VGPT5K/eaaz}*Ym 7H̢WsQ䦪6}lE!;Ծ{G%Q߫|( :#`***[n3N穧;KuuwU' 2j(?irN,-`B//Ukd/kAn3GplalJ[3P 0؎02p\okNf&s[Z?ITAUU;[5wct6oaqT~i5ښ41 ֶIe>jXQ|i!k4 oUAw<̜I! ?UU;iQp3|0A~..(o}p)[/2Ff8!,I$wdQ6ƀTSA,(Kƞ Ϗ( )k ` S#aZDbV{~Efgy顙<9 *p3'I&y9iWi6|99 ;_rJ[ /tz<~&#tm"G!LUi2cU^qD M!ja~M׳V3_K'&8_&t3<15g_]E*. Kk[Lei|U{-!GzFFXUm.Z[moBUb5KZɻ\.\.|zomWovP5>-dE+\XњŚF7/bXbg֒iD;*ea-,²l<.(HFZQ5@n*vqcN R=\i_Li t/PA i`;7PS!h#Pv m[ShhIO!N buEKj٠6$* ",85IڢQ=}V m Z ^hu~Dۼ,iuDƱZ|T3ȍr0i4j͑o! Sh_D*+ qI`t &74 $ TY L殉N\?]8.tndt^VWI05IX&s+$| /M3<_Ѽ&b_,ncBY-,lc'Z|Qm+)w ޛB۾dW+PнAYTJaM?JqfFf|Mmgj܊CFZC̈́9(DP3)+i #&c`5kZ-FS'-4W]؊//LiC7W ʊ[qL\QF2w88E<=#GH) H4d]q#h@S5\@$k{ymh F[b4v'vcE-fV>^ud(oڔ+#fL/?KW7M%MfTl0Nl [慆MWme͎H1GW%nE "PPpУZJE='ڈ9*HT>=:s>!vJqܯ%@%zy1َ;/E;Il3Sf 4@QuZ5TB3KSFU Rq.1 1`@9,ρPL[aV)To+Fʋ"q{Y7˶^BQ!DG{m4%y'@#:m8v@֤u *mh$&뫛Y `k>{φ-׷Z$dB@83ּѼLO6Й\"ؤ^ ױR՚fv%n"K<ǽg9%"c7nG'e xjs-$&\.;} DvW"LzO(mQ Pt# !Xst${'Ӑ!CuY}h ^~+u1hL71bpz--[wQNtvfb1@lqFv,AGSVVƻӗ+#p{b0s|>K_r8({?'|g^b:!mf¼E*Űavfy[6-^Ƞz}[t1גZ\Ĭgٓy+dZb,cFk}Y5œ}:UUUD蔖2a|M|AwNm8p>mWѼ`&jǖۀiU~mxO.5ѿ34}f['SVV׃2]NrxIo^CA_nUu1!t5cOOwI&A']hXGCƒ}i4XNWCAA,LK{/"0?qG0f˔Ѳ<gq~\'H$.9kd&Kv0sWS fO3 .V>~]ڦM=H6ũgg{,;[NmY%K]'Af$γL_XZMf_<$/~ƹW½Oo/=%nQ= xp tAr芠r|*jL:o ]K$nkǟOb7`Z&>(v;]h_PuE8>&44}MԼi%Ho`8󄹄c:{U^kVio"'[k]QUW"T_&`; ¶,!rR4+} /{ @ܹq\=p&sL-MC$وh'ED"H<B &iX@d.V4k]HX!7DH$dϳ[VO; ʕ};![ЎF,=x]úI$DWt;YCmXu8hi躎iR%D6QQu3 D"H$F" d0AkD"uB8]*%%% i$qy%$D !E#q8H5]m$#c T]N`[f ǶAQQUew}@lA4~]VDmm"e**hǤ)XW†Vl²͝+I~ɗ뙧x|Z!cg/JI,r,\2v$g߉lW1?Oum?U-xFO^]VZ_)26*Qd߶ǡhtZzzVUpXҤhBS&X9i.s2qqsUբ]&'7Fv q]$bqwLh3m8lz:<âKѰ$l94H+u-EFvAF[c=$hI,)gk͡h ''X h;ҳJ󁕠hRΐ"Diw}7*ƶvql@7tZv3/>(q9Sk&_CCX;ઓQ 39dgA =Fzk_ֲ~7v5x7&I.#ЉGm#ћ#[|&[_-stQ(s57SR^Sns­O9z0B.'qR82FNO|ٙ[݆|r˱\Mk/"L9pW|E1ﻃaݼۼh]<3/rjV.'Sr_b 䂋OC]7G;dKڹ?O&H$0[Ln~sWӥK~_s:qQukjhll'0-۲ql@ٙ50-r14EQV;= &QWķ=ty#+p9&pegiZO20-Q:~u;8y{0G?ƍ `.(+E={o$,2S9~(KۛGqE`'9<~˕{qd ɉczֻlyn8ꨣ;v,K0~loJ @{{;H@ GU t-pi65떢C`%;ˍ[ql !a\ؘy@00pe갼b8NҤ~]otiWÇoMI\>7&qN0ƣ$uCEcۙvhqxv$$i1t#ǮpOiq[pJ$I!駟ct3NQVBMb*JmdtNFanWFލ+g+o'b_a`>>Iɉ),ٗy<,>@q3 tjT[Glpw)G>N-?b嗟/qBz:K;>2íwӣzs.CY Y)O/xV@S@8Y/ƫ_թ!N}Z_Lk_NM|*B1@ڰ|DiI)n3$LH$$Isz<Kԭ[kI=ӻ((_OA|=X;tNs:f>\Aax6( ]ޠ>}[Ǚ;rJ3 XSsPJr[TNY>o6kdtJ)S[EU?{ӻ0 , bkt-QH V͟MU4/EE}nү4+x5ǹy/p"fĦ{-ɥv%s2jtc& ̤>;;C!1,_MI .ful\(JsaWth2;NK#H$[8׬Ool{sx$ |x;t̏x[$k<,ʻ/i>F~9_ܽ8BD7n&׭_ܹs޽MU%@ $ihhAC0M#7NQ\ѥ`A-s3';M7D"Q7P]hms)@Gtd,XFVbWT^"$FFIԔ,(v6 Zt\B! ÐWD"H${2H;%R dJ$d;WjkkeKI$B!Ď@Ŭ_!o#D"Hn233w kW"ν"B_ffltwEٜxYS7 _ʗCe3Yÿ-c\ȴe|qѕ\vT=;s\pڑhf؟fYƄ/#Ӷdw!?7L~va8BEFƮBhAP TՋzQU3gPXsI٤eP eӎhh'oq]fp>|V9mP૧ɗ˙Sk?#ȟmK/ _;~{64'&p=j_?=WgƭOpHyZM٧O}PUp\f<C(Eq>z R_C4E}`h? q ^MNr`kaDm~ foP>{5VQbĨA!3f#{P sh!*_i]L>qeW^mAӯ՜sn;lBfEE> ݖ&+VaƌY\ D-?bԤ,\{ ?j UDӟ69#@ qYp]pe?%!,..x =z[BQ\dpDIFF`0 Eq&IDAT'!@!ԥ+hJϮ~zvOc14n`W*k۷{μ V~5' a'_+8Cv(: JJҹY.+?"ڵ7!oW[^M#Z2KHu^w;}^ym|f/N>w2F R=.t@ x$-a <}`xƱ\Z~M$#gF??i&$>Jm-pC3΀ǭO isϥv)pw!@EQTEc@Qg(JB(Iq6܃QA\/.]։',^* /#UH#g忢`D.;u0mKcd֟ǠJA4Kˤxz2c >.,xߓk< #t"ӦAKKhG=b> 5(@;,D !THDH.:OlKl?0m^όVPTƕgr=[p3['PyQoB8`K< KwOgɓ|yG=bm,p6B;*6RdWEUq ]ť)(9}8_M{ur΄R%9A6T%p qG8)QL&-ׯ ht A)!XBqHG\BJ6nI9R>$V׃Jb6L[Ud^=1S.bH$URBFQ-˦V퉦jD։zB^wm:KBx(>l2Q;n.\Bl4UUto VU5%Ƣd]BdfzInDr1R6R9 K[[`JZhhh7LhJ8M>C dر[N(B]47 uz),FAN*H$ݩX,A"`۩uA˲o!OryQC4M#it+VSN!--^z9sp 'vݚv9wdJSD"8D"IAHGB1:EķxSYY98aN>dZ[[Yx1FP"H$ X4I4jaY6#0MVFTXp}dKqǾ}#P"H$;'M"a:at7EPQlKi|V^ͥ^ ]wݵ[EJ$dI䓕H.@@2EܨڱEJs86nl9s&&MoS#P"H$;iYddX}*$#[8XV EP@UTEa&zk~$ yNP D"H*:X,ƺujjjו#G2f[~wyN: q=z4zL<~I!H$C4P?0 ,yA]]`YiiimU^EEZG:۷BD"a%n[ŗQl2N*6@Уߋ@VV `Μ9n5N|QlEpcvQ1)D"ٚ=`JX$w3me;$iAS5ܺ3ɧ~z:mN'?&,YR%D[2$%mrSS#p׍a)c`xUT,!=#R~x6iȐo=LU@ %{V(lM D"HfTiӠ:c7iP0%"e8m9Xm[N$Cund"''GKicC}j wMg8΍SYH+P*P"H$ {S p3'a޽ݻWN)--UmPLrfY#>p;[IK D"HE^y'\zi*a#@ '.KRu桦iۥ;9)+qpc[)жinj &P"H$SӐo |Qjȑg3fCee굉Suw[¶ml+LةJ!H$ɶQՔ?7)!zϏ˕f]'bXG?hG2p,3l8he&q<$1<>fex,DU5lBQε۱A!:9ǶQu#ƥe=>,+,UUmEQRetg*ww, \#H${ͼ`fj hVG4k,+?IzXF뎃m8mY8m^liJ$c02 tÅa[h ˃^TQp{|=4/qt3pq;UQUpy6E(CQT*/VZHȔ !I Fc[ Lr1 \.0 lDuFXTEUzocX/tw(#u.M䴨dv+,%1BxٶM4F0n@D#ˇ[v$M -"k$+ϥWaݩDjWSg445@8ꐞ&Q"9Pв,.^HcS#m>&.fZ$$- 22K@2ߚ:+M uضE([QIk:#(J#ێ- n_C̲q 0؛E vU zM%2n6/oe-֨Bt+ Gb0CIKF?+~^3OެX< C7<.VGSM٠$օ"MT jjdt-"3qZ$IIFߢ_C!m&++Dq=5u-2ᣙjK {j6"y݊x $}Uwc&X8xNrB6:pEX؞ -{|222pdd Ut>3G~A6I(.=(IK:v2JӺ]'gJ҂EZqo`͢[FfVW8wd-k8VSbiU3&Toa7C%YyLH=["'0NDUK^ܳ5!#[֡=ۛ dZ]AfQ_TFQP[@QYU\yeفBb0vєf@L N<[q #+ˇmFS8"ݢFfğՌ=`q0āMf.ԯ2G'AM(J$G)GUK摙׷)ڇXiۍ(6q%#m*APhƐ$G3BmZ,O2\.6B4ծ'wm@W(˦,=LRpzjppF!V!pĚrID">E8ض@[Y!崅!iJ$ZVd" BJϤ`( Um ӖBh Mve;PJpld"54652i , LuTO<k &?$oz>|~n%T_:G'/aЕ q:nCT4Ilr مtzSx }E碸3VbdJd߶N/=3˲:v;Ye:͍{qKʮ߰-10zqtH!L"~U\, zuEu@qV60@$h86*] Q0 J"'&KI0|"(ޕҜb4MAXILi J$A<el2s4s!m5~jn@ej]uQ۶NIYE- ϷkXIVrKK1I&͏8Tm^"Vbsیcr0Hy!% 钗G meL"nEJ!i$ dhV7' 47JoVeDP"H~z<.2өX;6) jm#@lX#1ΞCUUgvvvd!JC˶H$~mY[ K$C&H$BD"HRBD"6c\R%Dr`P_ mR%Dr`L&0\.8fJ$d&nCQTUŲLTED"HTMG7\4@,mBD"D[!aY&x2"ض-P"H$7`wB(H$ۻca 0ObB" $f+ݸźk^U|9DLkAt;Ν;).. BL0!Cx_+egg3|:$s ,[ڏjѣE A:4F;}jKY?!C>H3 ү___UAj fPos:ݷظC.AANDӽ,l622NQXTXgF!t,ϾsC%̸$wd6A&D}4zp8^珼,WQ$qQd7zb2ȊG:aVH umɓOR Qt_>s)jDN%_`J߄AT)䘌Taݿ.rzۤ3IJ+'@@o+ U2{YݟїڔD.utZf!n9<=v n+<;6՝8 ' Ͻ]4,_2 0l>r$1J5 BO&ʜ˧pX'?9_ht=f*z)rsgc/z7A`@?BǮ2¯߀P ^Lqp̀~ ~a &hOy_t?ZP>,NQtg> f"#I:8j|{N?ūX(W> 7 | {-d<,~ lul> jO 9"dO9X<[B&ʜVAm;*Pg)j͐s's$^.\TUUs}.t0`:iVkcU `DȅO@n\N.uVؾ I **ao`92ljpu0c qqjZ^de֭~== PzxeN O0}yHY~0% ,*I~pI:YmSSMAӮi%05Yr3W\âErh(  ^ /[޽迅ۡ#P>n2y]F#?ݸ-,_,Wh'if_'q%T= )?O>xr88YWeSnC[OY%.`EϒAl| ov % ƨ!3.) ȼ<vV47j|dK1%K^m6,t;\eN)`z^bc`8t ϡCj}˸irm^/ .;3?((꯭.K攱;e"~؜rcow΁ p6~2\8j/lX,~ >w +AI[m@3PǍ4o$ 4> o`#Ja UoI9 @w_&{\r7 [8|!><̆3 7Fj?Fu_z>}_- d~kz @´mF1*2q7. dSCSN-ܹin,$§ՌUG ESbR;?261lZt=Q^FxT T5tЫjgȇ{BQocbf?6E0f.aCukL}8?KSPRRT*|ngbgsEBů._õo]:ٽ{7Xl5j-jxǏ- ]CΖ^_!C97x<#:U FVt`;4#]XodvH6HX\C3fpT+**fìY駀%YmM͵ ti,>^Zlm u^HggUe$^$tA' P|=[^̞]Us?{oAd=O=Uo+7̘1cHNN&%%n 6ԿunȭQ]'##0m44Pk$:o^ueNj Z-!!!{gSmԖ@]{T3;NBl91v~]54^cOMz6 dg>oaݺu̚5fޫ,s˥ө6 F$4cŵ⠴ToڧϫG]h 橧9K_g\M=6eWXQkz„ |g($I\.4zM߯6 $> y!UUۺ _9~Mn.^p^9ǴT\:J}ALX-߯y|֬Y mM-Y'!GyL;9sj^, SSRI AӦ=yBqh'7Rx%@(IT-y}iLwqwcj7z6Ř1c8piiiL:kM7+jMek3 y1Q|r4?zpEp( .,(Zˌ8yXJ^h?LڛP nN'wS;=:NSD<:OR(/~V/o "ʜkjЖ-[XfMMbͤ,1Lv/DtdSJTĐoFo7wXs ;fCH.FM˔X'3cBLh9uvs;Xbpu$o;B.vdGߌ 0fLײ,ZT/ߓ)t;v+VСjcjEQ}r߾mgA9Me 1:^5xGt$$$PXXXqǤI>|8=ٖ:\Ǘ[jN`Dԥla;XxaLpZ[*{wF`*NcWh:s'' ;Ա?rEdO*p_ev<گ><|]U6 ǎ{偬Zx:O_*/La -#ʜq%=GEbb"tr@EXns\%Lg[;3S ΅rXF`Jѧ2"a3Y%ޗUN3J?#A}+*}YR\c8XR󐆔އRQG̨]xcG5]Yszq0:wJL|"%dúu~ Qf(sJ{ogU#̙39s&ϟ'//All,( PVnr/m~+ձ̯Wm6gFd!bAhUGaeV,8@!0Ne `;RU0yV\Q켹y8.3.Vj˽7z#ν{F׫S͡(j{$XjA=Q_~Z?3k׮eǎ={bbb=z4ݝ1c W?\geNYJwyY0aaa݈7.-r/u_m77ƚ*]]- 'ưtUL:Bf 6YWVJ>%cysm)vVM AmJq^iXUyԡn32`XxaWuߊ ٲEػ&ɕWiUsVYatOxGj}_~~ nOݯDx5p Ǩ3ZwtUx/mzTAZs ,+S<e>X~W*]rp΋VZ\\}FZn/&>$:]k d&hO5guY%}/4 mNBBB a Um`A3e_S;l?_ hӧ_ZQ۸Q}nX2ڱ:[>Eh3t^5j5J5ޕ -ayӟh4sO#c{l_sQA NR]CQAkqiK}Ff~Y&YJK09c6[پ};$r 7:[l)`  ozJzg_~y;9r3dym@9=C[9zi+q: '谠xm{|ϸ8E@@Ϭ=JW'j O?ͳ}ysȼ5nj;+ZZx{iY ==sogѓDEEǫëo{3V5 TlRt4|QM-sdpΑ#GmVL2e ۶m Ն qs},ȼeN2wfN<ɞ={j6ЩFzBrrө/~w!vpNP[FV (bp&eN2MGr: M:*sϩ9Uǩpfj1kI.ЍI5 H:qy^=><\~:NSp Lzyĝ 4TQAo߼CջIOUG8Q[@~9|S;8nBz JEEeId+b\RUU67W^3$$ ((S؍1c,_u|+h(?w5kTh?\AŦ" B x(%g)+?YCEFF]Z*t[a 4OESPܫr\+'K;q3fHQQ1o2 p3(C !=*` 55a4}qAAZ?~4v;;v {ڍY(޽{h鴟he޽(Jq~R4;v, ճcUAADRSS9pcǎ.g);Ν;o >e4g„ 2ּ`& ]Au0= ]f B' %V7).. B^T̲?>iii9AAhT-[F||톋5Ռc" VZZGf߾}Ϊ_ȫ  Ԓyt+V daA3h8;;+Vt4XfM/d B3h ^|Śi%Add BuAZ~++&@\ 7s_ aq\?aa&*6 J*F<;1hf/Wclُ2j:Ѷ:3kYVbIdBupD M?K'p5_qǕ4~}8<pWdHPQ~;)Hta/ͥa"("v퐳2%ߣvQq ]H &EI \.=<{"VyOl=+$3)n5S7xgL$dL@:]~-8IvA!FFSIdp#rƒq{=zM: i+ B`n"|~pmU `D=wa59!q;ps4`L0{?m$(pepBqL\NzE*J+lqdJJ-Y&F8IF2_eV:Q0LEלA1Ց4K m+:9%A VL^/뻯 *&!3EN(eHcE]7M\R#gУ F=9L~ !dVrȁѠ$Te"Y/mK.IT Zu91>83h߫{^9ޣS#] }a[ز[SB_W+(((` iʯcb05J˭l'6:CĭHT5H9O/a*~=F| V4!4rˍ蠦1P$g.A:|W%=n.e6B®wRjsY?kk-Rn#Pt?>8h`f|qUB U30y >gasX8c# tPbiƭ9oّ&plk:>>_r˭<sw}BRVVƒ%/1b(,y2_g,+TYXm1YQ؜XlN^TY؂+2I9OXd Ck7K"bNM\x[mNrH! hn/,u2U֓gC\C„ziAAۖq}B^y\Kxygwf%’*DŽrE8F"c(0[(ɫ$Rk† 2Ԉ,œYͩOj]%|8f!р `; !=}q9'lz 0J8߼}y[6~y z'& ÿ,?Z{ڵ2`Hǩj. wjZDMeD]5~xl"T2ŨM/IsϞњK i´[N/3W~<ʙȌ!@vBVn7=9"`s>FCYA0xhHs>y?D( |=/ۘȃtgRq~snޅ#kiݎ̿o':Rn~PXXKټ g0&.(ˆ aYt\9` r[* (ݍE0Í_J(7B|EM >//o69`SOדg /oHNĭ =ҥ`P,sYުȚ/ojO_HhF y^8nflUjՏt @BPt|@ $0:: @_x|@ E=X54„A',Ge GE06.KVᢼԊ$2ԈMvqU2^nv|s9yM[6''U DuP[vۇ$I8Ns),3少SH3dr)TVVeBg z'q몸l8R]B1BD\ q a8\!D>Ap* {BF]JV}B 61jH,g {?Mـz#dPDUٲPl|l?p;c,d>p:2g=S~ [< BgVADI^<Vn"(_@yD0ms  5~~$''YbcN6nڵ(//-O<Ɏ;xe{{Ch3W߻wovK0m2)+?~7|a.wMx,;0[HH>C裋D ZM3Iνɓ'1w|z[tee4mGb(~Af̘IQh!^D5$oЮ4 gfڴi/GkTtqnv֯_ԃߪo &aLoPRК vˢ-b1 "$ mϏg}Srw׹;p7#(ߩ#SGq0ƍ؊a] ӰaN70f:> c|h~UQ4.nxG%EKyG%? 6mD~}KKĻ\ ȣĀH(ۿg ޺SPt WU;$[zO#,Ɣ%1䛑[%M4m%.zBFAِD1fQ2%։ fe'SjrZn9X>\ێWܱ ؟իW3u:wh_EШI͇:D.˭Yn'{e0"X|R莰,0C8eqs;#'+4߹K"nX!yc)W$N Oq" m 1?+V@]JYV/~Gr[8Flc7JEL$zmD&dF7>PP QiqsHR=>8Ν¥( Vkxu읙HB9U,ECyn0%YSE,؋yx*'LyECEǤ|r%4J!<]x$$9!$<>7;h -2# q8e)Hщ-EI45Tiwu[$`WU2( R8>8g^S!(͵MX5f3۔ƽK$ojZswO ^Q`|0k (v\J?B%@{̑F_g}U"Uk&j35'g)1}jgҚ.Zhj2;I\`$E?}IuzYfx:'ѣ :ԇ9:4me:%_pGB\[EYX4_#!sd~-" BG1L̞=?V֭D0ZDVqMڇVLDA6$859(Skoé3tp;'RSSmݺ9c3z7R{l&livL+'j gN':/%4NR})_{Fl,LӦAb"ũ99p4l6@:rnXqw{6ϸMDznSfݙ|7Wy^NzwIJJfXQ/sn(ځ,>-,x==. eiァ.l۔w#)][ے2Yl5߿y>ν3aNԵo3r S7rgө96rL]v+vnǷ%eNk/~N nDz|ywA5dȐ:iǎAN7so?Ps;Ծ#?_6lo!!$M. 84[f%eN^$% rrr0!u NV $t6π`wiqqqٳf׿>v뭷w+2Gӓ4"z'wV|zʴPNU/\sM_t;?g5.Z4tV|ܹQXX}W^TT$LJ"y['-P^h;9.}_:k z">> m|1 TU0ӷkZS4iȑ#ٶm+SLi΄cʔ)l۶#G6pԻw\ANPhQYjRw}ܹsk>Vet{]Ik˜fU3^ɓٳ\Vk+h$.)))bF1thF =*Z$VV'bc4K/J믿ꫯ }4}N{LZZ洺bɢz$:iUUU>IU/51}zZ-.^ Z-.tW̏S}@ vr"ttMkto7xDf͚yl>{FcT%t,Mn{`k ZD0AhgRGK׸cUW/>\uUۑǶkLؾ};o&<  3W,ҙLu"'Goы~EQ={6_|vyU3ǎX,ztcUK΅C^u߅D0Ahgr^hj^X,,YuO>Ill,=;}/W+Ռ "ƍ.G߾}k}<ҧOzܶux B;sx6߰A}ًkגYs7ٻw8궽Ռ t=4}T@(?UUj˗økz={ |HxxX:Ԫ'nYNNwЄaGؼyb^W#k/ޔt4 \GSLaWkޝftt&Nԥl;W\.u[@vνfL8\")//VUUEpprTVVrwQXU/k͙poؙ6o|(K݆{,3͓aAdf_C;KEc(`&-X'l6 'ʕj +`PoZ=l;G*Dz2#YìA3zsNdwCyJyƯw_!ĘfoG S=6mRw^kq:e 궻AIyܛJܙ B Ѧ_z5NKK`q lN~xŜg@&u/iS7fBPo BxV6J&w K@S}㑹$k {mIufBCvQDS~ @jsJX@F=fBÇvD `w. @w4 ( ǀs's$ED0JJJd2t AUU>̙%i9Z'b N#%%Vdǎ>ʑ \" B+L4NZZZr"=f ނڵjU= D0V:th&[r$4bMvWZt[hj ׹C3Ah9snEQ| 85`LK0=~5v" B+WwI;rG֭[[9}p:{=x fꭠ8 )Wr*@b+GIZiL0NϿfAك7Py>[U(g^^bN BSҡ @76z&t˳j ;sbT! {NZFi{/>ȍPD~DYaEZ:CR\7Wb{؎k FŢCG)1Poq<0b{wHUM3Ah&gĺ-y]nr$\L8IG'~C+qNpák|tҡz5CAn8~V!5br B83X<(U+]MX=Byᅿp5Z5i.ロM6߇dsqoU!HBxQup].@IrP KB4"$8Fɳp`z'WÝ!^ 86*."xb*[dp)ޗolペ rIDAT$''?>OVzQQ1sa",kqZQdN4v Q9.ѐQ%ph RW ^kܳgaR`^?wgcz5-s%;\{-]B{m9/BwT%D06tcN6J<ԩSYb_l5؈H܇6?ЗG=VA. ]7G]ft_q2u) M aU0:HW/mK1ztbƙ<=+X%|AA;0f_HN}0EeJK=\ ߂y@ۄ#,.@}5s(Dv.eA0Zhtsf` F,B<>cYtNCfLdys.yo{ d]c{7p.>[i@φ14Ȣer>L2a`εab9Bj^-A\7v†>+ܙ @JUʣ[ȿ̔?9|RȢe*/9=R׼|#;@h}7RE[ #!{DCnzn1eK ?ЅDSgK}ԝ^A?lʡ#C;|S}Ďoׂ es߷HlуE$iLAhwZ ` n`X[b -#kuqVA""($+)e;)5y?ý 0G)|{ː84-"" LDD<,x 3IZ.kb?Bdo>S 3IZ'kI`!2ov)$ݻwOu$3mcw\v)M#-4-"bxxtww`K@\ܷQ' kx<44#--miдLDZss3pM]NN6Gf`?U+--D"sil*:2{ӿAɧOfvziFY̎{&""L ~DD$9gT|v?[nhۼ&""2S]fG={L46ʼnLeiİRRRBWW6*p8`q`8y$PZ[[ :aFcckZhѢEK.Fccav>o1q7cYYMMMTUU!""hjjlRix覑ʜٳg({I(AAALY1i,-HD}"""e<4hZDDq+b)IENDB`conduit-0.3.17/help/C/conduit.xml0000644000175000017500000006710111326117107013475 00000000000000 Conduit Synchronizer"> ]>

&appname; Manual &appname; is a program that synchronizes things 2007 John Stowers GNOME Documentation Project John Stowers Brent Gueth &appname; Manual &manrevision; 2008-01-03 This manual describes version &appversion; of &appname;
What is Conduit Conduit is a synchronization application for GNOME. It allows you to synchronize your files, photos, emails, contacts, notes, calendar data and any other type of personal information and synchronize that data with another computer, an online service, or even another electronic device. Conduit manages the synchronization and conversion of data into other formats. For example, Conduit allows you to; Synchronize your Tomboy notes with another computer Synchronize your PIM data to your mobile phone, iPod, Nokia Internet tablet, or between computers Upload photos to Flickr, Picasa, Smugmug, Shutterfly and your iPod, ... and many more Any combination you can imagine, Conduit will take care of the conversion and synchronization.
Use Cases Fred wants to sync his tomboy notes with Google notebook Joey wants to sync whatever is on his desktop to his backpack account Nellie wants to keep a directory on his laptop and his desktop in sync Paul wants to keep his evolution contacts in sync with his mobile phone Steve wants to keep his gnome preferences in sync between his two computers John wants to keep a directory of OpenOffice documents in sync with copies held on Google Docs Pete wants to have photos saved to his server to be pushed to an external back up (usb hard drive / off-site ftp)
Introduction Conduit's goals are to synchronize your data as seamlessly as possible, be it from remote device or remote websites. It is about extending your life as you see it needs to be, no longer constrained by data, devices or formats. Conduit enables you to take your data where you want when you want. All of your mobile devices could be synchronized automatically by Conduit. Home file back-ups to a remote server? Synced automatically. It may sometimes seem that Conduit is overly complicated, one of the design goals has always been to make the interface as simple and intuitive as possible. However Conduit is much more powerful then the simplistic design may lead on. This documentation will describe all the configuration options for groups and data providers, while the following gives some examples of items you may wish to synchronize; A GNOME user might store information in a wide variety of places on the desktop including; Evolution (email, calendar, address book) Tomboy (notes) Directories (important files) Photos Bookmarks (web and feeds) Music The user might also use one of the many popular online services including Delicious (bookmarks) Gmail (bookmarks, calendar, feeds, email, photos) Flickr (photos) They probably also own another electronic device such as A second laptop, also running GNOMEA mobile phone A Nokia 770/800 A Palm or Windows Mobile Pocket PC An iPod Its hard enough keeping your information organized when limited to the desktop, let alone the added burden of keeping your information in sync with any of the other services or devices listed above. Our goal for Conduit is to allow GNOME users to keep their information in sync. Irrespective of the type, irrespective of the way in which that information is stored. Conduit should just work.
Understanding the Conduit Interface
Introduction Conduit has a few basic concepts worth understanding before you begin. Knowing these concepts will help you discover things that you never knew you could keep in sync, for example, uploading photos right from your mobile phone to Picasa!
Conduit GUI The Parts of the Conduit GUI
shows the Conduit interface's four main components; The MenuThe file, edit and help menus store operations which apply to all groups. For more information on the contents of these menus, see below. The Data Provider Pane Located on the left hand side of the window, lists all of the data providers that are detected and ready for use on your system.Data providers are the source or destination of data you wish to sync. Please refer to the Data Provider section of the documentation to receive instructions on how to configure each data provider. The Canvas Pane Used to create groups of data providers to synchronize. Drag a data source to the left of the canvas pane and one or more data sinks to the right of the data pane to create a group. For more explanation on groups please check . The Conflicts Pane If you receive any conflict notifications while trying to run a sync job they will be listed here. For information on how to deal with possible conflicts please check the Conflicts and Resolutions section of the documentation.
The Menus
The File Menu File Save Saves all configured synchronization groups. Groups are saved automatically when you exit Conduit if you have selected Save Settings on Exit in File Synchronize All Synchronizes all groups at the same time. You can still run each sync group separately (see the Groups section), but this saves you the time of having to select and manually going through each group to start the sync process. File Quit Closes conduit. You will be prompted to stop any synchronization currently in progress.
The Edit Menu Edit Clear Canvas Removes all configurations, data providers, and groups from the canvas pane. This allows you start using the canvas as it was a clean slate. The best time to use this is when you are re-configuring a large portion of your sync groups. There is no quick way to revert back after selecting this setting. Edit Preferences Global Conduit settings that effect all of your sync groups and basic Conduit operations. For more information please see
The Help Menu Help Developers If you are developer, and interested in contributing to Conduit, then this option includes links to all the appropriate documentation. Help Contents Shows this help document. Help About Shows the version number and a list of Conduit developers.
The Preferences Window The Conduit preferences is accessed from the Edit menu. Any setting or change that you make within the preferences menu affect all of your sync groups and basic Conduit operations.
Configuration Tab The configuration tab is where all of Conduit's global settings are configured. There are six global settings: Save Settings on Exit Instructs Conduit that all configured dataproviders and groups should be saved when the application exits. Show Status Icon Shows a status icon in the notification area. This icon animates to indicate a sync is in progress. Minimize to Notification Area Instructs Conduit to minimize to the notification area instead of to the panel. Use Built in Web Browser When a data provider requires that you log onto a website, this option tells Conduit to use its own web browser to do so. When an Item Has Been Deleted Where There is a Two Way Conflict
Data Providers Tab This tab shows a list of the data providers that are currently installed.
Data Conversions Tab This tab lists the data conversions that Conduit is capable of performing.
Mapping DB This is a list of the UID that Conduit uses to maintain accurate sync data from different sources. Here you have the option to clear the mapping database.
The Web Login Window Sometimes you will be required to log into a website associated with certain data providers. The frequency at which you may have to log in is not determined by Conduit, but by the security policy of the respective data provider. For example, Box.net requires you to log in every time Conduit is run, whereas Flickr only requires you to log in once, to give permission to Conduit to upload photos. If you are required to log into a website, and you have selected the Use Built in Web Browser from the Conduit preferences, then a window will pop up like the one shown below.
Conduit Login Window The window shown when logging into data provider websites
Data Providers and Groups Conduit represents the things your want to synchronize graphically. When data providers get added to the canvas, they get arranged into so called groups. A group is a collection of data providers that share data. In the figure below you will see the following parts
Conduit Depicts Synchronizations Graphically Parts of a Synchronization Group
A data provider for synchronizing two way whose status indicates that it is ready to be synchronized. A group containing two folder dataproviders. The arrow has two ends, indicating that the two dataproviders will undergo a two way synchronization, that is data will flow in both directions, and both folders will contain the same information once the sync finishes. A second folder data provider. By convention, data providers that lie on the right side of groups are called data sinks. This is because during a one way sync, data can only flow into them. A Facebook and Picasa data provider for uploading images to those sites. Notice that that the group has three data providers, and the arrow has changed to indicate that data will flow in only one direction, that is images will be uploaded from F-Spot to Facebook and Picasa.
Synchronizing Something This section describes the steps required to synchronize two data providers. The example given illustrates how to synchronize two folders but the concepts are applicable to anything you wish to synchronize. If you need more information on specific settings please refer to the corresponding section of the documentation.
Introduction contains two groups. This section will describe the steps to recreate those groups. The top group depicts a two way synchronization of two folders The bottom group depicts a one way sync of images, from F-Spot to Facebook, and to the Picasa web albums.
Example 1: Synchronizing Two Folders The following steps will recreate the two way synchronization group shown as #1 in the figure above. On your desktop create three folders named folder1, folder2, and folder3. Drag a file of your choice into folder1. Start Conduit Add a data provider for folder1 From the data provider pane, drag the folder data provider and drop it on the left hand side of the canvas pane. This will be the data source that we are going to sync from. Configure folder1 Double click on the data provider you recently dropped on the canvas. This will bring up the folder configuration window as shown below. Enter something memorable in the name field and change the Folder Location to the folder you created in step 1.
Configuring Folder 1
Add a data provider for folder2 Drag another folder data provider from the pane on the left. This time drop it adjacent to the folder1 dataprovider. This should result in an arrow connecting it to folder1 being created. Configure folder2 Configure the data provider so that its Folder Location points to folder2 on the desktop, and importantly, its Folder Name is the same as that entered in step #4. Configure the synchronization parameters Right click on the associated group, and under sync options, select a two way sync. Since this is just a basic run through on how to setup a sync we are not going to go through any advanced syncing options in this section of the documentation. If you wish more information on the options available, please see . Synchronize the two folders by right clicking on them and selecting sync, or from the File menu. Once the sync is finished you should see the file that you placed in folder1 on your desktop within folder2.
Example 2: Exporting Images to Multiple Destinations The second group shown in shows a single F-Spot data source exporting its photos to two data sinks, a Facebook one, and a Picasa one. Start Conduit Start F-Spot Drag a F-Spot data provider from the data provider pane and drop it onto an empty spot on the canvas. A new group containing just the F-Spot data provider will be created. Drag Facebook and Picasa data providers into the Group that was just created. Configure the data providers by double clicking on them. Now synchronize the group to upload photos. You will be prompted to log into Facebook using the Conduit login window, shown in .
Summary All sync operations work exactly like this. The only difference is the data you are syncing and the providers you are using. You always follow the same sequence of steps, Add dataproviders to create a new group, or to an existing group. Configure the data providers. Each data provider requires a unique configuration. For reference on these please the Data Providers section of the documentation. Configure the group, selecting what should happen on conflict, etc. Synchronize the dataproviders as you wish.
Network Synchronization If you have two computers at home, Conduit can be used to synchronize the data between them, directly, without first having to store the data somewhere else first. The steps below will illustrate how to synchronize Tomboy notes on two computers, called nzjrs-desktop and nzjrs-laptop. The following key will be used to help explain the setup procedure. Image taken on the first computer. Image taken on the second computer. Network Synchronization Tip The process below, although describing Tomboy note synchronization, could be suitably modified to synchronize all sorts of data between two computers, including Contacts, Calendar information, and even F-Spot photos. On the first computer create a synchronization group connecting Tomboy to the Network dataprovider, which is listed in the Miscellaneous category in the dataprovider pane. This makes Tomboy available for synchronization on the second computer.
Configuration of the First Computer
After a short delay, this will result in a new category being created on the second computer. The category will take the name of the first computer, nzjrs-desktop in my case, and it shall contain any dataproviders currently available for synchronization. Still on the second computer, drag the Tomboy dataprovider from the newly created category onto the canvas. Notice how its name is Remote Tomboy, indicating it refers to data on the remote, or first, computer.
Configuration of the Second Computer
Finally, on the second computer, start the sync in the normal manner. Your tomboy notes should now be synchronized between the two computers.
File Synchronization Due to performance and security reasons, we do not recommend using the network sync feature to synchronize large files between two computers. We hope to address this limitation in the future.
conduit-0.3.17/help/el/0000777000175000017500000000000011326117107011603 500000000000000conduit-0.3.17/help/el/el.po0000644000175000017500000016505711326117107012475 00000000000000# translation of conduit-help.HEAD.po to Greek # Jennie Petoumenou , 2009. msgid "" msgstr "" "Project-Id-Version: conduit-help.HEAD\n" "POT-Creation-Date: 2009-01-30 03:59+0000\n" "PO-Revision-Date: 2009-02-03 14:20+0100\n" "Last-Translator: Jennie Petoumenou \n" "Language-Team: Greek \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" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: C/conduit.xml:122(None) msgid "@@image: 'figures/conduit-gui-parts.png'; md5=e7c7ebe8cac03bd0768e2de105155630" msgstr "@@image: 'figures/conduit-gui-parts.png'; md5=e7c7ebe8cac03bd0768e2de105155630" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: C/conduit.xml:214(None) msgid "@@image: 'figures/conduit-login.png'; md5=6e4fe96c2d518d23724e1a70a53fa026" msgstr "@@image: 'figures/conduit-login.png'; md5=6e4fe96c2d518d23724e1a70a53fa026" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: C/conduit.xml:233(None) msgid "@@image: 'figures/conduit-dp.png'; md5=ce99ba0bdc70c854b1f8a9999435e250" msgstr "@@image: 'figures/conduit-dp.png'; md5=ce99ba0bdc70c854b1f8a9999435e250" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: C/conduit.xml:279(None) msgid "@@image: 'figures/conduit-folder-configuration.png'; md5=ece672e8cf42e26947eee6e3fb5af7f9" msgstr "@@image: 'figures/conduit-folder-configuration.png'; md5=ece672e8cf42e26947eee6e3fb5af7f9" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: C/conduit.xml:345(None) msgid "@@image: 'figures/network-sync-pc1.png'; md5=118578724965f8af01b66ccdc7e39328" msgstr "@@image: 'figures/network-sync-pc1.png'; md5=118578724965f8af01b66ccdc7e39328" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: C/conduit.xml:358(None) msgid "@@image: 'figures/network-sync-pc2.png'; md5=565769e5f51b3decfebcfa18989ee391" msgstr "@@image: 'figures/network-sync-pc2.png'; md5=565769e5f51b3decfebcfa18989ee391" #: C/conduit.xml:14(title) msgid "Conduit Manual" msgstr "Τεκμηρίωση του Conduit" #: C/conduit.xml:16(para) msgid "Conduit is a program that synchronizes things" msgstr "Το Conduit είναι ένα πρόγραμμα συγχρονισμού με πολλαπλές δυνατότητες" #: C/conduit.xml:19(year) msgid "2007" msgstr "2007" #: C/conduit.xml:20(holder) msgid "John Stowers" msgstr "John Stowers" #: C/conduit.xml:23(publishername) msgid "GNOME Documentation Project" msgstr "Έργο τεκμηρίωσης GNOME" #: C/conduit.xml:28(firstname) msgid "John" msgstr "John" #: C/conduit.xml:29(surname) msgid "Stowers" msgstr "Stowers" #: C/conduit.xml:32(firstname) msgid "Brent" msgstr "Brent" #: C/conduit.xml:33(surname) msgid "Gueth" msgstr "Gueth" #: C/conduit.xml:39(revnumber) msgid "Conduit Manual 1.0" msgstr "Τεκμηρίωση Conduit 1.0" #: C/conduit.xml:40(date) msgid "2008-01-03" msgstr "03-01-2008" #: C/conduit.xml:44(releaseinfo) msgid "This manual describes version 1.0 of Conduit" msgstr "Αυτή η τεκμηρίωση καλύπτει την έκδοση 1.0 του Conduit." #: C/conduit.xml:48(title) msgid "What is Conduit" msgstr "Τι είναι το Conduit" #: C/conduit.xml:49(para) msgid "Conduit is a synchronization application for GNOME. It allows you to synchronize your files, photos, emails, contacts, notes, calendar data and any other type of personal information and synchronize that data with another computer, an online service, or even another electronic device. Conduit manages the synchronization and conversion of data into other formats. For example, Conduit allows you to;" msgstr "Το Conduit είναι μια εφαρμογή συγχρονισμού για το GNOME. Σας επιτρέπει να συγχρονίζετε αρχεία, φωτογραφίες, email, επαφές, σημειώσεις, το ημερολόγιό σας και οτιδήποτε άλλο επιθυμείτε. Συγχρονίζει δεδομένα με άλλους υπολογιστές, διαδικτυακές υπηρεσίες, ακόμη και άλλες ηλεκτρονικές συσκευές. Το Conduit αναλαμβάνει τόσο το συγχρονισμό όσο και την μετατροπή δεδομένων σε άλλες μορφές. Για παράδειγμα, το Conduit σας επιτρέπει να:" #: C/conduit.xml:53(para) msgid "Synchronize your Tomboy notes with another computer" msgstr "Συγχρονίσετε τις σημειώσεις σας στο Tomboy με άλλο υπολογιστή" #: C/conduit.xml:56(para) msgid "Synchronize your PIM data to your mobile phone, iPod, Nokia Internet tablet, or between computers" msgstr "Συγχρονίσετε δεδομένα PIM με το κινητό σας τηλέφωνο, το iPod σας, το Nokia Internet tablet σας, ή με άλλον υπολογιστή" #: C/conduit.xml:59(para) msgid "Upload photos to Flickr, Picasa, Smugmug, Shutterfly and your iPod," msgstr "Ανεβάσετε φωτογραφίες στα Flickr, Picasa, Smugmug, Shutterfly και στο iPod σας," #: C/conduit.xml:61(para) msgid "... and many more" msgstr "... και πολλά περισσότερα" #: C/conduit.xml:63(para) msgid "Any combination you can imagine, Conduit will take care of the conversion and synchronization." msgstr "Όποιο συνδυασμό κι αν σκέφτεστε, το Conduit θα αναλάβει τη μετατροπή και το συγχρονισμό του." #: C/conduit.xml:65(title) msgid "Use Cases" msgstr "Παραδείγματα χρήσης" #: C/conduit.xml:68(para) msgid "Fred wants to sync his tomboy notes with Google notebook" msgstr "Ο Φάνης θέλει να συγχρονίσει τις σημειώσεις του στο tomboy με το Google notebook" #: C/conduit.xml:71(para) msgid "Joey wants to sync whatever is on his desktop to his backpack account" msgstr "Ο Τάκης θέλει να συγχρονίσει την επιφάνεια εργασίας του με το λογαριασμό του στο backpack" #: C/conduit.xml:73(para) msgid "Nellie wants to keep a directory on his laptop and his desktop in sync" msgstr "H Νάντια θέλει να διατηρεί συγχρονισμένο έναν κατάλογο στο φορητό και τον επιτραπέζιο υπολογιστή της" #: C/conduit.xml:74(para) msgid "Paul wants to keep his evolution contacts in sync with his mobile phone" msgstr "Ο Παύλος θέλει να διατηρεί συγχρονισμένες τις επαφές του στο evolution και το κινητό του" #: C/conduit.xml:75(para) msgid "Steve wants to keep his gnome preferences in sync between his two computers" msgstr "Ο Στάθης θέλει να διατηρεί συγχρονισμένες τις προτιμήσεις του για το GNOME στους δύο υπολογιστές του" #: C/conduit.xml:77(para) msgid "John wants to keep a directory of OpenOffice documents in sync with copies held on Google Docs" msgstr "Ο Γιάννης θέλει να διατηρεί συγχρονισμένο έναν κατάλογο εγγράφων OpenOffice με τα αντίγραφά τους στο Google Docs" #: C/conduit.xml:79(para) msgid "Pete wants to have photos saved to his server to be pushed to an external back up (usb hard drive / off-site ftp)" msgstr "Ο Πέτρος θέλει να δημιουργήσει αντίγραφα ασφαλείας των φωτογραφιών που είναι αποθηκευμένες στον εξυπηρετητή του, σε εξωτερικό πόρο (σκληρό δίσκο usb / απομακρυσμένο ftp)" #: C/conduit.xml:83(title) C/conduit.xml:114(title) C/conduit.xml:254(title) msgid "Introduction" msgstr "Εισαγωγή" #: C/conduit.xml:84(para) msgid "Conduit's goals are to synchronize your data as seamlessly as possible, be it from remote device or remote websites. It is about extending your life as you see it needs to be, no longer constrained by data, devices or formats. Conduit enables you to take your data where you want when you want. All of your mobile devices could be synchronized automatically by Conduit. Home file back-ups to a remote server? Synced automatically." msgstr "Ο σκοπός του Conduit είναι να σας επιτρέπει να συγχρονίζετε τα δεδομένα σας όσο πιο ανώδυνα γίνεται, είτε βρίσκονται σε απομακρυσμένες συσκευές είτε σε απομακρυσμένες ιστοσελίδες. Σας επιτρέπει να ζείτε τη ζωή σας όπως θέλετε, χωρίς να ανησυχείτε για δεδομένα, συσκευές και τύπους αρχείων. Το Conduit σας επιτρέπει να έχετε τα αρχεία σας όπου τα θέλετε, όταν τα θέλετε. Μπορείτε να συγχρονίζετε όλες τις φορητές σας συσκευές αυτόματα, μέσω του Conduit. Μπορείτε, επίσης, να συγχρονίζετε αυτόματα τα αντίγραφα ασφαλείας σας σε απομακρυσμένους εξυπηρετητές." #: C/conduit.xml:85(para) msgid "It may sometimes seem that Conduit is overly complicated, one of the design goals has always been to make the interface as simple and intuitive as possible. However Conduit is much more powerful then the simplistic design may lead on. This documentation will describe all the configuration options for groups and data providers, while the following gives some examples of items you may wish to synchronize;" msgstr "Ίσως αυτά να σας φαίνονται υπερβολικά περίπλοκα. Ωστόσο, ένας από τους στόχους του Conduit είναι να παρέχει ένα όσο το δυνατόν πιο απλό και εύχρηστο περιβάλλον. Πίσω όμως από την απλουστευμένη σχεδίαση κρύβεται μεγάλη δύναμη. Αυτή η τεκμηρίωση περιγράφει όλες τις διαθέσιμες επιλογές για τη ρύθμιση ομάδων και παρόχων δεδομένων. Παρακάτω βλέπετε μερικά παραδείγματα για το τι θα μπορούσατε να συγχρονίσετε:" #: C/conduit.xml:88(para) msgid "A GNOME user might store information in a wide variety of places on the desktop including;" msgstr "Ένας χρήστης του GNOME έχει στη διάθεσή του διάφορες τοποθεσίες στην επιφάνεια εργασίας για την αποθήκευση δεδομένων. Μεταξύ άλλων:" #: C/conduit.xml:91(para) msgid "Evolution (email, calendar, address book)" msgstr "Evolution (email, ημερολόγιο, βιβλίο διευθύνσεων)" #: C/conduit.xml:95(para) msgid "Tomboy (notes)" msgstr "Tomboy (σημειώσεις)" #: C/conduit.xml:98(para) msgid "Directories (important files)" msgstr "Καταλόγους (σημαντικά αρχεία)" #: C/conduit.xml:99(para) msgid "Photos" msgstr "Φωτογραφίες" #: C/conduit.xml:100(para) msgid "Bookmarks (web and feeds)" msgstr "Σελιδοδείκτες (ιστοσελίδες και ροές)" #: C/conduit.xml:101(para) msgid "Music" msgstr "Μουσική" #: C/conduit.xml:104(para) msgid "Delicious (bookmarks)" msgstr "Delicious (σελιδοδείκτες)" #: C/conduit.xml:104(para) msgid "Gmail (bookmarks, calendar, feeds, email, photos)" msgstr "Gmail (σελιδοδείκτες, ημερολόγιο, ροές, email, φωτογραφίες)" #: C/conduit.xml:104(para) msgid "Flickr (photos)" msgstr "Flickr (φωτογραφίες)" #: C/conduit.xml:104(para) msgid "The user might also use one of the many popular online services including " msgstr "Ο ίδιος χρήστης μπορεί εξάλλου να χρησιμοποιεί μια από τις πολλές δημοφιλείς διαδικτυακές υπηρεσίες, όπως " #: C/conduit.xml:105(para) msgid "A second laptop, also running GNOME" msgstr "Δεύτερο φορητό υπολογιστή, που επίσης χρησιμοποιεί το GNOME" #: C/conduit.xml:105(para) msgid "A mobile phone" msgstr "Κινητό τηλέφωνο" #: C/conduit.xml:105(para) msgid "A Nokia 770/800" msgstr "Συσκευή Nokia 770/800" #: C/conduit.xml:105(para) msgid "A Palm or Windows Mobile Pocket PC" msgstr "Συσκευή Palm ή Windows Mobile Pocket PC" #: C/conduit.xml:105(para) msgid "An iPod" msgstr "iPod" #: C/conduit.xml:105(para) msgid "They probably also own another electronic device such as " msgstr "Ακόμη, μπορεί να διαθέτει και άλλες ηλεκτρονικές συσκευές, όπως " #: C/conduit.xml:107(para) msgid "Its hard enough keeping your information organized when limited to the desktop, let alone the added burden of keeping your information in sync with any of the other services or devices listed above." msgstr "Το να διατηρεί κανείς την επιφάνεια εργασίας του τακτοποιημένη είναι από μόνο του δύσκολο, πόσο μάλλον να πρέπει να κρατάει συγχρονισμένα τα δεδομένα του μεταξύ επιφάνειας εργασίας και κάποιας από τις παραπάνω υπηρεσίες ή συσκευές." #: C/conduit.xml:108(para) msgid "Our goal for Conduit is to allow GNOME users to keep their information in sync. Irrespective of the type, irrespective of the way in which that information is stored. Conduit should just work." msgstr "Ο στόχος μας είναι το Conduit να επιτρέψει στους χρήστες του GNOME να διατηρούν τις πληροφορίες τους συγχρονισμένες. Ανεξάρτητα από τον τύπο αρχείων ή το πού είναι αποθηκευμένες αυτές οι πληροφορίες, το Conduit πρέπει απλά να λειτουργεί." #: C/conduit.xml:112(title) msgid "Understanding the Conduit Interface" msgstr "Κατανοώντας το περιβάλλον του Conduit" #: C/conduit.xml:115(para) msgid "Conduit has a few basic concepts worth understanding before you begin. Knowing these concepts will help you discover things that you never knew you could keep in sync, for example, uploading photos right from your mobile phone to Picasa!" msgstr "Το Conduit περιλαμβάνει ορισμένα βασικά στοιχεία που καλό είναι να γνωρίζει κανείς πριν ξεκινήσει. Κατανοώντας τα, μπορεί να ανακαλύψετε πράγματα που δεν είχατε φανταστεί ποτέ σας, όπως π.χ. ότι μπορείτε να ανεβάσετε φωτογραφίες από το τηλέφωνό σας κατευθείαν στο Picasa!" #: C/conduit.xml:118(title) msgid "Conduit GUI" msgstr "Γραφικό περιβάλλον Conduit" #: C/conduit.xml:125(para) msgid "The Parts of the Conduit GUI" msgstr "Συστατικά του γραφικού περιβάλλοντος του Conduit" #: C/conduit.xml:131(para) msgid " shows the Conduit interface's four main components;" msgstr "Στο εμφανίζονται τα τέσσερα βασικά στοιχεία του Conduit:" #: C/conduit.xml:133(para) msgid "The file, edit and help menus store operations which apply to all groups. For more information on the contents of these menus, see below." msgstr "Τα μενού Αρχείο, Επεξεργασία και Βοήθεια περιλαμβάνουν εργασίες που αφορούν όλες τις ομάδες. Για περισσότερες πληροφορίες σχετικά με τα περιεχόμενα των μενού, δείτε παρακάτω." #: C/conduit.xml:133(para) msgid "The Menu" msgstr "Μενού " #: C/conduit.xml:134(para) msgid "Located on the left hand side of the window, lists all of the data providers that are detected and ready for use on your system." msgstr "Βρίσκεται στην αριστερή πλευρά του παραθύρου και αναφέρει όλους τους παρόχους δεδομένων που εντοπίστηκαν στον υπολογιστή σας και είναι έτοιμοι προς χρήση." #: C/conduit.xml:134(para) msgid "Data providers are the source or destination of data you wish to sync. Please refer to the Data Provider section of the documentation to receive instructions on how to configure each data provider." msgstr "Οι πάροχοι δεδομένων αποτελούν την πηγή ή τον προορισμό των δεδομένων που επιθυμείτε να συγχρονίσετε. Παρακαλώ, δείτε το κεφάλαιο Πάροχοι δεδομένων της τεκμηρίωσης για οδηγίες σχετικά με τη ρύθμιση μεμονωμένων παρόχων." #: C/conduit.xml:134(para) msgid "The Data Provider Pane " msgstr "Πλαίσιο παρόχων δεδομένων " #: C/conduit.xml:135(para) msgid "Used to create groups of data providers to synchronize. Drag a data source to the left of the canvas pane and one or more data sinks to the right of the data pane to create a group. For more explanation on groups please check ." msgstr "Χρησιμοποιείται για τη δημιουργία ομάδων παρόχων δεδομένων προς συγχρονισμό. Σύρετε μία πηγή δεδομένων στα αριστερά του πίνακα και έναν ή περισσότερους προορισμούς δεδομένων στα δεξιά του πίνακα για να δημιουργήσετε μία ομάδα. Για περισσότερες λεπτομέρειες σχετικά με τις ομάδες, παρακαλώ δείτε το " #: C/conduit.xml:135(para) msgid "The Canvas Pane " msgstr "Πίνακας εργασιών" #: C/conduit.xml:136(para) msgid "If you receive any conflict notifications while trying to run a sync job they will be listed here. For information on how to deal with possible conflicts please check the Conflicts and Resolutions section of the documentation." msgstr "Αν λάβετε ειδοποιήσεις για συγκρούσεις κατά τη διάρκεια του συγχρονισμού, θα εμφανιστούν εδώ. Για πληροφορίες σχετικά με την αντιμετώπιση πιθανών συγκρούσεων, παρακαλώ, ανατρέξτε στο κεφάλαιο Συγκρούσεις και επίλυσή τους." #: C/conduit.xml:136(para) msgid "The Conflicts Pane " msgstr "Πλαίσιο συγκρούσεων " #: C/conduit.xml:140(title) msgid "The Menus" msgstr "Μενού" #: C/conduit.xml:142(title) msgid "The File Menu" msgstr "Αρχείο" #: C/conduit.xml:144(para) msgid "FileSave Saves all configured synchronization groups. Groups are saved automatically when you exit Conduit if you have selected Save Settings on Exit in " msgstr "ΑρχείοΑποθήκευση Αποθηκεύει όλες τις ομάδες συγχρονισμού που έχουν ρυθμιστεί. Οι ομάδες αποθηκεύονται αυτόματα κατά την έξοδο από το Conduit αν έχετε επιλέξει Αποθήκευση ρυθμίσεων κατά την έξοδο στο " #: C/conduit.xml:145(para) msgid "FileSynchronize All Synchronizes all groups at the same time. You can still run each sync group separately (see the Groups section), but this saves you the time of having to select and manually going through each group to start the sync process." msgstr "ΑρχείοΣυγχρονισμός όλων Συγχρονισμός όλων των ομάδων ταυτόχρονα. Μπορείτε βέβαια να συγχρονίζετε κάθε ομάδα ξεχωριστά (δείτε το κεφάλαιο Ομάδες), αλλά έτσι εξοικονομείτε χρόνο, γιατί δεν χρειάζεται να επιλέξετε κάθε μία ομάδα ξεχωριστά για να ξεκινήσετε το συγχρονισμό." #: C/conduit.xml:146(para) msgid "FileQuit Closes conduit. You will be prompted to stop any synchronization currently in progress." msgstr "ΑρχείοΈξοδος Κλείνει το Conduit. Θα εμφανιστεί διάλογος που θα σας ζητά να διακόψετε τις τρέχουσες εργασίες συγχρονισμού." #: C/conduit.xml:150(title) msgid "The Edit Menu" msgstr "Επεξεργασία" #: C/conduit.xml:152(para) msgid "EditClear Canvas Removes all configurations, data providers, and groups from the canvas pane. This allows you start using the canvas as it was a clean slate. The best time to use this is when you are re-configuring a large portion of your sync groups. There is no quick way to revert back after selecting this setting." msgstr "ΕπεξεργασίαΕκκαθάριση πίνακα Αφαιρεί όλες τις ρυθμίσεις, τους παρόχους δεδομένων και τις ομάδες από τον πίνακα εργασιών. Έτσι, μπορείτε να ξεκινήσετε και πάλι από την αρχή. Η καλύτερη στιγμή για αυτή την επιλογή είναι όταν αλλάζετε τις ρυθμίσεις για μεγάλη μερίδα των ομάδων σας. Δεν υπάρχει εύκολος τρόπος να επανέλθετε στις προηγούμενες ρυθμίσεις σας αν κάνετε εκκαθάριση." #: C/conduit.xml:153(para) msgid "EditPreferences Global Conduit settings that effect all of your sync groups and basic Conduit operations. For more information please see " msgstr "ΕπεξεργασίαΠροτιμήσεις Γενικές ρυθμίσεις του Conduit που ισχύουν για όλες τις ομάδες και για όλες τις εργασίες του Conduit. Για περισσότερες πληροφορίες, δείτε " #: C/conduit.xml:157(title) msgid "The Help Menu" msgstr "Βοήθεια" #: C/conduit.xml:159(para) msgid "HelpDevelopers If you are developer, and interested in contributing to Conduit, then this option includes links to all the appropriate documentation." msgstr "ΒοήθειαDevelopers Αν είστε προγραμματιστής, και ενδιαφέρεστε να συνεισφέρετε στο Conduit, εδώ θα βρείτε συνδέσμους προς τη σχετική τεκμηρίωση." #: C/conduit.xml:160(para) msgid "HelpContents Shows this help document." msgstr "ΒοήθειαΠεριεχόμενα Εμφανίζει αυτή τη βοήθεια." #: C/conduit.xml:161(para) msgid "HelpAbout Shows the version number and a list of Conduit developers." msgstr "ΒοήθειαΠερίΕμφανίζει τον αριθμό της έκδοσης και τη λίστα με τους δημιουργούς του Conduit." #: C/conduit.xml:166(title) msgid "The Preferences Window" msgstr "Παράθυρο προτιμήσεων" #: C/conduit.xml:167(para) msgid "The Conduit preferences is accessed from the Edit menu. Any setting or change that you make within the preferences menu affect all of your sync groups and basic Conduit operations." msgstr "Οι προτιμήσεις του Conduit βρίσκονται στο μενού Επεξεργασία. Οι αλλαγές που κάνετε στις προτιμήσεις αυτές εφαρμόζονται σε όλες τις ομάδες και τις εργασίες του Conduit." #: C/conduit.xml:169(title) msgid "Configuration Tab" msgstr "Ταμπέλα ρύθμισης" #: C/conduit.xml:170(para) msgid "The configuration tab is where all of Conduit's global settings are configured. There are six global settings:" msgstr "Από την ταμπέλα ρύθμισης μπορείτε να τροποποιήσετε όλες τις γενικές ρυθμίσεις του Conduit. Υπάρχουν έξι γενικές ρυθμίσεις:" #: C/conduit.xml:173(guilabel) msgid "Save Settings on Exit" msgstr "Αποθήκευση ρυθμίσεων κατά την έξοδο" #: C/conduit.xml:174(para) msgid "Instructs Conduit that all configured dataproviders and groups should be saved when the application exits." msgstr "Ζητά από το Conduit να αποθηκεύει κάθε πάροχο δεδομένων και ομάδα για τα οποία έχει γίνει ρύθμιση κατά την έξοδο από την εφαρμογή." #: C/conduit.xml:177(guilabel) msgid "Show Status Icon" msgstr "Εμφάνιση εικονιδίου κατάστασης στην περιοχή ειδοποιήσεων" #: C/conduit.xml:178(para) msgid "Shows a status icon in the notification area. This icon animates to indicate a sync is in progress." msgstr "Εμφανίζει εικονίδιο κατάστασης στην περιοχή ειδοποιήσεων. Όταν γίνεται συγχρονισμός εμφανίζεται ειδικό κινούμενο εικονίδιο." #: C/conduit.xml:181(guilabel) msgid "Minimize to Notification Area" msgstr "Ελαχιστοποίηση στην περιοχή ειδοποιήσεων" #: C/conduit.xml:182(para) msgid "Instructs Conduit to minimize to the notification area instead of to the panel." msgstr "Αναγκάζει το Conduit να ελαχιστοποιείται στην περιοχή ειδοποιήσεων αντί για τον πίνακα εφαρμογών." #: C/conduit.xml:185(guilabel) msgid "Use Built in Web Browser" msgstr "Χρήση ενσωματωμένου περιηγητή διαδικτύου" #: C/conduit.xml:186(para) msgid "When a data provider requires that you log onto a website, this option tells Conduit to use its own web browser to do so." msgstr "Όταν ένας πάροχος απαιτεί να κάνετε είσοδο στην ιστοσελίδα του με τα στοιχεία του λογαριασμού σας, αυτή η επιλογή ζητάει από το Conduit να χρησιμοποιήσει το δικό του περιηγητή διαδικτύου." #: C/conduit.xml:188(guilabel) msgid "When an Item Has Been Deleted" msgstr "Όταν ένα αντικείμενο έχει διαγραφεί" #: C/conduit.xml:189(guilabel) msgid "Where There is a Two Way Conflict" msgstr "Όταν υπάρχει αμφίδρομη σύγκρουση" #: C/conduit.xml:193(title) msgid "Data Providers Tab" msgstr "Ταμπέλα παρόχων δεδομένων" #: C/conduit.xml:194(para) msgid "This tab shows a list of the data providers that are currently installed." msgstr "Αυτή η ταμπέλα εμφανίζει λίστα με τους εγκατεστημένους παρόχους δεδομένων" #: C/conduit.xml:197(title) msgid "Data Conversions Tab" msgstr "Ταμπέλα μετατροπών δεδομένων" #: C/conduit.xml:198(para) msgid "This tab lists the data conversions that Conduit is capable of performing." msgstr "Αυτή η ταμπέλα παραθέτει τις μετατροπές δεδομένων που μπορεί να κάνει το Conduit." #: C/conduit.xml:201(title) msgid "Mapping DB" msgstr "Ταμπέλα βάσης συσχετισμών" #: C/conduit.xml:202(para) msgid "This is a list of the UID that Conduit uses to maintain accurate sync data from different sources. Here you have the option to clear the mapping database." msgstr "Πρόκειται για μία λίστα των UID που χρησιμοποιεί το Conduit για να διατηρεί αξιόπιστα δεδομένα συγχρονισμού από τις διάφορες πηγές. Εδώ, σας δίνεται η επιλογή να καθαρίσετε τη βάση συσχετισμών." #: C/conduit.xml:206(title) msgid "The Web Login Window" msgstr "Παράθυρο εισόδου" #: C/conduit.xml:207(para) msgid "Sometimes you will be required to log into a website associated with certain data providers. The frequency at which you may have to log in is not determined by Conduit, but by the security policy of the respective data provider. For example, Box.net requires you to log in every time Conduit is run, whereas Flickr only requires you to log in once, to give permission to Conduit to upload photos. If you are required to log into a website, and you have selected the Use Built in Web Browser from the Conduit preferences, then a window will pop up like the one shown below." msgstr "" "Ορισμένοι πάροχοι δεδομένων απαιτούν να κάνετε είσοδο στην ιστοσελίδα τους με τα στοιχεία του λογαριασμού σας. Το πόσο συχνά συμβαίνει αυτό δεν εξαρτάται από το Conduit, αλλά από την πολιτική ασφαλείας του κάθε παρόχου. Για παράδειγμα, το Box.net απαιτεί είσοδο κάθε φορά που τρέχετε το Conduit, ενώ στο Flickr θα πρέπει να γίνει είσοδος μόνο μία φορά, για να δώσετε στο Conduit το δικαίωμα να ανεβάζει φωτογραφίες. Αν μία ιστοσελίδα απαιτεί είσοδο, και έχετε επιλέξει Χρήση ενσωματωμένου περιηγητή διαδικτύου στις προτιμήσεις του Conduit, θα εμφανιστεί ένα παράθυρο όπως " "το παρακάτω." #: C/conduit.xml:210(title) msgid "Conduit Login Window" msgstr "Παράθυρο εισόδου Conduit" #: C/conduit.xml:217(para) msgid "The window shown when logging into data provider websites" msgstr "Το παράθυρο που εμφανίζεται όταν απαιτείται είσοδος σε ιστοσελίδες παρόχων δεδομένων" #: C/conduit.xml:225(title) msgid "Data Providers and Groups" msgstr "Πάροχοι δεδομένων και ομάδες" #: C/conduit.xml:226(para) msgid "Conduit represents the things your want to synchronize graphically. When data providers get added to the canvas, they get arranged into so called groups. A group is a collection of data providers that share data. In the figure below you will see the following parts" msgstr "Το Conduit αναπαριστά γραφικώς τα αντικείμενα που μπορούν να συγχρονιστούν. Όταν προστίθενται πάροχοι στον πίνακα εργασιών, τοποθετούνται σε \"ομάδες\". Μια ομάδα περιλαμβάνει έναν αριθμό παρόχων δεδομένων που μοιράζονται δεδομένα μεταξύ τους. Στην παρακάτω εικόνα βλέπετε τα ακόλουθα" #: C/conduit.xml:229(title) msgid "Conduit Depicts Synchronizations Graphically" msgstr "Το Conduit αναπαριστά τις εργασίες συγχρονισμού γραφικά" #: C/conduit.xml:236(para) msgid "Parts of a Synchronization Group" msgstr "Συστατικά ομάδων συγχρονισμού" #: C/conduit.xml:243(para) msgid "A data provider for synchronizing two way whose status indicates that it is ready to be synchronized." msgstr "Πάροχος δεδομένων που επιτρέπει αμφίδρομο συγχρονισμό και είναι έτοιμος για συγχρονισμό." #: C/conduit.xml:244(para) msgid "A group containing two folder dataproviders. The arrow has two ends, indicating that the two dataproviders will undergo a two way synchronization, that is data will flow in both directions, and both folders will contain the same information once the sync finishes." msgstr "Ομάδα που περιλαμβάνει δύο φακέλους ως παρόχους δεδομένων. Το βέλος καταλήγει σε δύο προορισμούς, έναν για κάθε πάροχο δεδομένων για τον οποίο θα γίνει αμφίδρομος συγχρονισμός (δηλαδή θα ανταλλαγούν δεδομένα και προς τις δύο κατευθύνσεις), έτσι ώστε μετά την ολοκλήρωση του συγχρονισμού οι δύο φάκελοι να περιέχουν τις ίδιες πληροφορίες." #: C/conduit.xml:245(para) msgid "A second folder data provider. By convention, data providers that lie on the right side of groups are called data sinks. This is because during a one way sync, data can only flow into them." msgstr "Ένας δεύτερος φάκελος που λειτουργεί ως πάροχος δεδομένων. Κατά σύμβαση, οι πάροχοι δεδομένων που εμφανίζονται στη δεξιά πλευρά ονομάζονται ταμιευτήρες δεδομένων. Και αυτό γιατί, σε περίπτωση μονόδρομου συγχρονισμού, μπορούν μόνο να παραλαμβάνουν δεδομένα." #: C/conduit.xml:246(para) msgid "A Facebook and Picasa data provider for uploading images to those sites. Notice that that the group has three data providers, and the arrow has changed to indicate that data will flow in only one direction, that is images will be uploaded from F-Spot to Facebook and Picasa." msgstr "Το Facebook και το Picasa ως πάροχοι δεδομένων για το ανέβασμα φωτογραφιών στις αντίστοιχες ιστοσελίδες. Σημειώστε ότι η ομάδα περιέχει τρεις παρόχους δεδομένων και ότι το βέλος έχει αλλάξει, για να επισημάνει ότι τα δεδομένα θα κινούνται μόνο προς μία κατεύθυνση (δηλαδή οι εικόνες του F-Spot θα ανεβαίνουν στο Facebook και το Picasa)." #: C/conduit.xml:251(title) msgid "Synchronizing Something" msgstr "Συγχρονισμός" #: C/conduit.xml:252(para) msgid "This section describes the steps required to synchronize two data providers. The example given illustrates how to synchronize two folders but the concepts are applicable to anything you wish to synchronize. If you need more information on specific settings please refer to the corresponding section of the documentation." msgstr "Σε αυτό το κεφάλαιο περιγράφονται τα βήματα που απαιτούνται για το συγχρονισμό δύο παρόχων δεδομένων. Το παράδειγμα αναφέρεται στο συγχρονισμό δύο φακέλων, αλλά τα ίδια ισχύουν και για οποιονδήποτε άλλο συγχρονισμό. Αν χρειάζεστε περισσότερες πληροφορίες για συγκεκριμένες ρυθμίσεις, παρακαλώ, ανατρέξτε στο αντίστοιχο κεφάλαιο της τεκμηρίωσης. " #: C/conduit.xml:255(para) msgid " contains two groups. This section will describe the steps to recreate those groups." msgstr "Το περιλαμβάνει δύο ομάδες. Αυτό το κεφάλαιο περιγράφει τα βήματα που απαιτούνται για τη δημιουργία αυτών των ομάδων." #: C/conduit.xml:257(para) msgid "The top group depicts a two way synchronization of two folders" msgstr "Η πάνω ομάδα αφορά τον αμφίδρομο συγχρονισμό δύο φακέλων" #: C/conduit.xml:258(para) msgid "The bottom group depicts a one way sync of images, from F-Spot to Facebook, and to the Picasa web albums." msgstr "Η κάτω ομάδα αφορά έναν μονόδρομο συγχρονισμό εικόνων, από το F-Spot σε διαδικτυακά άλμπουμ στο Facebook και το Picasa." #: C/conduit.xml:262(title) msgid "Example 1: Synchronizing Two Folders" msgstr "Παράδειγμα 1: Συγχρονισμός δύο φακέλων" #: C/conduit.xml:263(para) msgid "The following steps will recreate the two way synchronization group shown as #1 in the figure above." msgstr "Τα παρακάτω βήματα απαιτούνται για τη δημιουργία της ομάδας αμφίδρομου συγχρονισμού που εμφανίζεται ως 1 στην παραπάνω εικόνα." #: C/conduit.xml:265(para) msgid "On your desktop create three folders named folder1, folder2, and folder3. Drag a file of your choice into folder1." msgstr "Στην επιφάνεια εργασίας σας, δημιουργήστε τρεις φακέλους με ονόματα φάκελος1, φάκελος2, φάκελος3. Σύρετε ένα αρχείο στο φάκελος1." #: C/conduit.xml:266(para) C/conduit.xml:305(para) msgid "Start Conduit" msgstr "Εκκινήστε το Conduit" #: C/conduit.xml:268(para) msgid "Add a data provider for folder1" msgstr "Προσθέστε πάροχο δεδομένων για το φάκελος1" #: C/conduit.xml:269(para) msgid "From the data provider pane, drag the folder data provider and drop it on the left hand side of the canvas pane. This will be the data source that we are going to sync from." msgstr "Από το πλαίσιο των παρόχων δεδομένων, σύρετε τον πάροχο δεδομένων Φάκελος και τοποθετήστε τον στην αριστερή πλευρά του πίνακα εργασιών. Αυτή θα είναι η πηγή δεδομένων από την οποία θα γίνει ο συγχρονισμός." #: C/conduit.xml:272(para) msgid "Configure folder1" msgstr "Ρυθμίστε το φάκελος1" #: C/conduit.xml:275(title) msgid "Configuring Folder 1" msgstr "Ρύθμιση του φακέλου 1" #: C/conduit.xml:273(para) msgid "Double click on the data provider you recently dropped on the canvas. This will bring up the folder configuration window as shown below. Enter something memorable in the name field and change the Folder Location to the folder you created in step 1. " msgstr "Κάντε διπλό κλικ πάνω στον πάροχο δεδομένων που μόλις τοποθετήσατε στον πίνακα εργασιών. Έτσι θα εμφανιστεί το παράθυρο ρύθμισης του φακέλου, όπως φαίνεται παρακάτω. Επιλέξτε ένα όνομα που θα μπορείτε να θυμηθείτε εύκολα και στο Τοποθεσία φακέλου επιλέξτε το φάκελο που δημιουργήσατε στο βήμα 1. " #: C/conduit.xml:287(para) msgid "Add a data provider for folder2" msgstr "Προσθέστε πάροχο δεδομένων για το φάκελος2" #: C/conduit.xml:288(para) msgid "Drag another folder data provider from the pane on the left. This time drop it adjacent to the folder1 dataprovider. This should result in an arrow connecting it to folder1 being created." msgstr "Σύρετε και πάλι τον πάροχο δεδομένων από το αριστερό πλαίσιο. Αυτή τη φορά τοποθετήστε τον δίπλα στον πάροχο φάκελος1. Θα εμφανιστεί ένα βέλος που θα συνδέει τους δύο φακέλους." #: C/conduit.xml:291(para) msgid "Configure folder2" msgstr "Ρυθμίστε το φάκελος2" #: C/conduit.xml:292(para) msgid "Configure the data provider so that its Folder Location points to folder2 on the desktop, and importantly, its Folder Name is the same as that entered in step #4." msgstr "Ρυθμίστε τον πάροχο δεδομένων έτσι ώστε η Τοποθεσία φακέλου να είναι το φάκελος2 στην επιφάνεια εργασίας. Προσοχή, το πιο σημαντικό είναι ότι το Όνομα φακέλου πρέπει να είναι το ίδιο με αυτό που είχατε εισάγει στο βήμα 4." #: C/conduit.xml:295(para) msgid "Configure the synchronization parameters" msgstr "Ρυθμίστε τις παραμέτρους συγχρονισμού" #: C/conduit.xml:296(para) msgid "Right click on the associated group, and under sync options, select a two way sync. Since this is just a basic run through on how to setup a sync we are not going to go through any advanced syncing options in this section of the documentation. If you wish more information on the options available, please see ." msgstr "Κάντε δεξί κλικ στην ομάδα και επιλέξτε αμφίδρομος συγχρονισμός στις επιλογές συγχρονισμού. Επειδή εδώ περιγράφεται η βασική διαδικασία συγχρονισμού, δεν θα περιγράψουμε σε αυτό το κεφάλαιο τις προχωρημένες επιλογές συγχρονισμού. Αν χρειάζεστε περισσότερες πληροφορίες για τις διαθέσιμες επιλογές, δείτε το ." #: C/conduit.xml:298(para) msgid "Synchronize the two folders by right clicking on them and selecting sync, or from the File menu. Once the sync is finished you should see the file that you placed in folder1 on your desktop within folder2." msgstr "Συγχρονίστε τους δύο φακέλους είτε κάνοντας δεξί κλικ πάνω τους και επιλέγοντας Συγχρονισμός, είτε από το μενού Αρχείο. Όταν ολοκληρωθεί ο συγχρονισμός, το αρχείο που είχατε προσθέσει στο φάκελος1 στην επιφάνεια εργασίας σας θα βρίσκεται στο φάκελος2." #: C/conduit.xml:302(title) msgid "Example 2: Exporting Images to Multiple Destinations" msgstr "Παράδειγμα 2: Εξαγωγή εικόνων προς πολλαπλούς προορισμούς" #: C/conduit.xml:303(para) msgid "The second group shown in shows a single F-Spot data source exporting its photos to two data sinks, a Facebook one, and a Picasa one." msgstr "Η δεύτερη ομάδα στο δείχνει μία πηγή δεδομένων F-Spot να εξάγει δεδομένα προς δύο ταμιευτήρες δεδομένων, ένα στο Facebook και ένα στο Picasa." #: C/conduit.xml:306(para) msgid "Start F-Spot" msgstr "Εκκινήστε το F-Spot" #: C/conduit.xml:307(para) msgid "Drag a F-Spot data provider from the data provider pane and drop it onto an empty spot on the canvas. A new group containing just the F-Spot data provider will be created." msgstr "Σύρετε τον πάροχο δεδομένων F-Spot από το πλαίσιο παρόχων δεδομένων σε ένα κενό σημείο στον πίνακα εργασιών. Θα δημιουργηθεί μία νέα ομάδα που θα περιέχει μόνο τον πάροχο δεδομένων F-Spot." #: C/conduit.xml:308(para) msgid "Drag Facebook and Picasa data providers into the Group that was just created." msgstr "Σύρετε τους παρόχους δεδομένων Facebook και Picasa στην ομάδα που μόλις δημιουργήσατε." #: C/conduit.xml:309(para) msgid "Configure the data providers by double clicking on them." msgstr "Ρυθμίστε τους παρόχους δεδομένων κάνοντας διπλό κλικ πάνω τους." #: C/conduit.xml:310(para) msgid "Now synchronize the group to upload photos. You will be prompted to log into Facebook using the Conduit login window, shown in ." msgstr "Τώρα, συγχρονίστε την ομάδα για να ανεβάσετε τις φωτογραφίες σας. Θα εμφανιστεί το παράθυρο εισόδου του Conduit που θα σας ζητήσει να κάνετε είσοδο στο Facebook, όπως φαίνεται στο ." #: C/conduit.xml:314(title) msgid "Summary" msgstr "Περίληψη" #: C/conduit.xml:315(para) msgid "All sync operations work exactly like this. The only difference is the data you are syncing and the providers you are using. You always follow the same sequence of steps," msgstr "Όλες οι εργασίες συγχρονισμού γίνονται κατά τον ίδιο ακριβώς τρόπο. Το μόνο που διαφέρει είναι τα δεδομένα που συγχρονίζονται και οι χρησιμοποιούμενοι πάροχοι. Τα βήματα που απαιτούνται είναι πάντα τα ίδια." #: C/conduit.xml:317(para) msgid "Add dataproviders to create a new group, or to an existing group." msgstr "Προσθήκη παρόχων δεδομένων και δημιουργία νέας ομάδας, ή προσθήκη σε υπάρχουσα ομάδα." #: C/conduit.xml:318(para) msgid "Configure the data providers. Each data provider requires a unique configuration. For reference on these please the Data Providers section of the documentation." msgstr "Ρύθμιση των παρόχων δεδομένων. Κάθε πάροχος δεδομένων απαιτεί ειδική ρύθμιση. Για περισσότερες πληροφορίες ανατρέξτε στο κεφάλαιο Πάροχοι δεδομένων της τεκμηρίωσης." #: C/conduit.xml:319(para) msgid "Configure the group, selecting what should happen on conflict, etc." msgstr "Ρύθμιση της ομάδας: επιλογές σε περίπτωση συγκρούσεων, κτλ." #: C/conduit.xml:320(para) msgid "Synchronize the dataproviders as you wish." msgstr "Συγχρονισμός των παρόχων δεδομένων κατά προαίρεση." #: C/conduit.xml:325(title) msgid "Network Synchronization" msgstr "Συγχρονισμός δικτύου" #: C/conduit.xml:326(para) msgid "If you have two computers at home, Conduit can be used to synchronize the data between them, directly, without first having to store the data somewhere else first. The steps below will illustrate how to synchronize Tomboy notes on two computers, called nzjrs-desktop and nzjrs-laptop. The following key will be used to help explain the setup procedure." msgstr "Αν έχετε δύο υπολογιστές στο σπίτι σας, μπορείτε να χρησιμοποιήσετε το Conduit για να συγχρονίσετε τα δεδομένα τους απευθείας, χωρίς να χρειαστεί να αποθηκεύσετε κάπου αλλού τα δεδομένα. Τα παρακάτω βήματα περιγράφουν πώς μπορείτε να συγχρονίσετε τις σημειώσεις του Tomboy μεταξύ δύο υπολογιστών, του αβγ-επιτραπέζιος και του αβγ-φορητός. Για την περιγραφή της διαδικασίας θα χρησιμοποιηθούν τα παρακάτω." #: C/conduit.xml:329(para) msgid " Image taken on the first computer." msgstr " Εικόνα από τον πρώτο υπολογιστή. " #: C/conduit.xml:330(para) msgid " Image taken on the second computer." msgstr " Εικόνα από το δεύτερο υπολογιστή. " #: C/conduit.xml:335(title) msgid "Network Synchronization Tip" msgstr "Συμβουλή για το συγχρονισμό δικτύου" #: C/conduit.xml:336(para) msgid "The process below, although describing Tomboy note synchronization, could be suitably modified to synchronize all sorts of data between two computers, including Contacts, Calendar information, and even F-Spot photos." msgstr "Η παρακάτω διαδικασία ναι μεν αναφέρεται στο συγχρονισμό σημειώσεων στο Tomboy, αλλά μπορεί να τροποποιηθεί για να επιτρέπει το συγχρονισμό πολλών ειδών δεδομένων μεταξύ δύο υπολογιστών, π.χ. επαφών, ημερολογίου, ακόμη και φωτογραφιών στο F-Spot." #: C/conduit.xml:341(title) msgid "Configuration of the First Computer" msgstr "Ρύθμιση του πρώτου υπολογιστή" #: C/conduit.xml:339(para) msgid "On the first computer create a synchronization group connecting Tomboy to the Network dataprovider, which is listed in the Miscellaneous category in the dataprovider pane. This makes Tomboy available for synchronization on the second computer. " msgstr "Στον πρώτο υπολογιστή δημιουργήστε μία ομάδα συγχρονισμού που θα συνδέει το Tomboy με τον πάροχο δεδομένων Δίκτυο (θα το βρείτε στα Διάφορα του πλαισίου παρόχων δεδομένων). Αυτή η διαδικασία καθιστά το Tomboy διαθέσιμο για συγχρονισμό μέσω του δεύτερου υπολογιστή. " #: C/conduit.xml:351(para) msgid "After a short delay, this will result in a new category being created on the second computer. The category will take the name of the first computer, nzjrs-desktop in my case, and it shall contain any dataproviders currently available for synchronization." msgstr "Μετά από λίγο, στο δεύτερο υπολογιστή δημιουργείται μία νέα κατηγορία. Η κατηγορία θα έχει το όνομα του πρώτου υπολογιστή, αβγ-επιτραπέζιος στην περίπτωσή μας, και θα περιέχει όλους τους παρόχους δεδομένων που είναι διαθέσιμοι για συγχρονισμό." #: C/conduit.xml:354(title) msgid "Configuration of the Second Computer" msgstr "Ρύθμιση του δεύτερου υπολογιστή" #: C/conduit.xml:352(para) msgid "Still on the second computer, drag the Tomboy dataprovider from the newly created category onto the canvas. Notice how its name is Remote Tomboy, indicating it refers to data on the remote, or first, computer. " msgstr "Στο δεύτερο υπολογιστή, σύρετε τον πάροχο δεδομένων Tomboy από τη νεοδημιουργηθείσα κατηγορία στον πίνακα εργασιών. Σημειώστε ότι τώρα το όνομα του παρόχου είναι Απομακρυσμένο Tomboy, γιατί αναφέρεται στα δεδομένα ενός απομακρυσμένου υπολογιστή (του πρώτου υπολογιστή). " #: C/conduit.xml:364(para) msgid "Finally, on the second computer, start the sync in the normal manner." msgstr "Τέλος, στο δεύτερο υπολογιστή, ξεκινήστε το συγχρονισμό όπως συνήθως." #: C/conduit.xml:365(para) msgid "Your tomboy notes should now be synchronized between the two computers." msgstr "Οι σημειώσεις σας στο Tomboy θα πρέπει πλέον να έχουν συγχρονιστεί." #: C/conduit.xml:368(title) msgid "File Synchronization" msgstr "Συγχρονισμός αρχείων" #: C/conduit.xml:369(para) msgid "Due to performance and security reasons, we do not recommend using the network sync feature to synchronize large files between two computers. We hope to address this limitation in the future." msgstr "Για λόγους ασφάλειας και αποδοτικότητας, δεν συνιστούμε τη χρήση του συγχρονισμού δικτύου για το συγχρονισμό μεγάλων αρχείων μεταξύ δύο υπολογιστών. Ελπίζουμε στο μέλλον να εξαλειφθεί αυτός ο περιορισμός." #. Put one translator per line, in the form of NAME , YEAR1, YEAR2. #: C/conduit.xml:0(None) msgid "translator-credits" msgstr "Τζένη Πετούμενου , 2009" conduit-0.3.17/help/el/conduit.xml0000644000175000017500000012476211326117107013722 00000000000000 Conduit Synchronizer"> ]>
Τεκμηρίωση του Conduit Το Conduit είναι ένα πρόγραμμα συγχρονισμού με πολλαπλές δυνατότητες 2007 John Stowers 2009Τζένη Πετούμενου (epetoumenou@gmail.com) Έργο τεκμηρίωσης GNOME John Stowers Brent Gueth Τεκμηρίωση Conduit 1.0 03-01-2008 Αυτή η τεκμηρίωση καλύπτει την έκδοση 1.0 του Conduit.
Τι είναι το Conduit Το Conduit είναι μια εφαρμογή συγχρονισμού για το GNOME. Σας επιτρέπει να συγχρονίζετε αρχεία, φωτογραφίες, email, επαφές, σημειώσεις, το ημερολόγιό σας και οτιδήποτε άλλο επιθυμείτε. Συγχρονίζει δεδομένα με άλλους υπολογιστές, διαδικτυακές υπηρεσίες, ακόμη και άλλες ηλεκτρονικές συσκευές. Το Conduit αναλαμβάνει τόσο το συγχρονισμό όσο και την μετατροπή δεδομένων σε άλλες μορφές. Για παράδειγμα, το Conduit σας επιτρέπει να: Συγχρονίσετε τις σημειώσεις σας στο Tomboy με άλλο υπολογιστή Συγχρονίσετε δεδομένα PIM με το κινητό σας τηλέφωνο, το iPod σας, το Nokia Internet tablet σας, ή με άλλον υπολογιστή Ανεβάσετε φωτογραφίες στα Flickr, Picasa, Smugmug, Shutterfly και στο iPod σας, ... και πολλά περισσότερα Όποιο συνδυασμό κι αν σκέφτεστε, το Conduit θα αναλάβει τη μετατροπή και το συγχρονισμό του.
Παραδείγματα χρήσης Ο Φάνης θέλει να συγχρονίσει τις σημειώσεις του στο tomboy με το Google notebook Ο Τάκης θέλει να συγχρονίσει την επιφάνεια εργασίας του με το λογαριασμό του στο backpack H Νάντια θέλει να διατηρεί συγχρονισμένο έναν κατάλογο στο φορητό και τον επιτραπέζιο υπολογιστή της Ο Παύλος θέλει να διατηρεί συγχρονισμένες τις επαφές του στο evolution και το κινητό του Ο Στάθης θέλει να διατηρεί συγχρονισμένες τις προτιμήσεις του για το GNOME στους δύο υπολογιστές του Ο Γιάννης θέλει να διατηρεί συγχρονισμένο έναν κατάλογο εγγράφων OpenOffice με τα αντίγραφά τους στο Google Docs Ο Πέτρος θέλει να δημιουργήσει αντίγραφα ασφαλείας των φωτογραφιών που είναι αποθηκευμένες στον εξυπηρετητή του, σε εξωτερικό πόρο (σκληρό δίσκο usb / απομακρυσμένο ftp)
Εισαγωγή Ο σκοπός του Conduit είναι να σας επιτρέπει να συγχρονίζετε τα δεδομένα σας όσο πιο ανώδυνα γίνεται, είτε βρίσκονται σε απομακρυσμένες συσκευές είτε σε απομακρυσμένες ιστοσελίδες. Σας επιτρέπει να ζείτε τη ζωή σας όπως θέλετε, χωρίς να ανησυχείτε για δεδομένα, συσκευές και τύπους αρχείων. Το Conduit σας επιτρέπει να έχετε τα αρχεία σας όπου τα θέλετε, όταν τα θέλετε. Μπορείτε να συγχρονίζετε όλες τις φορητές σας συσκευές αυτόματα, μέσω του Conduit. Μπορείτε, επίσης, να συγχρονίζετε αυτόματα τα αντίγραφα ασφαλείας σας σε απομακρυσμένους εξυπηρετητές. Ίσως αυτά να σας φαίνονται υπερβολικά περίπλοκα. Ωστόσο, ένας από τους στόχους του Conduit είναι να παρέχει ένα όσο το δυνατόν πιο απλό και εύχρηστο περιβάλλον. Πίσω όμως από την απλουστευμένη σχεδίαση κρύβεται μεγάλη δύναμη. Αυτή η τεκμηρίωση περιγράφει όλες τις διαθέσιμες επιλογές για τη ρύθμιση ομάδων και παρόχων δεδομένων. Παρακάτω βλέπετε μερικά παραδείγματα για το τι θα μπορούσατε να συγχρονίσετε: Ένας χρήστης του GNOME έχει στη διάθεσή του διάφορες τοποθεσίες στην επιφάνεια εργασίας για την αποθήκευση δεδομένων. Μεταξύ άλλων: Evolution (email, ημερολόγιο, βιβλίο διευθύνσεων) Tomboy (σημειώσεις) Καταλόγους (σημαντικά αρχεία) Φωτογραφίες Σελιδοδείκτες (ιστοσελίδες και ροές) Μουσική Ο ίδιος χρήστης μπορεί εξάλλου να χρησιμοποιεί μια από τις πολλές δημοφιλείς διαδικτυακές υπηρεσίες, όπως Delicious (σελιδοδείκτες)Gmail (σελιδοδείκτες, ημερολόγιο, ροές, email, φωτογραφίες)Flickr (φωτογραφίες) Ακόμη, μπορεί να διαθέτει και άλλες ηλεκτρονικές συσκευές, όπως Δεύτερο φορητό υπολογιστή, που επίσης χρησιμοποιεί το GNOMEΚινητό τηλέφωνο Συσκευή Nokia 770/800Συσκευή Palm ή Windows Mobile Pocket PCiPod Το να διατηρεί κανείς την επιφάνεια εργασίας του τακτοποιημένη είναι από μόνο του δύσκολο, πόσο μάλλον να πρέπει να κρατάει συγχρονισμένα τα δεδομένα του μεταξύ επιφάνειας εργασίας και κάποιας από τις παραπάνω υπηρεσίες ή συσκευές. Ο στόχος μας είναι το Conduit να επιτρέψει στους χρήστες του GNOME να διατηρούν τις πληροφορίες τους συγχρονισμένες. Ανεξάρτητα από τον τύπο αρχείων ή το πού είναι αποθηκευμένες αυτές οι πληροφορίες, το Conduit πρέπει απλά να λειτουργεί.
Κατανοώντας το περιβάλλον του Conduit
Εισαγωγή Το Conduit περιλαμβάνει ορισμένα βασικά στοιχεία που καλό είναι να γνωρίζει κανείς πριν ξεκινήσει. Κατανοώντας τα, μπορεί να ανακαλύψετε πράγματα που δεν είχατε φανταστεί ποτέ σας, όπως π.χ. ότι μπορείτε να ανεβάσετε φωτογραφίες από το τηλέφωνό σας κατευθείαν στο Picasa!
Γραφικό περιβάλλον Conduit Συστατικά του γραφικού περιβάλλοντος του Conduit
Στο εμφανίζονται τα τέσσερα βασικά στοιχεία του Conduit: Μενού Τα μενού Αρχείο, Επεξεργασία και Βοήθεια περιλαμβάνουν εργασίες που αφορούν όλες τις ομάδες. Για περισσότερες πληροφορίες σχετικά με τα περιεχόμενα των μενού, δείτε παρακάτω. Πλαίσιο παρόχων δεδομένων Βρίσκεται στην αριστερή πλευρά του παραθύρου και αναφέρει όλους τους παρόχους δεδομένων που εντοπίστηκαν στον υπολογιστή σας και είναι έτοιμοι προς χρήση.Οι πάροχοι δεδομένων αποτελούν την πηγή ή τον προορισμό των δεδομένων που επιθυμείτε να συγχρονίσετε. Παρακαλώ, δείτε το κεφάλαιο Πάροχοι δεδομένων της τεκμηρίωσης για οδηγίες σχετικά με τη ρύθμιση μεμονωμένων παρόχων. Πίνακας εργασιώνΧρησιμοποιείται για τη δημιουργία ομάδων παρόχων δεδομένων προς συγχρονισμό. Σύρετε μία πηγή δεδομένων στα αριστερά του πίνακα και έναν ή περισσότερους προορισμούς δεδομένων στα δεξιά του πίνακα για να δημιουργήσετε μία ομάδα. Για περισσότερες λεπτομέρειες σχετικά με τις ομάδες, παρακαλώ δείτε το Πλαίσιο συγκρούσεων Αν λάβετε ειδοποιήσεις για συγκρούσεις κατά τη διάρκεια του συγχρονισμού, θα εμφανιστούν εδώ. Για πληροφορίες σχετικά με την αντιμετώπιση πιθανών συγκρούσεων, παρακαλώ, ανατρέξτε στο κεφάλαιο Συγκρούσεις και επίλυσή τους.
Μενού
Αρχείο ΑρχείοΑποθήκευση Αποθηκεύει όλες τις ομάδες συγχρονισμού που έχουν ρυθμιστεί. Οι ομάδες αποθηκεύονται αυτόματα κατά την έξοδο από το Conduit αν έχετε επιλέξει Αποθήκευση ρυθμίσεων κατά την έξοδο στο ΑρχείοΣυγχρονισμός όλων Συγχρονισμός όλων των ομάδων ταυτόχρονα. Μπορείτε βέβαια να συγχρονίζετε κάθε ομάδα ξεχωριστά (δείτε το κεφάλαιο Ομάδες), αλλά έτσι εξοικονομείτε χρόνο, γιατί δεν χρειάζεται να επιλέξετε κάθε μία ομάδα ξεχωριστά για να ξεκινήσετε το συγχρονισμό. ΑρχείοΈξοδος Κλείνει το Conduit. Θα εμφανιστεί διάλογος που θα σας ζητά να διακόψετε τις τρέχουσες εργασίες συγχρονισμού.
Επεξεργασία ΕπεξεργασίαΕκκαθάριση πίνακα Αφαιρεί όλες τις ρυθμίσεις, τους παρόχους δεδομένων και τις ομάδες από τον πίνακα εργασιών. Έτσι, μπορείτε να ξεκινήσετε και πάλι από την αρχή. Η καλύτερη στιγμή για αυτή την επιλογή είναι όταν αλλάζετε τις ρυθμίσεις για μεγάλη μερίδα των ομάδων σας. Δεν υπάρχει εύκολος τρόπος να επανέλθετε στις προηγούμενες ρυθμίσεις σας αν κάνετε εκκαθάριση. ΕπεξεργασίαΠροτιμήσεις Γενικές ρυθμίσεις του Conduit που ισχύουν για όλες τις ομάδες και για όλες τις εργασίες του Conduit. Για περισσότερες πληροφορίες, δείτε
Βοήθεια ΒοήθειαDevelopers Αν είστε προγραμματιστής, και ενδιαφέρεστε να συνεισφέρετε στο Conduit, εδώ θα βρείτε συνδέσμους προς τη σχετική τεκμηρίωση. ΒοήθειαΠεριεχόμενα Εμφανίζει αυτή τη βοήθεια. ΒοήθειαΠερίΕμφανίζει τον αριθμό της έκδοσης και τη λίστα με τους δημιουργούς του Conduit.
Παράθυρο προτιμήσεων Οι προτιμήσεις του Conduit βρίσκονται στο μενού Επεξεργασία. Οι αλλαγές που κάνετε στις προτιμήσεις αυτές εφαρμόζονται σε όλες τις ομάδες και τις εργασίες του Conduit.
Ταμπέλα ρύθμισης Από την ταμπέλα ρύθμισης μπορείτε να τροποποιήσετε όλες τις γενικές ρυθμίσεις του Conduit. Υπάρχουν έξι γενικές ρυθμίσεις: Αποθήκευση ρυθμίσεων κατά την έξοδο Ζητά από το Conduit να αποθηκεύει κάθε πάροχο δεδομένων και ομάδα για τα οποία έχει γίνει ρύθμιση κατά την έξοδο από την εφαρμογή. Εμφάνιση εικονιδίου κατάστασης στην περιοχή ειδοποιήσεων Εμφανίζει εικονίδιο κατάστασης στην περιοχή ειδοποιήσεων. Όταν γίνεται συγχρονισμός εμφανίζεται ειδικό κινούμενο εικονίδιο. Ελαχιστοποίηση στην περιοχή ειδοποιήσεων Αναγκάζει το Conduit να ελαχιστοποιείται στην περιοχή ειδοποιήσεων αντί για τον πίνακα εφαρμογών. Χρήση ενσωματωμένου περιηγητή διαδικτύου Όταν ένας πάροχος απαιτεί να κάνετε είσοδο στην ιστοσελίδα του με τα στοιχεία του λογαριασμού σας, αυτή η επιλογή ζητάει από το Conduit να χρησιμοποιήσει το δικό του περιηγητή διαδικτύου. Όταν ένα αντικείμενο έχει διαγραφεί Όταν υπάρχει αμφίδρομη σύγκρουση
Ταμπέλα παρόχων δεδομένων Αυτή η ταμπέλα εμφανίζει λίστα με τους εγκατεστημένους παρόχους δεδομένων
Ταμπέλα μετατροπών δεδομένων Αυτή η ταμπέλα παραθέτει τις μετατροπές δεδομένων που μπορεί να κάνει το Conduit.
Ταμπέλα βάσης συσχετισμών Πρόκειται για μία λίστα των UID που χρησιμοποιεί το Conduit για να διατηρεί αξιόπιστα δεδομένα συγχρονισμού από τις διάφορες πηγές. Εδώ, σας δίνεται η επιλογή να καθαρίσετε τη βάση συσχετισμών.
Παράθυρο εισόδου Ορισμένοι πάροχοι δεδομένων απαιτούν να κάνετε είσοδο στην ιστοσελίδα τους με τα στοιχεία του λογαριασμού σας. Το πόσο συχνά συμβαίνει αυτό δεν εξαρτάται από το Conduit, αλλά από την πολιτική ασφαλείας του κάθε παρόχου. Για παράδειγμα, το Box.net απαιτεί είσοδο κάθε φορά που τρέχετε το Conduit, ενώ στο Flickr θα πρέπει να γίνει είσοδος μόνο μία φορά, για να δώσετε στο Conduit το δικαίωμα να ανεβάζει φωτογραφίες. Αν μία ιστοσελίδα απαιτεί είσοδο, και έχετε επιλέξει Χρήση ενσωματωμένου περιηγητή διαδικτύου στις προτιμήσεις του Conduit, θα εμφανιστεί ένα παράθυρο όπως το παρακάτω.
Παράθυρο εισόδου Conduit Το παράθυρο που εμφανίζεται όταν απαιτείται είσοδος σε ιστοσελίδες παρόχων δεδομένων
Πάροχοι δεδομένων και ομάδες Το Conduit αναπαριστά γραφικώς τα αντικείμενα που μπορούν να συγχρονιστούν. Όταν προστίθενται πάροχοι στον πίνακα εργασιών, τοποθετούνται σε "ομάδες". Μια ομάδα περιλαμβάνει έναν αριθμό παρόχων δεδομένων που μοιράζονται δεδομένα μεταξύ τους. Στην παρακάτω εικόνα βλέπετε τα ακόλουθα
Το Conduit αναπαριστά τις εργασίες συγχρονισμού γραφικά Συστατικά ομάδων συγχρονισμού
Πάροχος δεδομένων που επιτρέπει αμφίδρομο συγχρονισμό και είναι έτοιμος για συγχρονισμό. Ομάδα που περιλαμβάνει δύο φακέλους ως παρόχους δεδομένων. Το βέλος καταλήγει σε δύο προορισμούς, έναν για κάθε πάροχο δεδομένων για τον οποίο θα γίνει αμφίδρομος συγχρονισμός (δηλαδή θα ανταλλαγούν δεδομένα και προς τις δύο κατευθύνσεις), έτσι ώστε μετά την ολοκλήρωση του συγχρονισμού οι δύο φάκελοι να περιέχουν τις ίδιες πληροφορίες. Ένας δεύτερος φάκελος που λειτουργεί ως πάροχος δεδομένων. Κατά σύμβαση, οι πάροχοι δεδομένων που εμφανίζονται στη δεξιά πλευρά ονομάζονται ταμιευτήρες δεδομένων. Και αυτό γιατί, σε περίπτωση μονόδρομου συγχρονισμού, μπορούν μόνο να παραλαμβάνουν δεδομένα. Το Facebook και το Picasa ως πάροχοι δεδομένων για το ανέβασμα φωτογραφιών στις αντίστοιχες ιστοσελίδες. Σημειώστε ότι η ομάδα περιέχει τρεις παρόχους δεδομένων και ότι το βέλος έχει αλλάξει, για να επισημάνει ότι τα δεδομένα θα κινούνται μόνο προς μία κατεύθυνση (δηλαδή οι εικόνες του F-Spot θα ανεβαίνουν στο Facebook και το Picasa).
Συγχρονισμός Σε αυτό το κεφάλαιο περιγράφονται τα βήματα που απαιτούνται για το συγχρονισμό δύο παρόχων δεδομένων. Το παράδειγμα αναφέρεται στο συγχρονισμό δύο φακέλων, αλλά τα ίδια ισχύουν και για οποιονδήποτε άλλο συγχρονισμό. Αν χρειάζεστε περισσότερες πληροφορίες για συγκεκριμένες ρυθμίσεις, παρακαλώ, ανατρέξτε στο αντίστοιχο κεφάλαιο της τεκμηρίωσης.
Εισαγωγή Το περιλαμβάνει δύο ομάδες. Αυτό το κεφάλαιο περιγράφει τα βήματα που απαιτούνται για τη δημιουργία αυτών των ομάδων. Η πάνω ομάδα αφορά τον αμφίδρομο συγχρονισμό δύο φακέλων Η κάτω ομάδα αφορά έναν μονόδρομο συγχρονισμό εικόνων, από το F-Spot σε διαδικτυακά άλμπουμ στο Facebook και το Picasa.
Παράδειγμα 1: Συγχρονισμός δύο φακέλων Τα παρακάτω βήματα απαιτούνται για τη δημιουργία της ομάδας αμφίδρομου συγχρονισμού που εμφανίζεται ως 1 στην παραπάνω εικόνα. Στην επιφάνεια εργασίας σας, δημιουργήστε τρεις φακέλους με ονόματα φάκελος1, φάκελος2, φάκελος3. Σύρετε ένα αρχείο στο φάκελος1. Εκκινήστε το Conduit Προσθέστε πάροχο δεδομένων για το φάκελος1 Από το πλαίσιο των παρόχων δεδομένων, σύρετε τον πάροχο δεδομένων Φάκελος και τοποθετήστε τον στην αριστερή πλευρά του πίνακα εργασιών. Αυτή θα είναι η πηγή δεδομένων από την οποία θα γίνει ο συγχρονισμός. Ρυθμίστε το φάκελος1 Κάντε διπλό κλικ πάνω στον πάροχο δεδομένων που μόλις τοποθετήσατε στον πίνακα εργασιών. Έτσι θα εμφανιστεί το παράθυρο ρύθμισης του φακέλου, όπως φαίνεται παρακάτω. Επιλέξτε ένα όνομα που θα μπορείτε να θυμηθείτε εύκολα και στο Τοποθεσία φακέλου επιλέξτε το φάκελο που δημιουργήσατε στο βήμα 1.
Ρύθμιση του φακέλου 1
Προσθέστε πάροχο δεδομένων για το φάκελος2 Σύρετε και πάλι τον πάροχο δεδομένων από το αριστερό πλαίσιο. Αυτή τη φορά τοποθετήστε τον δίπλα στον πάροχο φάκελος1. Θα εμφανιστεί ένα βέλος που θα συνδέει τους δύο φακέλους. Ρυθμίστε το φάκελος2 Ρυθμίστε τον πάροχο δεδομένων έτσι ώστε η Τοποθεσία φακέλου να είναι το φάκελος2 στην επιφάνεια εργασίας. Προσοχή, το πιο σημαντικό είναι ότι το Όνομα φακέλου πρέπει να είναι το ίδιο με αυτό που είχατε εισάγει στο βήμα 4. Ρυθμίστε τις παραμέτρους συγχρονισμού Κάντε δεξί κλικ στην ομάδα και επιλέξτε αμφίδρομος συγχρονισμός στις επιλογές συγχρονισμού. Επειδή εδώ περιγράφεται η βασική διαδικασία συγχρονισμού, δεν θα περιγράψουμε σε αυτό το κεφάλαιο τις προχωρημένες επιλογές συγχρονισμού. Αν χρειάζεστε περισσότερες πληροφορίες για τις διαθέσιμες επιλογές, δείτε το . Συγχρονίστε τους δύο φακέλους είτε κάνοντας δεξί κλικ πάνω τους και επιλέγοντας Συγχρονισμός, είτε από το μενού Αρχείο. Όταν ολοκληρωθεί ο συγχρονισμός, το αρχείο που είχατε προσθέσει στο φάκελος1 στην επιφάνεια εργασίας σας θα βρίσκεται στο φάκελος2.
Παράδειγμα 2: Εξαγωγή εικόνων προς πολλαπλούς προορισμούς Η δεύτερη ομάδα στο δείχνει μία πηγή δεδομένων F-Spot να εξάγει δεδομένα προς δύο ταμιευτήρες δεδομένων, ένα στο Facebook και ένα στο Picasa. Εκκινήστε το Conduit Εκκινήστε το F-Spot Σύρετε τον πάροχο δεδομένων F-Spot από το πλαίσιο παρόχων δεδομένων σε ένα κενό σημείο στον πίνακα εργασιών. Θα δημιουργηθεί μία νέα ομάδα που θα περιέχει μόνο τον πάροχο δεδομένων F-Spot. Σύρετε τους παρόχους δεδομένων Facebook και Picasa στην ομάδα που μόλις δημιουργήσατε. Ρυθμίστε τους παρόχους δεδομένων κάνοντας διπλό κλικ πάνω τους. Τώρα, συγχρονίστε την ομάδα για να ανεβάσετε τις φωτογραφίες σας. Θα εμφανιστεί το παράθυρο εισόδου του Conduit που θα σας ζητήσει να κάνετε είσοδο στο Facebook, όπως φαίνεται στο .
Περίληψη Όλες οι εργασίες συγχρονισμού γίνονται κατά τον ίδιο ακριβώς τρόπο. Το μόνο που διαφέρει είναι τα δεδομένα που συγχρονίζονται και οι χρησιμοποιούμενοι πάροχοι. Τα βήματα που απαιτούνται είναι πάντα τα ίδια. Προσθήκη παρόχων δεδομένων και δημιουργία νέας ομάδας, ή προσθήκη σε υπάρχουσα ομάδα. Ρύθμιση των παρόχων δεδομένων. Κάθε πάροχος δεδομένων απαιτεί ειδική ρύθμιση. Για περισσότερες πληροφορίες ανατρέξτε στο κεφάλαιο Πάροχοι δεδομένων της τεκμηρίωσης. Ρύθμιση της ομάδας: επιλογές σε περίπτωση συγκρούσεων, κτλ. Συγχρονισμός των παρόχων δεδομένων κατά προαίρεση.
Συγχρονισμός δικτύου Αν έχετε δύο υπολογιστές στο σπίτι σας, μπορείτε να χρησιμοποιήσετε το Conduit για να συγχρονίσετε τα δεδομένα τους απευθείας, χωρίς να χρειαστεί να αποθηκεύσετε κάπου αλλού τα δεδομένα. Τα παρακάτω βήματα περιγράφουν πώς μπορείτε να συγχρονίσετε τις σημειώσεις του Tomboy μεταξύ δύο υπολογιστών, του αβγ-επιτραπέζιος και του αβγ-φορητός. Για την περιγραφή της διαδικασίας θα χρησιμοποιηθούν τα παρακάτω. Εικόνα από τον πρώτο υπολογιστή. Εικόνα από το δεύτερο υπολογιστή. Συμβουλή για το συγχρονισμό δικτύου Η παρακάτω διαδικασία ναι μεν αναφέρεται στο συγχρονισμό σημειώσεων στο Tomboy, αλλά μπορεί να τροποποιηθεί για να επιτρέπει το συγχρονισμό πολλών ειδών δεδομένων μεταξύ δύο υπολογιστών, π.χ. επαφών, ημερολογίου, ακόμη και φωτογραφιών στο F-Spot. Στον πρώτο υπολογιστή δημιουργήστε μία ομάδα συγχρονισμού που θα συνδέει το Tomboy με τον πάροχο δεδομένων Δίκτυο (θα το βρείτε στα Διάφορα του πλαισίου παρόχων δεδομένων). Αυτή η διαδικασία καθιστά το Tomboy διαθέσιμο για συγχρονισμό μέσω του δεύτερου υπολογιστή.
Ρύθμιση του πρώτου υπολογιστή
Μετά από λίγο, στο δεύτερο υπολογιστή δημιουργείται μία νέα κατηγορία. Η κατηγορία θα έχει το όνομα του πρώτου υπολογιστή, αβγ-επιτραπέζιος στην περίπτωσή μας, και θα περιέχει όλους τους παρόχους δεδομένων που είναι διαθέσιμοι για συγχρονισμό. Στο δεύτερο υπολογιστή, σύρετε τον πάροχο δεδομένων Tomboy από τη νεοδημιουργηθείσα κατηγορία στον πίνακα εργασιών. Σημειώστε ότι τώρα το όνομα του παρόχου είναι Απομακρυσμένο Tomboy, γιατί αναφέρεται στα δεδομένα ενός απομακρυσμένου υπολογιστή (του πρώτου υπολογιστή).
Ρύθμιση του δεύτερου υπολογιστή
Τέλος, στο δεύτερο υπολογιστή, ξεκινήστε το συγχρονισμό όπως συνήθως. Οι σημειώσεις σας στο Tomboy θα πρέπει πλέον να έχουν συγχρονιστεί.
Συγχρονισμός αρχείων Για λόγους ασφάλειας και αποδοτικότητας, δεν συνιστούμε τη χρήση του συγχρονισμού δικτύου για το συγχρονισμό μεγάλων αρχείων μεταξύ δύο υπολογιστών. Ελπίζουμε στο μέλλον να εξαλειφθεί αυτός ο περιορισμός.
conduit-0.3.17/help/fr/0000777000175000017500000000000011326117107011612 500000000000000conduit-0.3.17/help/fr/fr.po0000644000175000017500000014131511326117107012502 00000000000000# French translation of conduit documentation. # Copyright (C) 2008 Free Software Foundation, Inc. # This file is distributed under the same license as the conduit # documentation package. # # Bruno Brouard , 2008 # Claude Paroz , 2008 # msgid "" msgstr "" "Project-Id-Version: Conduit fr\n" "POT-Creation-Date: 2008-08-06 21:57+0200\n" "PO-Revision-Date: 2008-08-06 22:05+0200\n" "Last-Translator: Claude Paroz \n" "Language-Team: GNOME French Team \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: ../C/conduit.xml:122(None) msgid "" "@@image: 'figures/conduit-gui-parts.png'; " "md5=e7c7ebe8cac03bd0768e2de105155630" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: ../C/conduit.xml:214(None) msgid "" "@@image: 'figures/conduit-login.png'; md5=6e4fe96c2d518d23724e1a70a53fa026" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: ../C/conduit.xml:233(None) msgid "@@image: 'figures/conduit-dp.png'; md5=ce99ba0bdc70c854b1f8a9999435e250" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: ../C/conduit.xml:279(None) msgid "" "@@image: 'figures/conduit-folder-configuration.png'; " "md5=ece672e8cf42e26947eee6e3fb5af7f9" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: ../C/conduit.xml:345(None) msgid "" "@@image: 'figures/network-sync-pc1.png'; md5=118578724965f8af01b66ccdc7e39328" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. #: ../C/conduit.xml:358(None) msgid "" "@@image: 'figures/network-sync-pc2.png'; md5=565769e5f51b3decfebcfa18989ee391" msgstr "" #: ../C/conduit.xml:14(title) msgid "Conduit Manual" msgstr "Manuel de Conduit" #: ../C/conduit.xml:16(para) msgid "Conduit is a program that synchronizes things" msgstr "Conduit est un programme de synchronisation d'éléments" #: ../C/conduit.xml:19(year) msgid "2007" msgstr "2007" #: ../C/conduit.xml:20(holder) msgid "John Stowers" msgstr "John Stowers" #: ../C/conduit.xml:23(publishername) msgid "GNOME Documentation Project" msgstr "Projet de documentation de GNOME" #: ../C/conduit.xml:28(firstname) msgid "John" msgstr "John" #: ../C/conduit.xml:29(surname) msgid "Stowers" msgstr "Stowers" #: ../C/conduit.xml:32(firstname) msgid "Brent" msgstr "Brent" #: ../C/conduit.xml:33(surname) msgid "Gueth" msgstr "Gueth" #: ../C/conduit.xml:39(revnumber) msgid "Conduit Manual 1.0" msgstr "Manuel de Conduit 1.0" #: ../C/conduit.xml:40(date) msgid "2008-01-03" msgstr "03/01/2008" #: ../C/conduit.xml:44(releaseinfo) msgid "This manual describes version 1.0 of Conduit" msgstr "Ce manuel documente la version 1.0 de Conduit" #: ../C/conduit.xml:48(title) msgid "What is Conduit" msgstr "Qu'est ce que Conduit ?" #: ../C/conduit.xml:49(para) msgid "" "Conduit " "is a synchronization application for GNOME. It allows you to synchronize " "your files, photos, emails, contacts, notes, calendar data and any other " "type of personal information and synchronize that data with another " "computer, an online service, or even another electronic device. Conduit " "manages the synchronization and conversion of data into other formats. For " "example, Conduit allows you to;" msgstr "" "Conduit " "est un programme de synchronisation pour GNOME. Il permet de synchroniser " "vos fichiers, photos, courriels, contacts, notes, données de calendrier et " "tout autre type d'informations personnelles et de synchroniser tout ceci " "avec un autre ordinateur, un service en ligne ou même un autre appareil " "électronique. Conduit gère la synchronisation et la conversion des données " "dans les autres formats. Par exemple, Conduit permet de :" #: ../C/conduit.xml:53(para) msgid "" "Synchronize your Tomboy notes with another computer" msgstr "" "synchroniser vos notes Tomboy avec celles d'un autre ordinateur ;" #: ../C/conduit.xml:56(para) msgid "" "Synchronize your PIM data to your mobile phone, iPod, Nokia Internet tablet, " "or between computers" msgstr "" "synchroniser vos données PIM vers votre téléphone portable, iPod, Nokia Internet " "tablet ou entre des ordinateurs ;" #: ../C/conduit.xml:59(para) msgid "" "Upload photos to Flickr, Picasa, Smugmug, " "Shutterfly and " "your iPod," msgstr "" "télécharger vos photos vers Flickr, Picasa, Smugmug, Shutterfly et votre iPod ;" #: ../C/conduit.xml:61(para) msgid "... and many more" msgstr "et bien d'autres choses encore..." #: ../C/conduit.xml:63(para) msgid "" "Any combination you can imagine, Conduit will take care of the conversion " "and synchronization." msgstr "" "Pour toutes les combinaisons imaginables, Conduit prend en charge les " "conversions et la synchronisation." #: ../C/conduit.xml:65(title) msgid "Use Cases" msgstr "Exemples d'utilisation" #: ../C/conduit.xml:68(para) msgid "" "Fred wants to sync his tomboy notes with Google notebook" msgstr "" "Frédéric veut synchroniser ses notes Tomboy avec Google Agenda" #: ../C/conduit.xml:71(para) msgid "" "Joey wants to sync whatever is on his desktop to his backpack account" msgstr "" "Joe veut synchroniser tout ce qui est sur son bureau vers son compte Backpack" #: ../C/conduit.xml:73(para) msgid "Nellie wants to keep a directory on his laptop and his desktop in sync" msgstr "" "Nelly veut qu'un répertoire de son portable reste synchronisé avec celui de " "son ordinateur de bureau" #: ../C/conduit.xml:74(para) msgid "Paul wants to keep his evolution contacts in sync with his mobile phone" msgstr "" "Paul veut conserver ses contacts Evolution synchrones avec ceux de son " "téléphone mobile" #: ../C/conduit.xml:75(para) msgid "" "Steve wants to keep his gnome preferences in sync between his two computers" msgstr "" "Steve veut garder synchrones ses préférences GNOME entre ses deux ordinateurs" #: ../C/conduit.xml:77(para) msgid "" "John wants to keep a directory of OpenOffice documents in sync with copies held on " "Google Docs" msgstr "" "John veut conserver un répertoire de documents OpenOffice.org synchrone avec les copies " "stockées sur Google " "Documents" #: ../C/conduit.xml:79(para) msgid "" "Pete wants to have photos saved to his server to be pushed to an external " "back up (usb hard drive / off-site ftp)" msgstr "" "Pierre veut que des photos enregistrées sur son serveur soient sauvegardées " "par des moyens externes (disque dur USB / ftp hors site)" #: ../C/conduit.xml:83(title) ../C/conduit.xml:114(title) #: ../C/conduit.xml:254(title) msgid "Introduction" msgstr "Introduction" #: ../C/conduit.xml:84(para) msgid "" "Conduit's goals are to synchronize your data as seamlessly as possible, be " "it from remote device or remote websites. It is about extending your life as " "you see it needs to be, no longer constrained by data, devices or formats. " "Conduit enables you to take your data where you want when you want. All of " "your mobile devices could be synchronized automatically by Conduit. Home " "file back-ups to a remote server? Synced automatically." msgstr "" "Les objectifs de Conduit sont de synchroniser vos données de la manière la " "plus souple possible, même si elles se trouvent sur du matériel ou des sites " "Web distants. Il s'agit d'agrandir votre cercle de vie tel que vous le " "souhaitez, en s'affranchissant des contraintes de données, de matériels ou " "de formats. Conduit permet de récupérer vos données où et quand vous le " "voulez. Tous vos appareils mobiles peuvent être synchronisés par Conduit. " "Souhaitez-vous sauvegarder vos fichiers personnels sur un serveur distant ? " "Conduit les synchronise automatiquement." # design est-il francais ? #: ../C/conduit.xml:85(para) msgid "" "It may sometimes seem that Conduit is overly complicated, one of the design " "goals has always been to make the interface as simple and intuitive as " "possible. However Conduit is much more powerful then the simplistic design " "may lead on. This documentation will describe all the configuration options " "for groups and data providers, while the following gives some examples of " "items you may wish to synchronize;" msgstr "" "Conduit peut parfois paraître exagérément compliqué. Un des objectifs de sa " "conception a toujours été de rendre l'interface aussi sobre et intuitive que " "possible. Cependant, Conduit est beaucoup plus puissant que ne pourrait le " "laisser penser son apparence simpliste. Ce manuel décrit toutes les options " "de configuration des sources de données et des groupes et vous trouverez ci-" "dessous des exemples d'éléments qu'il est possible de synchroniser." #: ../C/conduit.xml:88(para) msgid "" "A GNOME user might " "store information in a wide variety of places on the desktop including;" msgstr "" "Un utilisateur GNOME peut enregistrer en des endroits très divers sur son ordinateur des " "informations telles que :" #: ../C/conduit.xml:91(para) msgid "" "Evolution (email, calendar, address book)" msgstr "" "Evolution (courriels, calendriers, carnets d'adresses)" #: ../C/conduit.xml:95(para) msgid "" "Tomboy (notes)" msgstr "" "Tomboy (notes)" #: ../C/conduit.xml:98(para) msgid "Directories (important files)" msgstr "Répertoires (fichiers importants)" #: ../C/conduit.xml:99(para) msgid "Photos" msgstr "Photos" #: ../C/conduit.xml:100(para) msgid "Bookmarks (web and feeds)" msgstr "Signets (Web et flux RSS)" #: ../C/conduit.xml:101(para) msgid "Music" msgstr "Musique" #: ../C/conduit.xml:104(para) msgid "" "Delicious (bookmarks)" msgstr "" "Delicious (signets)" #: ../C/conduit.xml:104(para) msgid "" "Gmail (bookmarks, " "calendar, feeds, email, photos)" msgstr "" "Gmail (signets, " "calendriers, flux RSS, courriel, photos)" #: ../C/conduit.xml:104(para) msgid "" "Flickr (photos)" msgstr "" "Flickr (photos)" #: ../C/conduit.xml:104(para) msgid "" "The user might also use one of the many popular online services including " "" msgstr "" "L'utilisateur peut également utiliser un grand nombre de services en ligne " "très populaires dont " #: ../C/conduit.xml:105(para) msgid "A second laptop, also running GNOME" msgstr "un deuxième portable, tournant également sous GNOME" #: ../C/conduit.xml:105(para) msgid "A mobile phone" msgstr "un téléphone mobile" #: ../C/conduit.xml:105(para) msgid "" "A Nokia 770/800" msgstr "" "un Nokia 770/800" #: ../C/conduit.xml:105(para) msgid "" "A Palm or Windows Mobile Pocket PC" msgstr "" "un Palm ou un " "Pocket PC Windows Mobile" #: ../C/conduit.xml:105(para) msgid "An iPod" msgstr "un iPod" #: ../C/conduit.xml:105(para) msgid "" "They probably also own another electronic device such as " msgstr "" "Il possède probablement aussi un autre dispositif électronique tel que " "" #: ../C/conduit.xml:107(para) msgid "" "Its hard enough keeping your information organized when limited to the " "desktop, let alone the added burden of keeping your information in sync with " "any of the other services or devices listed above." msgstr "" "Il est suffisamment difficile d'organiser ses informations même en se " "limitant à son ordinateur de bureau, sans y ajouter encore les problèmes de " "synchronisation avec les différents services et appareils listés ci-dessus." #: ../C/conduit.xml:108(para) msgid "" "Our goal for Conduit is to allow GNOME users to keep their information in " "sync. Irrespective of the type, irrespective of the way in which that " "information is stored. Conduit should just work." msgstr "" "L'objectif de Conduit est de permettre aux utilisateurs GNOME de conserver " "leurs informations synchrones, quel que soit leur type ou leur manière " "d'être stockées. Conduit doit fonctionner, un point c'est tout." #: ../C/conduit.xml:112(title) msgid "Understanding the Conduit Interface" msgstr "Présentation de l'interface Conduit" #: ../C/conduit.xml:115(para) msgid "" "Conduit has a few basic concepts worth understanding before you begin. " "Knowing these concepts will help you discover things that you never knew you " "could keep in sync, for example, uploading photos right from your mobile " "phone to Picasa!" msgstr "" "Avant de commencer, il est nécessaire de comprendre quelques principes de " "base de Conduit. Connaître ces principes va vous aider à découvrir des " "choses que vous n'auriez jamais pensé à synchroniser ; par exemple, envoyer " "des photos directement de votre téléphone portable vers Picasa !" #: ../C/conduit.xml:118(title) msgid "Conduit GUI" msgstr "Interface graphique de Conduit" #: ../C/conduit.xml:125(para) msgid "The Parts of the Conduit GUI" msgstr "Les éléments de l'interface graphique de Conduit" #: ../C/conduit.xml:131(para) msgid "" " shows the Conduit interface's four " "main components;" msgstr "" "La montre les quatre principales " "parties de l'interface graphique de Conduit :" #: ../C/conduit.xml:133(para) msgid "" "The file, edit and help menus store operations which apply to all groups. " "For more information on the contents of these menus, see below." msgstr "" "Les menus Fichier, Édition et Aide regroupent les opérations qui " "s'appliquent à tous les groupes. Pour plus d'informations sur le contenu de " "ces menus, voir ci-dessous." #: ../C/conduit.xml:133(para) msgid "The Menu" msgstr "La barre de menus " #: ../C/conduit.xml:134(para) msgid "" "Located on the left hand side of the window, lists all of the data providers " "that are detected and ready for use on your system." msgstr "" "Situé sur le côté gauche de la fenêtre, il énumère toutes les sources de " "données détectées et prêtes à être utilisées sur votre système." #: ../C/conduit.xml:134(para) msgid "" "Data providers are the source or destination of data you wish to sync. " "Please refer to the Data Provider section of the " "documentation to receive instructions on how to configure each data provider." msgstr "" "Les sources de données sont les sources ou les destinations des données que " "vous souhaitez synchroniser. Veuillez consulter la section Sources " "de données de la documentation pour obtenir les instructions de " "configuration des différentes sources." #: ../C/conduit.xml:134(para) msgid "The Data Provider Pane " msgstr "Le volet des sources de données " #: ../C/conduit.xml:135(para) msgid "" "Used to create groups of data providers to synchronize. Drag a data source " "to the left of the canvas pane and one or more data sinks to the right of " "the data pane to create a group. For more explanation on groups please check " "." msgstr "" "Il sert à créer des groupes de sources de données à synchroniser. Faites " "glisser une source de données vers la gauche du volet du canevas et un ou " "plusieurs récepteurs de données vers la droite du volet pour créer un " "groupe. Pour plus d'explications sur les groupes, veuillez lire ." #: ../C/conduit.xml:135(para) msgid "The Canvas Pane " msgstr "Le volet du canevas " #: ../C/conduit.xml:136(para) msgid "" "If you receive any conflict notifications while trying to run a sync job " "they will be listed here. For information on how to deal with possible " "conflicts please check the Conflicts and Resolutions " "section of the documentation." msgstr "" "Si vous recevez des notifications de conflits au cours d'un processus de " "synchronisation, elles s'affichent à cet endroit. Pour plus d'informations " "sur la manière de gérer les conflits potentiels, veuillez lire la section " "Les conflits et leur résolution dans la documentation." #: ../C/conduit.xml:136(para) msgid "The Conflicts Pane " msgstr "Le volet des conflits " #: ../C/conduit.xml:140(title) msgid "The Menus" msgstr "Les menus" #: ../C/conduit.xml:142(title) msgid "The File Menu" msgstr "Le menu Fichier" #: ../C/conduit.xml:144(para) msgid "" "FileSave Saves all configured synchronization groups. Groups are saved " "automatically when you exit Conduit if you have selected Save " "Settings on Exit in " msgstr "" "FichierEnregistrer Conduit enregistre tous les groupes de " "synchronisation configurés. Les groupes sont enregistrés automatiquement " "lorsque vous quittez Conduit si l'option Enregistrer les paramètres " "à la fermeture est cochée dans ." #: ../C/conduit.xml:145(para) msgid "" "FileSynchronize All Synchronizes all groups at the same time. You can " "still run each sync group separately (see the Groups " "section), but this saves you the time of having to select and manually going " "through each group to start the sync process." msgstr "" "FichierTout synchroniser Synchronise tous les groupes à la fois. Vous " "pouvez quand même synchroniser chaque groupe séparément (voir la section " "Groupes) mais cela vous fait gagner le temps de " "sélection et de lancement des synchronisations manuelles de chaque groupe." #: ../C/conduit.xml:146(para) msgid "" "FileQuit Closes conduit. You will be prompted to stop any synchronization " "currently in progress." msgstr "" "FichierQuitter Quitte Conduit. Vous devrez indiquer si vous souhaitez arrêter " "les synchronisations actuellement en cours." #: ../C/conduit.xml:150(title) msgid "The Edit Menu" msgstr "Le menu Édition" #: ../C/conduit.xml:152(para) msgid "" "EditClear Canvas Removes all configurations, data providers, and groups from the " "canvas pane. This allows you start using the canvas as it was a clean slate. " "The best time to use this is when you are re-configuring a large portion of " "your sync groups. There is no quick way to revert back after selecting this " "setting." msgstr "" "ÉditionEffacer le canevas Supprime toutes les configurations, les sources de " "données et les groupes du volet du canevas. Ceci vous permet de reprendre " "l'utilisation du canevas à partir d'un état vierge. Le meilleur moment pour " "utiliser cette fonction, c'est lorsque vous reconfigurez une grande partie " "de vos groupes de synchronisation. Il n'y a pas de méthode rapide pour " "revenir en arrière après avoir choisi cette option." #: ../C/conduit.xml:153(para) msgid "" "EditPreferences Global Conduit settings that effect all of your sync groups and " "basic Conduit operations. For more information please see " msgstr "" "ÉditionPréférences Réglages globaux de Conduit qui affectent tous vos " "groupes de synchronisation et toutes les opérations essentielles de Conduit. " "Pour plus d'informations, veuillez consulter ." #: ../C/conduit.xml:157(title) msgid "The Help Menu" msgstr "Le menu Aide" #: ../C/conduit.xml:159(para) msgid "" "HelpDevelopers If you are developer, and interested in contributing to Conduit, " "then this option includes links to all the appropriate documentation." msgstr "" "AideDéveloppeurs Si vous êtes développeur et intéressé à contribuer à Conduit, " "cette option propose des liens vers tous les documents appropriés." #: ../C/conduit.xml:160(para) msgid "" "HelpContents Shows this help document." msgstr "" "AideSommaire Affiche cette aide." #: ../C/conduit.xml:161(para) msgid "" "HelpAbout Shows the version number and a list of Conduit developers." msgstr "" "AideÀ propos Affiche le numéro de version et la liste des développeurs de " "Conduit." #: ../C/conduit.xml:166(title) msgid "The Preferences Window" msgstr "La fenêtre des préférences" #: ../C/conduit.xml:167(para) msgid "" "The Conduit preferences is accessed from the Edit menu. Any setting or " "change that you make within the preferences menu affect all of your sync " "groups and basic Conduit operations." msgstr "" "Les préférences de Conduit sont accessibles à partir du menu Édition. Tous " "les réglages ou modifications que vous faites dans les préférences affectent " "tous vos groupes de synchronisation et toutes les opérations essentielles de " "Conduit." #: ../C/conduit.xml:169(title) msgid "Configuration Tab" msgstr "L'onglet Configuration" #: ../C/conduit.xml:170(para) msgid "" "The configuration tab is where all of Conduit's global settings are " "configured. There are six global settings:" msgstr "" "Dans l'onglet Configuration, il est possible de configurer tous les " "paramètres globaux de Conduit. Il y a six paramètres globaux :" #: ../C/conduit.xml:173(guilabel) msgid "Save Settings on Exit" msgstr "Enregistrer les paramètres à la fermeture" #: ../C/conduit.xml:174(para) msgid "" "Instructs Conduit that all configured dataproviders and groups should be " "saved when the application exits." msgstr "" "Indique à Conduit que toutes les sources de données configurés et tous les " "groupes doivent être enregistrés lorsque le programme se termine." #: ../C/conduit.xml:177(guilabel) msgid "Show Status Icon" msgstr "Afficher l'icône d'état" #: ../C/conduit.xml:178(para) msgid "" "Shows a status icon in the notification area. This icon animates to indicate " "a sync is in progress." msgstr "" "Affiche une icône d'état dans la zone de notification. Cette icône s'anime " "pour indiquer qu'une synchronisation est en cours." #: ../C/conduit.xml:181(guilabel) msgid "Minimize to Notification Area" msgstr "Minimiser dans la zone de notification" #: ../C/conduit.xml:182(para) msgid "" "Instructs Conduit to minimize to the notification area instead of to the " "panel." msgstr "" "Indique à Conduit de minimiser dans la zone de notification plutôt que dans " "le tableau de bord." #: ../C/conduit.xml:185(guilabel) msgid "Use Built in Web Browser" msgstr "Utiliser le navigateur Web intégré" #: ../C/conduit.xml:186(para) msgid "" "When a data provider requires that you log onto a website, this option tells " "Conduit to use its own web browser to do so." msgstr "" "Lorsqu'une source de données a besoin de se connecter sur un site Web, cette " "option indique à Conduit d'utiliser son propre navigateur Web pour le faire." #: ../C/conduit.xml:188(guilabel) msgid "When an Item Has Been Deleted" msgstr "Quand un objet a été supprimé" #: ../C/conduit.xml:189(guilabel) msgid "Where There is a Two Way Conflict" msgstr "Quand il y a un conflit bidirectionnel" #: ../C/conduit.xml:193(title) msgid "Data Providers Tab" msgstr "L'onglet Sources de données" #: ../C/conduit.xml:194(para) msgid "" "This tab shows a list of the data providers that are currently installed." msgstr "" "Cet onglet affiche une liste des sources de données actuellement installées." #: ../C/conduit.xml:197(title) msgid "Data Conversions Tab" msgstr "L'onglet Conversions de données" #: ../C/conduit.xml:198(para) msgid "" "This tab lists the data conversions that Conduit is capable of performing." msgstr "" "Cet onglet recense les conversions de données que Conduit est capable de " "réaliser." #: ../C/conduit.xml:201(title) msgid "Mapping DB" msgstr "BD correspondances" #: ../C/conduit.xml:202(para) msgid "" "This is a list of the UID that Conduit uses to maintain accurate sync data " "from different sources. Here you have the option to clear the mapping " "database." msgstr "" "Une liste des identifiants uniques que Conduit utilise pour maintenir des " "données synchronisées de différentes sources. Vous avez la possibilité " "d'effacer la base de données des correspondances." #: ../C/conduit.xml:206(title) msgid "The Web Login Window" msgstr "La fenêtre de connexion Web" #: ../C/conduit.xml:207(para) msgid "" "Sometimes you will be required to log into a website associated with certain " "data providers. The frequency at which you may have to log in is not " "determined by Conduit, but by the security policy of the respective data " "provider. For example, Box.net requires you to log in every time Conduit is " "run, whereas Flickr only requires you to log in once, to give permission to " "Conduit to upload photos. If you are required to log into a website, and you " "have selected the Use Built in Web Browser from the " "Conduit preferences, then a window will pop up like the one shown below." msgstr "" "De temps en temps, il est nécessaire de se connecter sur un site Web associé " "à certaines sources de données. La fréquence des connexions n'est pas " "définie par Conduit mais par la politique de sécurité de la source de " "données respective. Par exemple, Box.net nécessite de se connecter à chaque " "fois que Conduit est lancé, alors que Flickr n'impose de se connecter qu'une " "seule fois pour vous donner le droit de télécharger des photos vers Conduit. " "Lorsqu'il est nécessaire de se connecter sur un site Web et que vous avez " "choisi l'option Utiliser le navigateur Web intégré " "comme préférence de Conduit, la fenêtre suivante surgit à l'écran." #: ../C/conduit.xml:210(title) msgid "Conduit Login Window" msgstr "La fenêtre de connexion Conduit" #: ../C/conduit.xml:217(para) msgid "The window shown when logging into data provider websites" msgstr "" "Fenêtre affichée au cours d'une connexion sur le site Web d'une source de " "données" #: ../C/conduit.xml:225(title) msgid "Data Providers and Groups" msgstr "Sources et groupes de données" #: ../C/conduit.xml:226(para) msgid "" "Conduit represents the things your want to synchronize graphically. When " "data providers get added to the canvas, they get arranged into so called " "groups. A group is a collection of data providers that share data. In the " "figure below you will see the following parts" msgstr "" "Conduit représente graphiquement les éléments à synchroniser. Lorsque des " "sources de données sont ajoutées au canevas, celles-ci sont agencées par " "groupe. Un groupe est un ensemble de sources de données qui partagent des " "données. Sur la figure ci-dessous, il est possible de voir les éléments " "suivants" #: ../C/conduit.xml:229(title) msgid "Conduit Depicts Synchronizations Graphically" msgstr "Conduit représente graphiquement les synchronisations" #: ../C/conduit.xml:236(para) msgid "Parts of a Synchronization Group" msgstr "Les éléments d'un groupe de synchronisation" #: ../C/conduit.xml:243(para) msgid "" "A data provider for synchronizing two way whose status indicates that it is " "ready to be synchronized." msgstr "" "Une source de données pour synchronisation bidirectionnelle dont le statut " "indique qu'elle est prêt à être synchronisée." #: ../C/conduit.xml:244(para) msgid "" "A group containing two folder dataproviders. The arrow has two ends, " "indicating that the two dataproviders will undergo a two way " "synchronization, that is data will flow in both directions, and both folders " "will contain the same information once the sync finishes." msgstr "" "Un groupe contenant deux sources de données Dossier. La flèche possède deux " "pointes indiquant que les deux sources de données subissent une " "synchronisation bidirectionnelle, c'est-à-dire que les données circulent " "dans les deux sens et qu'une fois la synchronisation terminée, les deux " "dossiers contiennent les mêmes informations." #: ../C/conduit.xml:245(para) msgid "" "A second folder data provider. By convention, data providers that lie on the " "right side of groups are called data sinks. This is because during a one way " "sync, data can only flow into them." msgstr "" "Une deuxième source de données Dossier. Par convention, les sources de " "données situées du côté droit des groupes sont appelées des collecteurs de " "données. La raison est que lors d'une synchronisation unidirectionnelle, les " "données ne peuvent circuler que vers ceux-ci." #: ../C/conduit.xml:246(para) msgid "" "A Facebook and Picasa data provider for uploading images to those sites. " "Notice that that the group has three data providers, and the arrow has " "changed to indicate that data will flow in only one direction, that is " "images will be uploaded from F-Spot to Facebook and Picasa." msgstr "" "Des sources de données Facebook et Picasa pour envoyer des images vers ces " "sites. Notez que le groupe possède trois sources de données et que la flèche " "est modifiée pour indiquer que les données ne circulent que dans un seul " "sens, c'est-à-dire que les images sont transférées de F-Spot vers Facebook " "et Picasa." #: ../C/conduit.xml:251(title) msgid "Synchronizing Something" msgstr "Synchronisation d'éléments" #: ../C/conduit.xml:252(para) msgid "" "This section describes the steps required to synchronize two data providers. " "The example given illustrates how to synchronize two folders but the " "concepts are applicable to anything you wish to synchronize. If you need " "more information on specific settings please refer to the corresponding " "section of the documentation." msgstr "" "Cette section explique les étapes nécessaires pour synchroniser deux sources " "de données. L'exemple fourni illustre comment synchroniser deux dossiers, " "mais les concepts peuvent être appliqués à tout ce que vous voulez " "synchroniser. Si vous avez besoin d'informations sur des réglages " "spécifiques, veuillez vous référer à la section correspondante de la " "documentation." #: ../C/conduit.xml:255(para) msgid "" " contains two groups. This section " "will describe the steps to recreate those groups." msgstr "" "La contient deux groupes. Cette " "section décrit les étapes pour recréer ces groupes." #: ../C/conduit.xml:257(para) msgid "The top group depicts a two way synchronization of two folders" msgstr "" "Le groupe du haut représente une synchronisation bidirectionnelle de deux " "dossiers" #: ../C/conduit.xml:258(para) msgid "" "The bottom group depicts a one way sync of images, from F-Spot to Facebook, " "and to the Picasa web albums." msgstr "" "Le groupe du bas représente une synchronisation unidirectionnelle d'images, " "de F-Spot vers les albums Web Facebook et Picasa." #: ../C/conduit.xml:262(title) msgid "Example 1: Synchronizing Two Folders" msgstr "Exemple 1 : synchronisation de deux dossiers" #: ../C/conduit.xml:263(para) msgid "" "The following steps will recreate the two way synchronization group shown as " "#1 in the figure above." msgstr "" "Grâce aux étapes suivantes, vous pouvez recréer le groupe de synchronisation " "bidirectionnelle représenté par le numéro 1 sur la " "figure ci-dessus." #: ../C/conduit.xml:265(para) msgid "" "On your desktop create three folders named folder1, folder2, and folder3. " "Drag a file of your choice into folder1." msgstr "" "Sur votre bureau, créez trois dossiers appelés dossier1, dossier2 et " "dossier3. Faites glisser le fichier de votre choix dans le dossier1." #: ../C/conduit.xml:266(para) ../C/conduit.xml:305(para) msgid "Start Conduit" msgstr "Démarrez Conduit" #: ../C/conduit.xml:268(para) msgid "Add a data provider for folder1" msgstr "Ajoutez une source de données pour le dossier1" #: ../C/conduit.xml:269(para) msgid "" "From the data provider pane, drag the folder data provider and drop it on " "the left hand side of the canvas pane. This will be the data source that we " "are going to sync from." msgstr "" "À partir du volet des sources de données, faites glisser la source de " "données Dossier et déposez-la sur le côté gauche du volet du canevas. C'est " "la source de données à partir de laquelle vous allez faire la " "synchronisation." #: ../C/conduit.xml:272(para) msgid "Configure folder1" msgstr "Configurez le dossier1" #: ../C/conduit.xml:275(title) msgid "Configuring Folder 1" msgstr "Configuration du dossier 1" #: ../C/conduit.xml:273(para) msgid "" "Double click on the data provider you recently dropped on the canvas. This " "will bring up the folder configuration window as shown below. Enter " "something memorable in the name field and change the Folder " "Location to the folder you created in step 1. " msgstr "" "Double-cliquez sur la source de données que vous venez de déposer sur le " "canevas. La fenêtre de configuration du dossier apparaît, comme illustrée ci-" "dessous. Saisissez quelque chose de facile à retenir dans le champ Nom et " "sélectionnez le dossier que vous avez créé à l'étape 1 comme " "Emplacement du dossier. " #: ../C/conduit.xml:287(para) msgid "Add a data provider for folder2" msgstr "Ajoutez une source de données pour le dossier2" #: ../C/conduit.xml:288(para) msgid "" "Drag another folder data provider from the pane on the left. This time drop " "it adjacent to the folder1 dataprovider. This should result in an arrow " "connecting it to folder1 being created." msgstr "" "À partir du volet de gauche, faites glisser une autre source de données " "Dossier. Cette fois-ci, déposez-la à côté de la source de données dossier1. " "Une flèche la reliant au dossier1 est créée." #: ../C/conduit.xml:291(para) msgid "Configure folder2" msgstr "Configurez le dossier2" #: ../C/conduit.xml:292(para) msgid "" "Configure the data provider so that its Folder Location " "points to folder2 on the desktop, and importantly, its " "Folder Name is the same as that entered in step " "#4." msgstr "" "Configurez la source de données de façon à ce que l'Emplacement du " "dossier pointe vers le dossier2 sur le " "bureau et, très important, que son Nom du dossier soit " "le même que celui saisi à l'étape numéro 4." #: ../C/conduit.xml:295(para) msgid "Configure the synchronization parameters" msgstr "Configurez les paramètres de synchronisation" #: ../C/conduit.xml:296(para) msgid "" "Right click on the associated group, and under sync options, select a two " "way sync. Since this is just a basic run through on how to setup a sync we " "are not going to go through any advanced syncing options in this section of " "the documentation. If you wish more information on the options available, " "please see ." msgstr "" "Cliquez avec le bouton droit sur le groupe associé et, parmi les options de " "synchronisation, sélectionnez Synchronisation bidirectionnelle. Puisqu'il " "s'agit seulement d'un exemple simple sur la manière de configurer une " "synchronisation, nous n'allons pas rentrer dans le détail des options " "avancées de synchronisation dans cette section de la documentation. Si vous " "désirez plus d'informations sur les options disponibles, veuillez consulter " "." #: ../C/conduit.xml:298(para) msgid "" "Synchronize the two folders by right clicking on them and selecting sync, or " "from the File menu. Once the sync is finished you should see the file that " "you placed in folder1 on your desktop within folder2." msgstr "" "Synchronisez les deux dossiers en cliquant avec le bouton droit dessus et en " "choisissant Synchroniser, ou à partir du menu Fichier. Une fois que la " "synchronisation est terminée, vous devriez voir apparaître dans le dossier2 " "le fichier que vous aviez placé dans le dossier1 sur le bureau." #: ../C/conduit.xml:302(title) msgid "Example 2: Exporting Images to Multiple Destinations" msgstr "Exemple 2 : exportation d'images vers plusieurs destinations" #: ../C/conduit.xml:303(para) msgid "" "The second group shown in shows a " "single F-Spot data source exporting its photos to two data sinks, a Facebook " "one, and a Picasa one." msgstr "" "Le deuxième groupe représenté sur la montre une source de données F-Spot unique qui exporte ses photos vers " "deux collecteurs de données, un Facebook et un Picasa." #: ../C/conduit.xml:306(para) msgid "Start F-Spot" msgstr "Démarrez F-Spot" #: ../C/conduit.xml:307(para) msgid "" "Drag a F-Spot data provider from the data provider pane and drop it onto an " "empty spot on the canvas. A new group containing just the F-Spot data " "provider will be created." msgstr "" "À partir du volet des sources de données, faites glisser une source de " "données F-Spot et déposez-la sur un emplacement vide du canevas. Un nouveau " "groupe contenant seulement une source de données F-Spot est créé." #: ../C/conduit.xml:308(para) msgid "" "Drag Facebook and Picasa data providers into the Group that was just created." msgstr "" "Faites glisser des sources de données Facebook et Picasa dans le groupe qui " "vient d'être créé." #: ../C/conduit.xml:309(para) msgid "Configure the data providers by double clicking on them." msgstr "Configurez les sources de données en cliquant deux fois sur elles." #: ../C/conduit.xml:310(para) msgid "" "Now synchronize the group to upload photos. You will be prompted to log into " "Facebook using the Conduit login window, shown in ." msgstr "" "Synchronisez maintenant le groupe pour télécharger les photos. On vous " "demandera de vous connecter sur Facebook en utilisant la fenêtre de " "connexion Conduit représentée sur la ." #: ../C/conduit.xml:314(title) msgid "Summary" msgstr "Résumé" #: ../C/conduit.xml:315(para) msgid "" "All sync operations work exactly like this. The only difference is the data " "you are syncing and the providers you are using. You always follow the same " "sequence of steps," msgstr "" "Toutes les opérations de synchronisation fonctionnent exactement de cette " "manière. La seule différence sont les données que vous synchronisez et les " "sources que vous utilisez. Il faut toujours suivre la même série d'étapes," #: ../C/conduit.xml:317(para) msgid "Add dataproviders to create a new group, or to an existing group." msgstr "" "Ajoutez des sources de données dans un nouveau groupe à créer ou dans un " "groupe existant." #: ../C/conduit.xml:318(para) msgid "" "Configure the data providers. Each data provider requires a unique " "configuration. For reference on these please the Data Providers section of the documentation." msgstr "" "Configurez les sources de données. Chaque source de données nécessite une " "configuration propre. Pour obtenir des références sur ces opérations, " "veuillez consulter la section Sources de données de la " "documentation." #: ../C/conduit.xml:319(para) msgid "Configure the group, selecting what should happen on conflict, etc." msgstr "" "Configurez le groupe en choisissant l'action à réaliser en cas de conflit, " "etc." #: ../C/conduit.xml:320(para) msgid "Synchronize the dataproviders as you wish." msgstr "Synchronisez les sources de données quand vous le souhaitez." #: ../C/conduit.xml:325(title) msgid "Network Synchronization" msgstr "Synchronisation en réseau" #: ../C/conduit.xml:326(para) msgid "" "If you have two computers at home, Conduit can be used to synchronize the " "data between them, directly, without first having to store the data " "somewhere else first. The steps below will illustrate how to synchronize " "Tomboy notes on two computers, called nzjrs-desktop and nzjrs-laptop. The " "following key will be used to help explain the setup procedure." msgstr "" "Si vous avez deux ordinateurs à la maison, Conduit peut être utilisé pour " "synchroniser les données entre eux directement sans avoir à enregistrer " "d'abord les données dans un endroit intermédiaire. Les étapes suivantes " "illustrent la manière de synchroniser des notes Tomboy sur deux ordinateurs " "appelés toto-bureau et toto-portable. Les légendes suivantes vont être " "utilisées pour aider à expliquer la procédure de configuration." #: ../C/conduit.xml:329(para) msgid "" " Image " "taken on the first computer." msgstr "" " Image " "prise sur le premier ordinateur." #: ../C/conduit.xml:330(para) msgid "" " Image " "taken on the second computer." msgstr "" " Image " "prise sur le second ordinateur." #: ../C/conduit.xml:335(title) msgid "Network Synchronization Tip" msgstr "Astuces de synchronisation en réseau" #: ../C/conduit.xml:336(para) msgid "" "The process below, although describing Tomboy note synchronization, could be " "suitably modified to synchronize all sorts of data between two computers, " "including Contacts, Calendar information, and even F-Spot photos." msgstr "" "Les opérations ci-dessous, bien que décrivant une synchronisation de notes " "Tomboy, peuvent être modifiées de façon appropriée pour synchroniser toutes " "sortes de données entre deux ordinateurs, y compris des contacts, des " "informations de calendriers et même des photos F-Spot." #: ../C/conduit.xml:341(title) msgid "Configuration of the First Computer" msgstr "Configuration du premier ordinateur" #: ../C/conduit.xml:339(para) msgid "" "On the first computer create a synchronization group connecting Tomboy to " "the Network dataprovider, which is listed in the Miscellaneous category in " "the dataprovider pane. This makes Tomboy available for synchronization on " "the second computer. " msgstr "" "Sur le premier ordinateur, créez un groupe de synchronisation connectant " "Tomboy à une source de données Réseau qui fait partie de la catégorie Divers " "du volet des sources de données. Cela rend Tomboy disponible pour une " "synchronisation avec un deuxième ordinateur. " #: ../C/conduit.xml:351(para) msgid "" "After a short delay, this will result in a new category being created on the " "second computer. The category will take the name of the first computer, " "nzjrs-desktop in my case, and it shall contain any dataproviders currently " "available for synchronization." msgstr "" "Après un court délai, une nouvelle catégorie est créée sur le deuxième " "ordinateur. Cette catégorie porte le nom du premier ordinateur, toto-bureau " "dans ce cas, et contient toutes les sources de données actuellement " "disponibles pour une synchronisation." #: ../C/conduit.xml:354(title) msgid "Configuration of the Second Computer" msgstr "Configuration du deuxième ordinateur" #: ../C/conduit.xml:352(para) msgid "" "Still on the second computer, drag the Tomboy dataprovider from the newly " "created category onto the canvas. Notice how its name is Remote Tomboy, " "indicating it refers to data on the remote, or first, computer. " msgstr "" "Sur le deuxième ordinateur, faites maintenant glisser la source de données " "Tomboy de la catégorie nouvellement créée sur le canevas. Notez que le nom " "est « Tomboy distant », indiquant que cette source désigne des données " "distantes (du premier ordinateur). " #: ../C/conduit.xml:364(para) msgid "Finally, on the second computer, start the sync in the normal manner." msgstr "" "Enfin, sur le deuxième ordinateur, démarrez la synchronisation de la manière " "habituelle." #: ../C/conduit.xml:365(para) msgid "Your tomboy notes should now be synchronized between the two computers." msgstr "" "Vos notes Tomboy devraient être maintenant synchronisées entre les deux " "ordinateurs." #: ../C/conduit.xml:368(title) msgid "File Synchronization" msgstr "Synchronisation de fichiers" #: ../C/conduit.xml:369(para) msgid "" "Due to performance and security reasons, we do not recommend using the " "network sync feature to synchronize large files between two computers. We " "hope to address this limitation in the future." msgstr "" "Pour des raisons de performances et de sécurité, il n'est pas recommandé " "d'utiliser les possibilités de synchronisation réseau pour synchroniser de " "gros fichiers entre deux ordinateurs. Nous espérons lever cette restriction " "dans le futur." #. Put one translator per line, in the form of NAME , YEAR1, YEAR2. #: ../C/conduit.xml:0(None) msgid "translator-credits" msgstr "" "Bruno Brouard , 2008.\n" "Claude Paroz , 2008." conduit-0.3.17/help/fr/conduit.xml0000644000175000017500000007574211326117107013734 00000000000000 Conduit Synchronizer"> ]>
Manuel de Conduit Conduit est un programme de synchronisation d'éléments 2007 John Stowers 2008.Bruno Brouard (annoa.b@gmail.com)2008.Claude Paroz (claude@2xlibre.net) Projet de documentation de GNOME John Stowers Brent Gueth Manuel de Conduit 1.0 03/01/2008 Ce manuel documente la version 1.0 de Conduit
Qu'est ce que Conduit ? Conduit est un programme de synchronisation pour GNOME. Il permet de synchroniser vos fichiers, photos, courriels, contacts, notes, données de calendrier et tout autre type d'informations personnelles et de synchroniser tout ceci avec un autre ordinateur, un service en ligne ou même un autre appareil électronique. Conduit gère la synchronisation et la conversion des données dans les autres formats. Par exemple, Conduit permet de : synchroniser vos notes Tomboy avec celles d'un autre ordinateur ; synchroniser vos données PIM vers votre téléphone portable, iPod, Nokia Internet tablet ou entre des ordinateurs ; télécharger vos photos vers Flickr, Picasa, Smugmug, Shutterfly et votre iPod ; et bien d'autres choses encore... Pour toutes les combinaisons imaginables, Conduit prend en charge les conversions et la synchronisation.
Exemples d'utilisation Frédéric veut synchroniser ses notes Tomboy avec Google Agenda Joe veut synchroniser tout ce qui est sur son bureau vers son compte Backpack Nelly veut qu'un répertoire de son portable reste synchronisé avec celui de son ordinateur de bureau Paul veut conserver ses contacts Evolution synchrones avec ceux de son téléphone mobile Steve veut garder synchrones ses préférences GNOME entre ses deux ordinateurs John veut conserver un répertoire de documents OpenOffice.org synchrone avec les copies stockées sur Google Documents Pierre veut que des photos enregistrées sur son serveur soient sauvegardées par des moyens externes (disque dur USB / ftp hors site)
Introduction Les objectifs de Conduit sont de synchroniser vos données de la manière la plus souple possible, même si elles se trouvent sur du matériel ou des sites Web distants. Il s'agit d'agrandir votre cercle de vie tel que vous le souhaitez, en s'affranchissant des contraintes de données, de matériels ou de formats. Conduit permet de récupérer vos données où et quand vous le voulez. Tous vos appareils mobiles peuvent être synchronisés par Conduit. Souhaitez-vous sauvegarder vos fichiers personnels sur un serveur distant ? Conduit les synchronise automatiquement. Conduit peut parfois paraître exagérément compliqué. Un des objectifs de sa conception a toujours été de rendre l'interface aussi sobre et intuitive que possible. Cependant, Conduit est beaucoup plus puissant que ne pourrait le laisser penser son apparence simpliste. Ce manuel décrit toutes les options de configuration des sources de données et des groupes et vous trouverez ci-dessous des exemples d'éléments qu'il est possible de synchroniser. Un utilisateur GNOME peut enregistrer en des endroits très divers sur son ordinateur des informations telles que : Evolution (courriels, calendriers, carnets d'adresses) Tomboy (notes) Répertoires (fichiers importants) Photos Signets (Web et flux RSS) Musique L'utilisateur peut également utiliser un grand nombre de services en ligne très populaires dont Delicious (signets)Gmail (signets, calendriers, flux RSS, courriel, photos)Flickr (photos) Il possède probablement aussi un autre dispositif électronique tel que un deuxième portable, tournant également sous GNOMEun téléphone mobile un Nokia 770/800un Palm ou un Pocket PC Windows Mobileun iPod Il est suffisamment difficile d'organiser ses informations même en se limitant à son ordinateur de bureau, sans y ajouter encore les problèmes de synchronisation avec les différents services et appareils listés ci-dessus. L'objectif de Conduit est de permettre aux utilisateurs GNOME de conserver leurs informations synchrones, quel que soit leur type ou leur manière d'être stockées. Conduit doit fonctionner, un point c'est tout.
Présentation de l'interface Conduit
Introduction Avant de commencer, il est nécessaire de comprendre quelques principes de base de Conduit. Connaître ces principes va vous aider à découvrir des choses que vous n'auriez jamais pensé à synchroniser ; par exemple, envoyer des photos directement de votre téléphone portable vers Picasa !
Interface graphique de Conduit Les éléments de l'interface graphique de Conduit
La montre les quatre principales parties de l'interface graphique de Conduit : La barre de menus Les menus Fichier, Édition et Aide regroupent les opérations qui s'appliquent à tous les groupes. Pour plus d'informations sur le contenu de ces menus, voir ci-dessous. Le volet des sources de données Situé sur le côté gauche de la fenêtre, il énumère toutes les sources de données détectées et prêtes à être utilisées sur votre système.Les sources de données sont les sources ou les destinations des données que vous souhaitez synchroniser. Veuillez consulter la section Sources de données de la documentation pour obtenir les instructions de configuration des différentes sources. Le volet du canevas Il sert à créer des groupes de sources de données à synchroniser. Faites glisser une source de données vers la gauche du volet du canevas et un ou plusieurs récepteurs de données vers la droite du volet pour créer un groupe. Pour plus d'explications sur les groupes, veuillez lire . Le volet des conflits Si vous recevez des notifications de conflits au cours d'un processus de synchronisation, elles s'affichent à cet endroit. Pour plus d'informations sur la manière de gérer les conflits potentiels, veuillez lire la section Les conflits et leur résolution dans la documentation.
Les menus
Le menu Fichier FichierEnregistrer Conduit enregistre tous les groupes de synchronisation configurés. Les groupes sont enregistrés automatiquement lorsque vous quittez Conduit si l'option Enregistrer les paramètres à la fermeture est cochée dans . FichierTout synchroniser Synchronise tous les groupes à la fois. Vous pouvez quand même synchroniser chaque groupe séparément (voir la section Groupes) mais cela vous fait gagner le temps de sélection et de lancement des synchronisations manuelles de chaque groupe. FichierQuitter Quitte Conduit. Vous devrez indiquer si vous souhaitez arrêter les synchronisations actuellement en cours.
Le menu Édition ÉditionEffacer le canevas Supprime toutes les configurations, les sources de données et les groupes du volet du canevas. Ceci vous permet de reprendre l'utilisation du canevas à partir d'un état vierge. Le meilleur moment pour utiliser cette fonction, c'est lorsque vous reconfigurez une grande partie de vos groupes de synchronisation. Il n'y a pas de méthode rapide pour revenir en arrière après avoir choisi cette option. ÉditionPréférences Réglages globaux de Conduit qui affectent tous vos groupes de synchronisation et toutes les opérations essentielles de Conduit. Pour plus d'informations, veuillez consulter .
Le menu Aide AideDéveloppeurs Si vous êtes développeur et intéressé à contribuer à Conduit, cette option propose des liens vers tous les documents appropriés. AideSommaire Affiche cette aide. AideÀ propos Affiche le numéro de version et la liste des développeurs de Conduit.
La fenêtre des préférences Les préférences de Conduit sont accessibles à partir du menu Édition. Tous les réglages ou modifications que vous faites dans les préférences affectent tous vos groupes de synchronisation et toutes les opérations essentielles de Conduit.
L'onglet Configuration Dans l'onglet Configuration, il est possible de configurer tous les paramètres globaux de Conduit. Il y a six paramètres globaux : Enregistrer les paramètres à la fermeture Indique à Conduit que toutes les sources de données configurés et tous les groupes doivent être enregistrés lorsque le programme se termine. Afficher l'icône d'état Affiche une icône d'état dans la zone de notification. Cette icône s'anime pour indiquer qu'une synchronisation est en cours. Minimiser dans la zone de notification Indique à Conduit de minimiser dans la zone de notification plutôt que dans le tableau de bord. Utiliser le navigateur Web intégré Lorsqu'une source de données a besoin de se connecter sur un site Web, cette option indique à Conduit d'utiliser son propre navigateur Web pour le faire. Quand un objet a été supprimé Quand il y a un conflit bidirectionnel
L'onglet Sources de données Cet onglet affiche une liste des sources de données actuellement installées.
L'onglet Conversions de données Cet onglet recense les conversions de données que Conduit est capable de réaliser.
BD correspondances Une liste des identifiants uniques que Conduit utilise pour maintenir des données synchronisées de différentes sources. Vous avez la possibilité d'effacer la base de données des correspondances.
La fenêtre de connexion Web De temps en temps, il est nécessaire de se connecter sur un site Web associé à certaines sources de données. La fréquence des connexions n'est pas définie par Conduit mais par la politique de sécurité de la source de données respective. Par exemple, Box.net nécessite de se connecter à chaque fois que Conduit est lancé, alors que Flickr n'impose de se connecter qu'une seule fois pour vous donner le droit de télécharger des photos vers Conduit. Lorsqu'il est nécessaire de se connecter sur un site Web et que vous avez choisi l'option Utiliser le navigateur Web intégré comme préférence de Conduit, la fenêtre suivante surgit à l'écran.
La fenêtre de connexion Conduit Fenêtre affichée au cours d'une connexion sur le site Web d'une source de données
Sources et groupes de données Conduit représente graphiquement les éléments à synchroniser. Lorsque des sources de données sont ajoutées au canevas, celles-ci sont agencées par groupe. Un groupe est un ensemble de sources de données qui partagent des données. Sur la figure ci-dessous, il est possible de voir les éléments suivants
Conduit représente graphiquement les synchronisations Les éléments d'un groupe de synchronisation
Une source de données pour synchronisation bidirectionnelle dont le statut indique qu'elle est prêt à être synchronisée. Un groupe contenant deux sources de données Dossier. La flèche possède deux pointes indiquant que les deux sources de données subissent une synchronisation bidirectionnelle, c'est-à-dire que les données circulent dans les deux sens et qu'une fois la synchronisation terminée, les deux dossiers contiennent les mêmes informations. Une deuxième source de données Dossier. Par convention, les sources de données situées du côté droit des groupes sont appelées des collecteurs de données. La raison est que lors d'une synchronisation unidirectionnelle, les données ne peuvent circuler que vers ceux-ci. Des sources de données Facebook et Picasa pour envoyer des images vers ces sites. Notez que le groupe possède trois sources de données et que la flèche est modifiée pour indiquer que les données ne circulent que dans un seul sens, c'est-à-dire que les images sont transférées de F-Spot vers Facebook et Picasa.
Synchronisation d'éléments Cette section explique les étapes nécessaires pour synchroniser deux sources de données. L'exemple fourni illustre comment synchroniser deux dossiers, mais les concepts peuvent être appliqués à tout ce que vous voulez synchroniser. Si vous avez besoin d'informations sur des réglages spécifiques, veuillez vous référer à la section correspondante de la documentation.
Introduction La contient deux groupes. Cette section décrit les étapes pour recréer ces groupes. Le groupe du haut représente une synchronisation bidirectionnelle de deux dossiers Le groupe du bas représente une synchronisation unidirectionnelle d'images, de F-Spot vers les albums Web Facebook et Picasa.
Exemple 1 : synchronisation de deux dossiers Grâce aux étapes suivantes, vous pouvez recréer le groupe de synchronisation bidirectionnelle représenté par le numéro 1 sur la figure ci-dessus. Sur votre bureau, créez trois dossiers appelés dossier1, dossier2 et dossier3. Faites glisser le fichier de votre choix dans le dossier1. Démarrez Conduit Ajoutez une source de données pour le dossier1 À partir du volet des sources de données, faites glisser la source de données Dossier et déposez-la sur le côté gauche du volet du canevas. C'est la source de données à partir de laquelle vous allez faire la synchronisation. Configurez le dossier1 Double-cliquez sur la source de données que vous venez de déposer sur le canevas. La fenêtre de configuration du dossier apparaît, comme illustrée ci-dessous. Saisissez quelque chose de facile à retenir dans le champ Nom et sélectionnez le dossier que vous avez créé à l'étape 1 comme Emplacement du dossier.
Configuration du dossier 1
Ajoutez une source de données pour le dossier2 À partir du volet de gauche, faites glisser une autre source de données Dossier. Cette fois-ci, déposez-la à côté de la source de données dossier1. Une flèche la reliant au dossier1 est créée. Configurez le dossier2 Configurez la source de données de façon à ce que l'Emplacement du dossier pointe vers le dossier2 sur le bureau et, très important, que son Nom du dossier soit le même que celui saisi à l'étape numéro 4. Configurez les paramètres de synchronisation Cliquez avec le bouton droit sur le groupe associé et, parmi les options de synchronisation, sélectionnez Synchronisation bidirectionnelle. Puisqu'il s'agit seulement d'un exemple simple sur la manière de configurer une synchronisation, nous n'allons pas rentrer dans le détail des options avancées de synchronisation dans cette section de la documentation. Si vous désirez plus d'informations sur les options disponibles, veuillez consulter . Synchronisez les deux dossiers en cliquant avec le bouton droit dessus et en choisissant Synchroniser, ou à partir du menu Fichier. Une fois que la synchronisation est terminée, vous devriez voir apparaître dans le dossier2 le fichier que vous aviez placé dans le dossier1 sur le bureau.
Exemple 2 : exportation d'images vers plusieurs destinations Le deuxième groupe représenté sur la montre une source de données F-Spot unique qui exporte ses photos vers deux collecteurs de données, un Facebook et un Picasa. Démarrez Conduit Démarrez F-Spot À partir du volet des sources de données, faites glisser une source de données F-Spot et déposez-la sur un emplacement vide du canevas. Un nouveau groupe contenant seulement une source de données F-Spot est créé. Faites glisser des sources de données Facebook et Picasa dans le groupe qui vient d'être créé. Configurez les sources de données en cliquant deux fois sur elles. Synchronisez maintenant le groupe pour télécharger les photos. On vous demandera de vous connecter sur Facebook en utilisant la fenêtre de connexion Conduit représentée sur la .
Résumé Toutes les opérations de synchronisation fonctionnent exactement de cette manière. La seule différence sont les données que vous synchronisez et les sources que vous utilisez. Il faut toujours suivre la même série d'étapes, Ajoutez des sources de données dans un nouveau groupe à créer ou dans un groupe existant. Configurez les sources de données. Chaque source de données nécessite une configuration propre. Pour obtenir des références sur ces opérations, veuillez consulter la section Sources de données de la documentation. Configurez le groupe en choisissant l'action à réaliser en cas de conflit, etc. Synchronisez les sources de données quand vous le souhaitez.
Synchronisation en réseau Si vous avez deux ordinateurs à la maison, Conduit peut être utilisé pour synchroniser les données entre eux directement sans avoir à enregistrer d'abord les données dans un endroit intermédiaire. Les étapes suivantes illustrent la manière de synchroniser des notes Tomboy sur deux ordinateurs appelés toto-bureau et toto-portable. Les légendes suivantes vont être utilisées pour aider à expliquer la procédure de configuration. Image prise sur le premier ordinateur. Image prise sur le second ordinateur. Astuces de synchronisation en réseau Les opérations ci-dessous, bien que décrivant une synchronisation de notes Tomboy, peuvent être modifiées de façon appropriée pour synchroniser toutes sortes de données entre deux ordinateurs, y compris des contacts, des informations de calendriers et même des photos F-Spot. Sur le premier ordinateur, créez un groupe de synchronisation connectant Tomboy à une source de données Réseau qui fait partie de la catégorie Divers du volet des sources de données. Cela rend Tomboy disponible pour une synchronisation avec un deuxième ordinateur.
Configuration du premier ordinateur
Après un court délai, une nouvelle catégorie est créée sur le deuxième ordinateur. Cette catégorie porte le nom du premier ordinateur, toto-bureau dans ce cas, et contient toutes les sources de données actuellement disponibles pour une synchronisation. Sur le deuxième ordinateur, faites maintenant glisser la source de données Tomboy de la catégorie nouvellement créée sur le canevas. Notez que le nom est « Tomboy distant », indiquant que cette source désigne des données distantes (du premier ordinateur).
Configuration du deuxième ordinateur
Enfin, sur le deuxième ordinateur, démarrez la synchronisation de la manière habituelle. Vos notes Tomboy devraient être maintenant synchronisées entre les deux ordinateurs.
Synchronisation de fichiers Pour des raisons de performances et de sécurité, il n'est pas recommandé d'utiliser les possibilités de synchronisation réseau pour synchroniser de gros fichiers entre deux ordinateurs. Nous espérons lever cette restriction dans le futur.
conduit-0.3.17/help/conduit.omf.in0000644000175000017500000000045111326117107013674 00000000000000 manual conduit-0.3.17/help/Makefile.in0000644000175000017500000007535311326116731013203 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # gnome-doc-utils.make - make magic for building documentation # Copyright (C) 2004-2005 Shaun McCance # # 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. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. ################################################################################ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/gnome-doc-utils.make ChangeLog subdir = help ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ _clean_doc_header = $(if $(DOC_H_FILE),clean-doc-header) _DOC_REAL_FORMATS = $(if $(DOC_USER_FORMATS),$(DOC_USER_FORMATS),$(DOC_FORMATS)) _DOC_REAL_LINGUAS = $(if $(filter environment,$(origin LINGUAS)), \ $(filter $(LINGUAS),$(DOC_LINGUAS)), \ $(DOC_LINGUAS)) _DOC_ABS_SRCDIR = @abs_srcdir@ _xml2po_mode = $(if $(DOC_ID),mallard,docbook) @ENABLE_SK_TRUE@_ENABLE_SK = true ################################################################################ db2omf_args = \ --stringparam db2omf.basename $(DOC_MODULE) \ --stringparam db2omf.format $(3) \ --stringparam db2omf.dtd \ $(shell xmllint --format $(2) | grep -h PUBLIC | head -n 1 \ | sed -e 's/.*PUBLIC \(\"[^\"]*\"\).*/\1/') \ --stringparam db2omf.lang $(notdir $(patsubst %/$(notdir $(2)),%,$(2))) \ --stringparam db2omf.omf_dir "$(OMF_DIR)" \ --stringparam db2omf.help_dir "$(HELP_DIR)" \ --stringparam db2omf.omf_in "$(_DOC_OMF_IN)" \ $(if $(_ENABLE_SK), \ --stringparam db2omf.scrollkeeper_cl "$(_skcontentslist)") \ $(_db2omf) $(2) _DOC_OMF_IN = $(if $(DOC_MODULE),$(wildcard $(_DOC_ABS_SRCDIR)/$(DOC_MODULE).omf.in)) _DOC_OMF_DB = $(if $(_DOC_OMF_IN), \ $(foreach lc,C $(_DOC_REAL_LINGUAS),$(DOC_MODULE)-$(lc).omf)) _DOC_OMF_HTML = $(if $(_DOC_OMF_IN), \ $(foreach lc,C $(_DOC_REAL_LINGUAS),$(DOC_MODULE)-html-$(lc).omf)) # FIXME _DOC_OMF_ALL = \ $(if $(filter docbook,$(_DOC_REAL_FORMATS)),$(_DOC_OMF_DB)) \ $(if $(filter html HTML,$(_DOC_REAL_FORMATS)),$(_DOC_OMF_HTML)) ################################################################################ _DOC_C_MODULE = $(if $(DOC_MODULE),C/$(DOC_MODULE).xml) _DOC_C_PAGES = $(foreach page,$(DOC_PAGES),C/$(page)) _DOC_C_ENTITIES = $(foreach ent,$(DOC_ENTITIES),C/$(ent)) _DOC_C_INCLUDES = $(foreach inc,$(DOC_INCLUDES),C/$(inc)) _DOC_C_DOCS = \ $(_DOC_C_ENTITIES) $(_DOC_C_INCLUDES) \ $(_DOC_C_PAGES) $(_DOC_C_MODULE) _DOC_C_DOCS_NOENT = \ $(_DOC_C_MODULE) $(_DOC_C_INCLUDES) \ $(_DOC_C_PAGES) _DOC_C_FIGURES = $(if $(DOC_FIGURES), \ $(foreach fig,$(DOC_FIGURES),C/$(fig)), \ $(patsubst $(srcdir)/%,%,$(wildcard $(srcdir)/C/figures/*.png))) # FIXME: probably have to shell escape to determine the file names _DOC_C_HTML = $(foreach f, \ $(shell xsltproc --xinclude \ --stringparam db.chunk.basename "$(DOC_MODULE)" \ $(_chunks) "C/$(DOC_MODULE).xml"), \ C/$(f).xhtml) ############################################################################### _DOC_POFILES = $(if $(DOC_MODULE)$(DOC_ID), \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(lc)/$(lc).po)) _DOC_LC_MODULES = $(if $(DOC_MODULE), \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(lc)/$(DOC_MODULE).xml)) _DOC_LC_PAGES = \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach page,$(_DOC_C_PAGES), \ $(lc)/$(notdir $(page)) )) _DOC_LC_INCLUDES = \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach inc,$(_DOC_C_INCLUDES), \ $(lc)/$(notdir $(inc)) )) # FIXME: probably have to shell escape to determine the file names _DOC_LC_HTML = \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach doc,$(_DOC_C_HTML), \ $(lc)/$(notdir $(doc)) )) _DOC_LC_DOCS = \ $(_DOC_LC_MODULES) $(_DOC_LC_INCLUDES) $(_DOC_LC_PAGES) \ $(if $(filter html HTML,$(_DOC_REAL_FORMATS)),$(_DOC_LC_HTML)) _DOC_LC_FIGURES = $(foreach lc,$(_DOC_REAL_LINGUAS), \ $(patsubst C/%,$(lc)/%,$(_DOC_C_FIGURES)) ) _DOC_SRC_FIGURES = \ $(foreach fig,$(_DOC_C_FIGURES), $(foreach lc,C $(_DOC_REAL_LINGUAS), \ $(wildcard $(srcdir)/$(lc)/$(patsubst C/%,%,$(fig))) )) _DOC_POT = $(if $(DOC_MODULE),$(DOC_MODULE).pot) ################################################################################ _DOC_HTML_ALL = $(if $(filter html HTML,$(_DOC_REAL_FORMATS)), \ $(_DOC_C_HTML) $(_DOC_LC_HTML)) _DOC_HTML_TOPS = $(foreach lc,C $(_DOC_REAL_LINGUAS),$(lc)/$(DOC_MODULE).xhtml) _clean_omf = $(if $(_DOC_OMF_IN),clean-doc-omf) _clean_dsk = $(if $(_DOC_DSK_IN),clean-doc-dsk) _clean_lc = $(if $(_DOC_REAL_LINGUAS),clean-doc-lc) _clean_dir = $(if $(DOC_MODULE)$(DOC_ID),clean-doc-dir) _doc_install_dir = $(if $(DOC_ID),$(DOC_ID),$(DOC_MODULE)) DOC_MODULE = conduit DOC_ENTITIES = DOC_INCLUDES = DOC_LINGUAS = de el es fr zh_CN DOC_FIGURES = \ figures/conduit-login.png \ figures/conduit-gui-parts.png \ figures/conduit-dp.png \ figures/conduit-folder-configuration.png \ figures/network-pc1.png \ figures/network-pc2.png \ figures/network-sync-pc1.png \ figures/network-sync-pc2.png all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/gnome-doc-utils.make $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu help/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu help/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic \ maintainer-clean-local mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-local pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ dist-hook distclean distclean-generic distclean-local distdir \ dvi dvi-am html html-am info info-am install install-am \ install-data install-data-am install-data-local install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic \ maintainer-clean-local mostlyclean mostlyclean-generic \ mostlyclean-local pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-local DOC_H_FILE ?= DOC_H_DOCS ?= $(DOC_H_FILE): $(DOC_H_DOCS); @rm -f $@.tmp; touch $@.tmp; echo 'const gchar* documentation_credits[] = {' >> $@.tmp list='$(DOC_H_DOCS)'; for doc in $$list; do \ xmlpath="`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`:$(srcdir)/`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`"; \ if ! test -f "$$doc"; then doc="$(srcdir)/$$doc"; fi; \ xsltproc --path "$$xmlpath" $(_credits) $$doc; \ done | sort | uniq \ | awk 'BEGIN{s=""}{n=split($$0,w,"<");if(s!=""&&s!=substr(w[1],1,length(w[1])-1)){print s};if(n>1){print $$0;s=""}else{s=$$0}};END{if(s!=""){print s}}' \ | sed -e 's/\\/\\\\/' -e 's/"/\\"/' -e 's/\(.*\)/\t"\1",/' >> $@.tmp echo ' NULL' >> $@.tmp echo '};' >> $@.tmp echo >> $@.tmp list='$(DOC_H_DOCS)'; for doc in $$list; do \ xmlpath="`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`:$(srcdir)/`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`"; \ if ! test -f "$$doc"; then doc="$(srcdir)/$$doc"; fi; \ docid=`echo "$$doc" | sed -e 's/.*\/\([^/]*\)\.xml/\1/' \ | sed -e 's/[^a-zA-Z_]/_/g' | tr 'a-z' 'A-Z'`; \ echo $$xmlpath; \ ids=`xsltproc --xinclude --path "$$xmlpath" $(_ids) $$doc`; \ for id in $$ids; do \ echo '#define HELP_'`echo $$docid`'_'`echo $$id \ | sed -e 's/[^a-zA-Z_]/_/g' | tr 'a-z' 'A-Z'`' "'$$id'"' >> $@.tmp; \ done; \ echo >> $@.tmp; \ done; cp $@.tmp $@ && rm -f $@.tmp dist-check-gdu: @HAVE_GNOME_DOC_UTILS_FALSE@ @echo "*** GNOME Doc Utils must be installed in order to make dist" @HAVE_GNOME_DOC_UTILS_FALSE@ @false .PHONY: dist-doc-header dist-doc-header: $(DOC_H_FILE) @if test -f "$(DOC_H_FILE)"; then d=; else d="$(srcdir)/"; fi; \ echo "$(INSTALL_DATA) $${d}$(DOC_H_FILE) $(distdir)/$(DOC_H_FILE)"; \ $(INSTALL_DATA) "$${d}$(DOC_H_FILE)" "$(distdir)/$(DOC_H_FILE)"; doc-dist-hook: dist-check-gdu $(if $(DOC_H_FILE),dist-doc-header) .PHONY: clean-doc-header clean-local: $(_clean_doc_header) distclean-local: $(_clean_doc_header) mostlyclean-local: $(_clean_doc_header) maintainer-clean-local: $(_clean_doc_header) clean-doc-header: rm -f $(DOC_H_FILE) all: $(DOC_H_FILE) ################################################################################ DOC_MODULE ?= DOC_ID ?= DOC_PAGES ?= DOC_ENTITIES ?= DOC_INCLUDES ?= DOC_FIGURES ?= DOC_FORMATS ?= docbook DOC_LINGUAS ?= ################################################################################ _xml2po ?= `which xml2po` _db2html ?= `$(PKG_CONFIG) --variable db2html gnome-doc-utils` _db2omf ?= `$(PKG_CONFIG) --variable db2omf gnome-doc-utils` _malrng ?= `$(PKG_CONFIG) --variable malrng gnome-doc-utils` _chunks ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/chunks.xsl _credits ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/credits.xsl _ids ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/ids.xsl @ENABLE_SK_TRUE@_skpkgdatadir ?= `scrollkeeper-config --pkgdatadir` @ENABLE_SK_TRUE@_sklocalstatedir ?= `scrollkeeper-config --pkglocalstatedir` @ENABLE_SK_TRUE@_skcontentslist ?= $(_skpkgdatadir)/Templates/C/scrollkeeper_cl.xml $(_DOC_OMF_DB) : $(_DOC_OMF_IN) $(_DOC_OMF_DB) : $(DOC_MODULE)-%.omf : %/$(DOC_MODULE).xml @test "x$(_ENABLE_SK)" != "xtrue" -o -f "$(_skcontentslist)" || { \ echo "The file '$(_skcontentslist)' does not exist." >&2; \ echo "Please check your ScrollKeeper installation." >&2; \ exit 1; } xsltproc -o $@ $(call db2omf_args,$@,$<,'docbook') || { rm -f "$@"; exit 1; } $(_DOC_OMF_HTML) : $(_DOC_OMF_IN) $(_DOC_OMF_HTML) : $(DOC_MODULE)-html-%.omf : %/$(DOC_MODULE).xml @ENABLE_SK_TRUE@ @test "x$(_ENABLE_SK)" != "xtrue" -o -f "$(_skcontentslist)" || { \ @ENABLE_SK_TRUE@ echo "The file '$(_skcontentslist)' does not exist" >&2; \ @ENABLE_SK_TRUE@ echo "Please check your ScrollKeeper installation." >&2; \ @ENABLE_SK_TRUE@ exit 1; } xsltproc -o $@ $(call db2omf_args,$@,$<,'xhtml') || { rm -f "$@"; exit 1; } .PHONY: omf omf: $(_DOC_OMF_ALL) .PHONY: po po: $(_DOC_POFILES) $(_DOC_POFILES): @if ! test -d $(dir $@); then \ echo "mkdir $(dir $@)"; \ mkdir "$(dir $@)"; \ fi @if test ! -f $@ -a -f $(srcdir)/$@; then \ echo "cp $(srcdir)/$@ $@"; \ cp "$(srcdir)/$@" "$@"; \ fi; @docs=; \ list='$(_DOC_C_DOCS_NOENT)'; for doc in $$list; do \ docs="$$docs $(_DOC_ABS_SRCDIR)/$$doc"; \ done; \ if ! test -f $@; then \ echo "(cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e $$docs > $(notdir $@).tmp && \ cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp)"; \ (cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e $$docs > $(notdir $@).tmp && \ cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp); \ else \ echo "(cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e -u $(notdir $@) $$docs)"; \ (cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e -u $(notdir $@) $$docs); \ fi # FIXME: fix the dependancy # FIXME: hook xml2po up $(_DOC_LC_DOCS) : $(_DOC_POFILES) $(_DOC_LC_DOCS) : $(_DOC_C_DOCS) if ! test -d $(dir $@); then mkdir $(dir $@); fi if [ -f "C/$(notdir $@)" ]; then d="../"; else d="$(_DOC_ABS_SRCDIR)/"; fi; \ po="$(dir $@)$(patsubst %/$(notdir $@),%,$@).po"; \ if [ -f "$${po}" ]; then po="../$${po}"; else po="$(_DOC_ABS_SRCDIR)/$${po}"; fi; \ (cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e -p "$${po}" \ "$${d}C/$(notdir $@)" > $(notdir $@).tmp && \ cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp) .PHONY: pot pot: $(_DOC_POT) $(_DOC_POT): $(_DOC_C_DOCS_NOENT) $(_xml2po) -m $(_xml2po_mode) -e -o $@ $^ $(_DOC_HTML_TOPS): $(_DOC_C_DOCS) $(_DOC_LC_DOCS) xsltproc -o $@ --xinclude --param db.chunk.chunk_top "false()" --stringparam db.chunk.basename "$(DOC_MODULE)" --stringparam db.chunk.extension ".xhtml" $(_db2html) $(patsubst %.xhtml,%.xml,$@) ################################################################################ all: \ $(_DOC_C_DOCS) $(_DOC_LC_DOCS) \ $(_DOC_OMF_ALL) $(_DOC_DSK_ALL) \ $(_DOC_HTML_ALL) $(_DOC_POFILES) ################################################################################ .PHONY: clean-doc-omf clean-doc-dsk clean-doc-lc clean-doc-dir clean-doc-omf: ; rm -f $(_DOC_OMF_DB) $(_DOC_OMF_HTML) clean-doc-dsk: ; rm -f $(_DOC_DSK_DB) $(_DOC_DSK_HTML) clean-doc-lc: rm -f $(_DOC_LC_DOCS) @list='$(_DOC_POFILES)'; for po in $$list; do \ if ! test "$$po" -ef "$(srcdir)/$$po"; then \ echo "rm -f $$po"; \ rm -f "$$po"; \ fi; \ done @for lc in C $(_DOC_REAL_LINGUAS); do \ if test -f "$$lc/.xml2po.mo"; then \ echo "rm -f $$lc/.xml2po.mo"; \ rm -f "$$lc/.xml2po.mo"; \ fi; \ done clean-doc-dir: clean-doc-lc @for lc in C $(_DOC_REAL_LINGUAS); do \ for dir in `find $$lc -depth -type d`; do \ if ! test $$dir -ef $(srcdir)/$$dir; then \ echo "rmdir $$dir"; \ rmdir "$$dir"; \ fi; \ done; \ done clean-local: \ $(_clean_omf) $(_clean_dsk) \ $(_clean_lc) $(_clean_dir) distclean-local: \ $(_clean_omf) $(_clean_dsk) \ $(_clean_lc) $(_clean_dir) mostlyclean-local: \ $(_clean_omf) $(_clean_dsk) \ $(_clean_lc) $(_clean_dir) maintainer-clean-local: \ $(_clean_omf) $(_clean_dsk) \ $(_clean_lc) $(_clean_dir) ################################################################################ .PHONY: dist-doc-docs dist-doc-pages dist-doc-figs dist-doc-omf dist-doc-dsk doc-dist-hook: \ $(if $(DOC_MODULE)$(DOC_ID),dist-doc-docs) \ $(if $(_DOC_C_FIGURES),dist-doc-figs) \ $(if $(_DOC_OMF_IN),dist-doc-omf) # $(if $(_DOC_DSK_IN),dist-doc-dsk) dist-doc-docs: $(_DOC_C_DOCS) $(_DOC_LC_DOCS) $(_DOC_POFILES) @for lc in C $(_DOC_REAL_LINGUAS); do \ echo " $(mkinstalldirs) $(distdir)/$$lc"; \ $(mkinstalldirs) "$(distdir)/$$lc"; \ done @list='$(_DOC_C_DOCS) $(_DOC_LC_DOCS) $(_DOC_POFILES)'; \ for doc in $$list; do \ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ docdir=`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ if ! test -d "$(distdir)/$$docdir"; then \ echo "$(mkinstalldirs) $(distdir)/$$docdir"; \ $(mkinstalldirs) "$(distdir)/$$docdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$doc $(distdir)/$$doc"; \ $(INSTALL_DATA) "$$d$$doc" "$(distdir)/$$doc"; \ done dist-doc-figs: $(_DOC_SRC_FIGURES) @list='$(_DOC_C_FIGURES) $(_DOC_LC_FIGURES)'; \ for fig in $$list; do \ if test -f "$$fig"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$fig"; then \ figdir=`echo $$fig | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ if ! test -d "$(distdir)/$$figdir"; then \ echo "$(mkinstalldirs) $(distdir)/$$figdir"; \ $(mkinstalldirs) "$(distdir)/$$figdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$fig $(distdir)/$$fig"; \ $(INSTALL_DATA) "$$d$$fig" "$(distdir)/$$fig"; \ fi; \ done; dist-doc-omf: @if test -f "$(_DOC_OMF_IN)"; then d=; else d="$(srcdir)/"; fi; \ echo "$(INSTALL_DATA) $$d$(_DOC_OMF_IN) $(distdir)/$(notdir $(_DOC_OMF_IN))"; \ $(INSTALL_DATA) "$$d$(_DOC_OMF_IN)" "$(distdir)/$(notdir $(_DOC_OMF_IN))" dist-doc-dsk: @if test -f "$(_DOC_DSK_IN)"; then d=; else d="$(srcdir)/"; fi; \ echo "$(INSTALL_DATA) $$d$(_DOC_DSK_IN) $(distdir)/$(notdir $(_DOC_DSK_IN))"; \ $(INSTALL_DATA) "$$d$(_DOC_DSK_IN)" "$(distdir)/$(notdir $(_DOC_DSK_IN))" ################################################################################ .PHONY: check-doc-docs check-doc-omf check: \ $(if $(DOC_MODULE),check-doc-docs) \ $(if $(DOC_ID),check-doc-pages) \ $(if $(_DOC_OMF_IN),check-doc-omf) check-doc-docs: $(_DOC_C_DOCS) $(_DOC_LC_DOCS) @for lc in C $(_DOC_REAL_LINGUAS); do \ if test -f "$$lc"; \ then d=; \ xmlpath="$$lc"; \ else \ d="$(srcdir)/"; \ xmlpath="$$lc:$(srcdir)/$$lc"; \ fi; \ echo "xmllint --noout --noent --path $$xmlpath --xinclude --postvalid $$d$$lc/$(DOC_MODULE).xml"; \ xmllint --noout --noent --path "$$xmlpath" --xinclude --postvalid "$$d$$lc/$(DOC_MODULE).xml"; \ done check-doc-pages: $(_DOC_C_PAGES) $(_DOC_LC_PAGES) for lc in C $(_DOC_REAL_LINGUAS); do \ if test -f "$$lc"; \ then d=; \ xmlpath="$$lc"; \ else \ d="$(srcdir)/"; \ xmlpath="$$lc:$(srcdir)/$$lc"; \ fi; \ for page in $(DOC_PAGES); do \ echo "xmllint --noout --noent --path $$xmlpath --xinclude --relaxng $(_malrng) $$d$$lc/$$page"; \ xmllint --noout --noent --path "$$xmlpath" --xinclude --relaxng "$(_malrng)" "$$d$$lc/$$page"; \ done; \ done check-doc-omf: $(_DOC_OMF_ALL) @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \ echo "xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' $$omf"; \ xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' $$omf; \ done ################################################################################ .PHONY: install-doc-docs install-doc-html install-doc-figs install-doc-omf install-doc-dsk install-data-local: \ $(if $(DOC_MODULE)$(DOC_ID),install-doc-docs) \ $(if $(_DOC_HTML_ALL),install-doc-html) \ $(if $(_DOC_C_FIGURES),install-doc-figs) \ $(if $(_DOC_OMF_IN),install-doc-omf) # $(if $(_DOC_DSK_IN),install-doc-dsk) install-doc-docs: @for lc in C $(_DOC_REAL_LINGUAS); do \ echo "$(mkinstalldirs) $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$lc"; \ $(mkinstalldirs) $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$lc; \ done @list='$(_DOC_C_DOCS) $(_DOC_LC_DOCS)'; for doc in $$list; do \ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ docdir="$$lc/"`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ docdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$docdir"; \ if ! test -d "$$docdir"; then \ echo "$(mkinstalldirs) $$docdir"; \ $(mkinstalldirs) "$$docdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ $(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc; \ done install-doc-figs: @list='$(patsubst C/%,%,$(_DOC_C_FIGURES))'; for fig in $$list; do \ for lc in C $(_DOC_REAL_LINGUAS); do \ figsymlink=false; \ if test -f "$$lc/$$fig"; then \ figfile="$$lc/$$fig"; \ elif test -f "$(srcdir)/$$lc/$$fig"; then \ figfile="$(srcdir)/$$lc/$$fig"; \ else \ figsymlink=true; \ fi; \ figdir="$$lc/"`echo $$fig | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ figdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$figdir"; \ if ! test -d "$$figdir"; then \ echo "$(mkinstalldirs) $$figdir"; \ $(mkinstalldirs) "$$figdir"; \ fi; \ figbase=`echo $$fig | sed -e 's/^.*\///'`; \ if $$figsymlink; then \ echo "cd $$figdir && $(LN_S) -f ../../C/$$fig $$figbase"; \ ( cd "$$figdir" && $(LN_S) -f "../../C/$$fig" "$$figbase" ); \ else \ echo "$(INSTALL_DATA) $$figfile $$figdir$$figbase"; \ $(INSTALL_DATA) "$$figfile" "$$figdir$$figbase"; \ fi; \ done; \ done install-doc-html: echo install-html install-doc-omf: $(mkinstalldirs) $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir) @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \ echo "$(INSTALL_DATA) $$omf $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ $(INSTALL_DATA) $$omf $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf; \ done @if test "x$(_ENABLE_SK)" = "xtrue"; then \ echo "scrollkeeper-update -p $(DESTDIR)$(_sklocalstatedir) -o $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)"; \ scrollkeeper-update -p "$(DESTDIR)$(_sklocalstatedir)" -o "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)"; \ fi; install-doc-dsk: echo install-dsk ################################################################################ .PHONY: uninstall-doc-docs uninstall-doc-html uninstall-doc-figs uninstall-doc-omf uninstall-doc-dsk uninstall-local: \ $(if $(DOC_MODULE)$(DOC_ID),uninstall-doc-docs) \ $(if $(_DOC_HTML_ALL),uninstall-doc-html) \ $(if $(_DOC_C_FIGURES),uninstall-doc-figs) \ $(if $(_DOC_OMF_IN),uninstall-doc-omf) # $(if $(_DOC_DSK_IN),uninstall-doc-dsk) uninstall-doc-docs: @list='$(_DOC_C_DOCS) $(_DOC_LC_DOCS)'; for doc in $$list; do \ echo " rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ done uninstall-doc-figs: @list='$(_DOC_C_FIGURES) $(_DOC_LC_FIGURES)'; for fig in $$list; do \ echo "rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$fig"; \ rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$fig"; \ done; uninstall-doc-omf: @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \ if test "x$(_ENABLE_SK)" = "xtrue"; then \ echo "scrollkeeper-uninstall -p $(_sklocalstatedir) $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ scrollkeeper-uninstall -p "$(_sklocalstatedir)" "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ fi; \ echo "rm -f $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ rm -f "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ done dist-hook: doc-dist-hook # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/mkinstalldirs0000755000175000017500000000672211326116731013006 00000000000000#! /bin/sh # mkinstalldirs --- make directory hierarchy scriptversion=2009-04-28.21; # UTC # Original author: Noah Friedman # Created: 1993-05-16 # Public domain. # # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' IFS=" "" $nl" errstatus=0 dirmode= usage="\ Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... Create each directory DIR (with mode MODE, if specified), including all leading file name components. Report bugs to ." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" exit $? ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --version) echo "$0 $scriptversion" exit $? ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac # Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and # mkdir -p a/c at the same time, both will detect that a is missing, # one will create a, then the other will try to create a and die with # a "File exists" error. This is a problem when calling mkinstalldirs # from a parallel make. We use --version in the probe to restrict # ourselves to GNU mkdir, which is thread-safe. case $dirmode in '') if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. test -d ./-p && rmdir ./-p test -d ./--version && rmdir ./--version fi ;; *) if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" else # Clean up after NextStep and OpenStep mkdir. for d in ./-m ./-p ./--version "./$dirmode"; do test -d $d && rmdir $d done fi ;; esac for file do case $file in /*) pathcomp=/ ;; *) pathcomp= ;; esac oIFS=$IFS IFS=/ set fnord $file shift IFS=$oIFS for d do test "x$d" = x && continue pathcomp=$pathcomp$d case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr= chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp=$pathcomp/ done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: conduit-0.3.17/tools/0000777000175000017500000000000011326117107011413 500000000000000conduit-0.3.17/tools/nautilus-extension/0000777000175000017500000000000011326117107015271 500000000000000conduit-0.3.17/tools/nautilus-extension/Makefile.am0000644000175000017500000000021611172176633017250 00000000000000if ENABLE_NAUTILUS_EXTENSION nautextdir = $(NAUTILUS_EXTENSION_DIR) nautext_PYTHON = conduit.py endif EXTRA_DIST = \ conduit.py \ README conduit-0.3.17/tools/nautilus-extension/README0000644000175000017500000000103611172176633016075 00000000000000Conduit.py is a small nautilus extension that allows you to use conduit to directly upload files in a folder to a remote location. Currently flickr, picasa and box.net are supported, but this can easily be extended. What you need: * conduit trunk or anything beyond 0.3.4 * python-nautilus; to enable nautilus python extensions * put the conduit.py file under ~/.nautilus/python-extensions * restart nautilus If you want to debug, help, ... It is easier to do the following 1. mkdir ~/test 2. export TMPDIR=~/test 3. nautilus --no-desktop conduit-0.3.17/tools/nautilus-extension/conduit.py0000644000175000017500000002067611326116040017232 00000000000000""" Conduit Nautilus extension Copyright (c) 2007 Thomas Van Machelen Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import os import nautilus import dbus, dbus.glib try: import libconduit except ImportError: import conduit.libconduit as libconduit DEBUG = True FOLDER_TWOWAY = "FolderTwoWay" FOLDER_TWOWAY_CONFIG = "%sHomeFalse" SUPPORTED_SINKS = { "FlickrTwoWay" : "Upload to Flickr", "PicasaTwoWay" : "Upload to Picasa", "SmugMugTwoWay" : "Upload to SmugMug", "BoxDotNetTwoWay" : "Upload to Box.net", "FolderTwoWay" : "Synchronize with Another Folder" } #if DEBUG: # SUPPORTED_SINKS["TestFileSink"] = "Test" class ItemCallbackHandler: """ This class can be used to create a callback method for a given conduit sink """ def __init__ (self, sink_name, conduitApplication): self.sink_name = sink_name self.conduitApp = conduitApplication self.conduit = None self.config_path = os.path.join(libconduit.PLUGIN_CONFIG_DIR, "nautilus-extension") if not os.path.exists(self.config_path): try: os.makedirs(self.config_path) except OSError: pass def activate_cb(self, menu, folder): """ This is the callback method that can be attached to the activate signal of a nautilus menu """ if self.conduitApp.connected(): app = self.conduitApp.get_application() else: return # it has got to be there if folder.is_gone (): return # get uri uri = folder.get_uri() # check if they needed providers are available dps = self.conduitApp.get_dataproviders() if not FOLDER_TWOWAY in dps and not self.sink_name in dps: return # create dataproviders folder_twoway_path = app.GetDataProvider(dps[FOLDER_TWOWAY]) sink_path = app.GetDataProvider(dps[self.sink_name]) bus = dbus.SessionBus() # set up folder config folder_twoway = bus.get_object(libconduit.DATAPROVIDER_DBUS_IFACE, folder_twoway_path) folder_twoway.SetConfigurationXml(FOLDER_TWOWAY_CONFIG % uri) # get flickr dbus object self.sink = bus.get_object(libconduit.DATAPROVIDER_DBUS_IFACE, sink_path) # now create conduit conduit_path = app.BuildConduit (folder_twoway_path, sink_path) self.conduit = bus.get_object(libconduit.CONDUIT_DBUS_IFACE, conduit_path) self.conduit.connect_to_signal("SyncCompleted", self.on_sync_completed, dbus_interface=libconduit.CONDUIT_DBUS_IFACE) # check if we have configuration on disk; set it on dataprovider xml = self.get_configuration(self.sink_name) if xml: self.sink.SetConfigurationXml(xml) #Get the syncset self.ss = bus.get_object(libconduit.SYNCSET_DBUS_IFACE, libconduit.SYNCSET_GUI_PATH) self.ss.AddConduit(self.conduit, dbus_interface=libconduit.SYNCSET_DBUS_IFACE) # configure the sink; and perform the actual synchronisation # when the configuration is finished self.sink.Configure(reply_handler=self._configure_reply_handler, error_handler=self._configure_error_handler) def get_configuration(self, sink_name): """ Gets the latest configuration for a given dataprovider """ if not os.path.exists(os.path.join(self.config_path, sink_name)): return f = open(os.path.join(self.config_path, sink_name), 'r') xml = f.read () f.close() return xml def save_configuration(self, sink_name, xml): """ Saves the configuration xml from a given dataprovider again """ f = open(os.path.join(self.config_path, sink_name), 'w') f.write(xml) f.close() def on_sync_completed(self, abort, error, conflict): self.ss.DeleteConduit(self.conduit, dbus_interface=libconduit.SYNCSET_DBUS_IFACE) print "Finished" def _configure_reply_handler(self): """ Finish the setup: save existing configuration and perform synchronise """ # get out configuration xml xml = self.sink.GetConfigurationXml() # write it to disk self.save_configuration(self.sink_name, xml) # do it to me, baby, real good! self.conduit.Sync(dbus_interface=libconduit.CONDUIT_DBUS_IFACE) def _configure_error_handler(self, error): print "CONFIGURE ERROR: %s" % error self.ss.DeleteConduit(self.conduit, dbus_interface=libconduit.SYNCSET_DBUS_IFACE) class ConduitExtension(nautilus.MenuProvider): """ This is the actual extension """ def __init__(self): self.debug = DEBUG self.conduit = libconduit.ConduitApplicationWrapper( conduitWrapperKlass=None, #N/A in out usage cf. eog-plugin addToGui=False, #N/A in our usage cf. eog-plugin store=False, #N/A in our usage cf. eog-plugin debug=self.debug ) self.conduit.connect("conduit-started", self._on_conduit_started) self.conduit.connect_to_conduit(startConduit=False) self.dps = self._get_dataproviders() def _get_dataproviders(self): #restrict dps to those we know about return [dp for dp in self.conduit.get_dataproviders() if dp in SUPPORTED_SINKS] def _on_conduit_started(self, sender, started): self.dps = self._get_dataproviders() def get_file_items(self, window, files): if self.conduit.connected(): if len(files) == 1: file_ = files[0] if file_.is_directory(): submenu = nautilus.Menu() for dp in self.dps: name = dp desc = SUPPORTED_SINKS[dp] #make the menu item item = nautilus.MenuItem( 'Conduit::SynchronizeTo%s' % name, desc, '', 'image-x-generic' ) cb = ItemCallbackHandler(name, self.conduit) item.connect('activate', cb.activate_cb, file_) submenu.append_item(item) menuitem = nautilus.MenuItem( 'Conduit::', 'Conduit', '', 'conduit' ) menuitem.set_submenu(submenu) return menuitem, return None conduit-0.3.17/tools/nautilus-extension/Makefile.in0000644000175000017500000002443711326116731017266 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = tools/nautilus-extension DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ conduit.py \ README all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/nautilus-extension/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/nautilus-extension/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am @ENABLE_NAUTILUS_EXTENSION_TRUE@ nautextdir = $(NAUTILUS_EXTENSION_DIR) @ENABLE_NAUTILUS_EXTENSION_TRUE@ nautext_PYTHON = conduit.py # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/tools/Makefile.am0000644000175000017500000000022211172176633013367 00000000000000SUBDIRS = nautilus-extension eog-plugin totem-plugin clientbindir = $(bindir) clientbin_SCRIPTS = conduit-client EXTRA_DIST = \ conduit-client conduit-0.3.17/tools/totem-plugin/0000777000175000017500000000000011326117107014037 500000000000000conduit-0.3.17/tools/totem-plugin/conduit.totem-plugin0000644000175000017500000000041611172176633017777 00000000000000[Totem Plugin] Loader=python Module=conduit IAge=1 Name=Conduit Uploader Description=Upload your videos to a number of video sites. Authors=Philip Withnall Copyright=Copyright © 2008 Philip Withnall Website=http://www.gnome.org/projects/totem/ conduit-0.3.17/tools/totem-plugin/Makefile.am0000644000175000017500000000027311172176633016021 00000000000000if ENABLE_TOTEM_PLUGIN plugindir = $(TOTEM_PLUGIN_DIR)/conduit plugin_PYTHON = conduit.py plugin_DATA = conduit.totem-plugin endif EXTRA_DIST = \ conduit.py \ conduit.totem-plugin conduit-0.3.17/tools/totem-plugin/conduit.py0000644000175000017500000000772611172176633016016 00000000000000import os import totem import gtk import dbus, dbus.glib try: import libconduit except ImportError: import conduit.libconduit as libconduit DEBUG = True MENU_PATH="/tmw-menubar/movie/properties" SUPPORTED_SINKS = { "YouTubeTwoWay" : "Upload to YouTube", } if DEBUG: SUPPORTED_SINKS["TestVideoSink"] = "Test" class TotemConduitWrapper(libconduit.ConduitWrapper): CONFIG_NAME="totem-plugin" def add_rowref(self): #store the rowref in the store with the icon conduit gave us info = self.conduit.SinkGetInformation(dbus_interface=libconduit.EXPORTER_DBUS_IFACE) desc = SUPPORTED_SINKS[self.name] self._add_rowref( name=desc, uri="", status="ready", pixbuf=None ) class ConduitPlugin(totem.Plugin): def __init__(self): self.debug = DEBUG self.conduit = libconduit.ConduitApplicationWrapper( conduitWrapperKlass=TotemConduitWrapper, addToGui=self.debug, store=True, debug=self.debug ) self.conduit.connect("conduit-started", self._on_conduit_started) self.running = self.conduit.connect_to_conduit(startConduit=True) self.opened = False def _on_conduit_started(self, sender, started): self.running = started self.top_level_action.set_sensitive(self.opened and self.running) def _on_upload_clicked(self, action, totem_object): current_uri = totem_object.get_current_mrl() name = action.get_property("name") # Add the file to the list and sync it immediately self.conduit.upload(name, current_uri, None) self.conduit.sync() def _on_file_opened(self, totem_object, mrl): self.opened = True self.top_level_action.set_sensitive(self.running) def _on_file_closed(self, totem_object): self.opened = False self.top_level_action.set_sensitive(False) def activate(self, totem_object): totem_object.connect("file-opened", self._on_file_opened) totem_object.connect("file-closed", self._on_file_closed) ui_action_group = gtk.ActionGroup("ConduitPluginActions") manager = totem_object.get_ui_manager() # Make an action for each sink for sink_name in SUPPORTED_SINKS: desc = SUPPORTED_SINKS[sink_name] action = gtk.Action(name = sink_name, stock_id = "internet", label = desc, tooltip = "") action.connect("activate", self._on_upload_clicked, totem_object) ui_action_group.add_action(action) # Create a top-level menu self.top_level_action = gtk.Action(name = "sync", stock_id = "internet", label = _("_Share"), tooltip = "") ui_action_group.add_action(self.top_level_action) manager.insert_action_group(ui_action_group, -1) mid = manager.new_merge_id() manager.add_ui(merge_id = mid, path = MENU_PATH, name = "sync", action = "sync", type = gtk.UI_MANAGER_MENU, top = False) # Add each action to the menu for sink_name in SUPPORTED_SINKS: mid = manager.new_merge_id() manager.add_ui(merge_id = mid, path = "/tmw-menubar/movie/sync/", name = sink_name, action = sink_name, type = gtk.UI_MANAGER_MENUITEM, top = False) # Make sure the menu starts disabled self.top_level_action.set_sensitive(False) def deactivate(self, window): pass def update_ui(self, window): pass def is_configurable(self): return False conduit-0.3.17/tools/totem-plugin/Makefile.in0000644000175000017500000002450611326116731016031 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = tools/totem-plugin DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ conduit.py \ conduit.totem-plugin all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/totem-plugin/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/totem-plugin/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am @ENABLE_TOTEM_PLUGIN_TRUE@ plugindir = $(TOTEM_PLUGIN_DIR)/conduit @ENABLE_TOTEM_PLUGIN_TRUE@ plugin_PYTHON = conduit.py @ENABLE_TOTEM_PLUGIN_TRUE@ plugin_DATA = conduit.totem-plugin # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/tools/eog-plugin/0000777000175000017500000000000011326117107013461 500000000000000conduit-0.3.17/tools/eog-plugin/conduit.eog-plugin0000644000175000017500000000037711172176633017051 00000000000000[Eog Plugin] Loader=python Module=conduit IAge=2 Name=Conduit Uploader Description=Upload your photos to a number of photo sites. Authors=Lucas Rocha Copyright=Copyright © 2007 John Stowers Website=http://www.conduit-project.org conduit-0.3.17/tools/eog-plugin/Makefile.am0000644000175000017500000000025211172176633015440 00000000000000if ENABLE_EOG_PLUGIN plugindir = $(EOG_PLUGIN_DIR) plugin_PYTHON = conduit.py plugin_DATA = conduit.eog-plugin endif EXTRA_DIST = \ conduit.py \ conduit.eog-plugin conduit-0.3.17/tools/eog-plugin/README0000644000175000017500000000000011172176633014253 00000000000000conduit-0.3.17/tools/eog-plugin/conduit.py0000644000175000017500000001603111326116025015413 00000000000000import os import eog import gtk import dbus, dbus.glib try: import libconduit except ImportError: import conduit.libconduit as libconduit DEBUG = True ICON_SIZE = 24 SUPPORTED_SINKS = { "FlickrTwoWay" : "Upload to Flickr", "PicasaTwoWay" : "Upload to Picasa", "SmugMugTwoWay" : "Upload to SmugMug", "ShutterflySink" : "Upload to Shutterfly", "BoxDotNetTwoWay" : "Upload to Box.net", "FacebookSink" : "Upload to Facebook", "IPodPhotoSink" : "Add to iPod" } #if DEBUG: # SUPPORTED_SINKS["TestImageSink"] = "Test Image Sink" class EogConduitWrapper(libconduit.ConduitWrapper): CONFIG_NAME="eog-plugin" def add_rowref(self): #store the rowref in the store with the icon conduit gave us info = self.conduit.SinkGetInformation(dbus_interface=libconduit.EXPORTER_DBUS_IFACE) desc = SUPPORTED_SINKS[self.name] self._add_rowref( name=desc, uri="", status="ready", pixbuf=gtk.gdk.pixbuf_new_from_file_at_size(info['icon_path'], ICON_SIZE, ICON_SIZE) ) class ConduitPlugin(eog.Plugin): def __init__(self): self.debug = DEBUG self.conduit = libconduit.ConduitApplicationWrapper( conduitWrapperKlass=EogConduitWrapper, addToGui=self.debug, store=True, debug=self.debug ) self.conduit.connect("conduit-started", self._on_conduit_started) self.running = self.conduit.connect_to_conduit(startConduit=False) #dictionary holding items that are set sensitive or not when #conduit is started/stopped self.windows = {} def _debug(self, msg): if self.debug: print "EOG: ", msg def _on_conduit_started(self, sender, started): self._debug("Conduit started: %s" % started) self.running = started #set (in)sensitive on widgets in all windows for box, ui_action_group in self.windows.values(): box.set_sensitive(self.running) ui_action_group.set_sensitive(self.running) def _on_upload_clicked(self, sender, window): eogImage = window.get_image() name = sender.get_property("name") if eogImage != None: thumb = eogImage.get_thumbnail() pb = thumb.scale_simple(ICON_SIZE,ICON_SIZE,gtk.gdk.INTERP_BILINEAR) uri = eogImage.get_uri_for_display() self.conduit.upload(name, uri, pb) def _on_sync_clicked(self, sender, window): self.conduit.sync() def _on_clear_clicked(self, sender, window): self.conduit.clear() def _on_row_activated(self, treeview, path, view_column): #check the user didnt click a header row rowref = treeview.get_model().get_iter(path) if treeview.get_model().iter_depth(rowref) == 0: return #open eog to show the image clickedUri = treeview.get_model()[path][2] app = eog.eog_application_get_instance() app.open_uri_list((clickedUri,)) def _prepare_ui(self, window): # #the sidebar is a treeview where photos to upload are grouped by the #upload service, with a clear button and an upload button below # box = gtk.VBox() box.set_sensitive(self.running) view = gtk.TreeView(self.conduit.store) view.connect("row-activated", self._on_row_activated) view.set_headers_visible(False) box.pack_start(view,expand=True,fill=True) bbox = gtk.HButtonBox() box.pack_start(bbox,expand=False,fill=True) #two colums, an icon and a description/name col0 = gtk.TreeViewColumn("Pic", gtk.CellRendererPixbuf(), pixbuf=libconduit.ConduitWrapper.PB_IDX) view.append_column(col0) #second colum is the dataprovider name + status, or the filename nameRenderer = gtk.CellRendererText() col1 = gtk.TreeViewColumn("Name", nameRenderer) col1.set_cell_data_func(nameRenderer, self._name_data_func) view.append_column(col1) #upload and clear button okbtn = gtk.Button(label="Synchronize") okbtn.set_image( gtk.image_new_from_stock(gtk.STOCK_REFRESH,gtk.ICON_SIZE_BUTTON) ) okbtn.connect("clicked",self._on_sync_clicked, window) clearbtn = gtk.Button(stock=gtk.STOCK_CLEAR) clearbtn.connect("clicked",self._on_clear_clicked, window) bbox.pack_start(okbtn,expand=True) bbox.pack_start(clearbtn,expand=True) sidebar = window.get_sidebar() sidebar.add_page("Photo Uploads", box) sidebar.show_all() # #add items to the tools menu, when clicked the current #image is queued with the service to upload # ui_action_group = gtk.ActionGroup("ConduitPluginActions") manager = window.get_ui_manager() #make an action for each sink for sinkName in SUPPORTED_SINKS: desc = SUPPORTED_SINKS[sinkName] action = gtk.Action( name=sinkName, stock_id="internet", label=desc, tooltip="" ) action.connect("activate",self._on_upload_clicked, window) ui_action_group.add_action(action) manager.insert_action_group(ui_action_group,-1) #add each action to the menu for sinkName in SUPPORTED_SINKS: mid = manager.new_merge_id() manager.add_ui( merge_id=mid, path="/MainMenu/ToolsMenu/ToolsOps_2", #Tools menu name=sinkName, action=sinkName, type=gtk.UI_MANAGER_MENUITEM, top=False) #store a reference to the box and action_group as we #set them (in)sensitive when conduit is started/stopped self.windows[window] = (box, ui_action_group) def _name_data_func(self, column, cell_renderer, tree_model, rowref): name = tree_model.get_value(rowref, libconduit.ConduitWrapper.NAME_IDX) #render the headers different to the data if tree_model.iter_depth(rowref) == 0: status = tree_model.get_value(rowref, libconduit.ConduitWrapper.STATUS_IDX) name = '%s (%s)' % (name,status) cell_renderer.set_property("markup", name) def activate(self, window): self._debug("Activate") self._prepare_ui(window) def deactivate(self, window): self._debug("Deactivate") box,ui_action_group = self.windows[window] window.get_sidebar().remove_page(box) window.get_ui_manager().remove_action_group(ui_action_group) self.conduit.clear() def update_ui(self, window): self._debug("Update UI") def is_configurable(self): return False conduit-0.3.17/tools/eog-plugin/Makefile.in0000644000175000017500000002446311326116731015455 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = tools/eog-plugin DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ conduit.py \ conduit.eog-plugin all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/eog-plugin/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/eog-plugin/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am @ENABLE_EOG_PLUGIN_TRUE@ plugindir = $(EOG_PLUGIN_DIR) @ENABLE_EOG_PLUGIN_TRUE@ plugin_PYTHON = conduit.py @ENABLE_EOG_PLUGIN_TRUE@ plugin_DATA = conduit.eog-plugin # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/tools/conduit-client0000755000175000017500000001552311172176633014214 00000000000000#!/usr/bin/env python import os, os.path import sys import getopt import dbus, dbus.glib import gobject APPLICATION_DBUS_IFACE="org.conduit.Application" SYNCSET_DBUS_IFACE="org.conduit.SyncSet" CONDUIT_DBUS_IFACE="org.conduit.Conduit" EXPORTER_DBUS_IFACE="org.conduit.Exporter" DATAPROVIDER_DBUS_IFACE="org.conduit.DataProvider" class Conduit(object): def __init__(self, start): self.bus = dbus.SessionBus() self.loop = gobject.MainLoop() if start: self.get_conduit_app() else: obj = self.bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus') dbus_iface = dbus.Interface(obj, 'org.freedesktop.DBus') if dbus_iface.NameHasOwner(APPLICATION_DBUS_IFACE): self.get_conduit_app() else: raise Exception("Could not connect to conduit") def get_conduit_app(self): try: remote_object = self.bus.get_object(APPLICATION_DBUS_IFACE,"/") self.app = dbus.Interface(remote_object, APPLICATION_DBUS_IFACE) except dbus.exceptions.DBusException: raise Exception("Could not connect to conduit") def list_dataproviders(self): print "Available Dataproviders" for dp in self.app.GetAllDataProviders(): print " *\t%s" % dp def on_sync_progress(self, progress, uids): print "Synchronization %2.2f%% complete" % (progress*100.0) def on_sync_completed(self, abort, error, conflict): if self.deleteConduitWhenFinished: self.ss.DeleteConduit(self.conduit, dbus_interface=SYNCSET_DBUS_IFACE) self.loop.quit() print "Finished" def do_sync(self): print "Refreshing" #and the normal iface to sync self.conduit.Sync(dbus_interface=CONDUIT_DBUS_IFACE) self.loop.run() def sync(self, syncSet, sink, config, files, deleteConduitWhenFinished, twoWay): #options self.deleteConduitWhenFinished = deleteConduitWhenFinished # create dataproviders if twoWay: source_path = self.app.GetDataProvider("FolderTwoWay") else: source_path = self.app.GetDataProvider("FileSource") source_obj = self.bus.get_object(DATAPROVIDER_DBUS_IFACE, source_path) sink_path = self.app.GetDataProvider(sink) sink_obj = self.bus.get_object(DATAPROVIDER_DBUS_IFACE, sink_path) self.sink = dbus.Interface(sink_obj, DATAPROVIDER_DBUS_IFACE) if self.sink.IsPending(): raise Exception("Could not find dataprovider: %s" % sink) #configure if config != None: self.sink.SetConfigurationXml(config) if not self.sink.IsConfigured(False, twoWay): self.sink.Configure() # now create conduit conduit_path = self.app.BuildConduit (source_path, sink_path) self.conduit = self.bus.get_object(CONDUIT_DBUS_IFACE, conduit_path) self.conduit.connect_to_signal("SyncProgress", self.on_sync_progress, dbus_interface=CONDUIT_DBUS_IFACE) self.conduit.connect_to_signal("SyncCompleted", self.on_sync_completed, dbus_interface=CONDUIT_DBUS_IFACE) #two way or not? if twoWay: self.conduit.EnableTwoWaySync(dbus_interface=CONDUIT_DBUS_IFACE) #add the data for f in files: source_obj.AddData(f, dbus_interface=DATAPROVIDER_DBUS_IFACE) #add the conduit to the syncset self.ss = self.bus.get_object(SYNCSET_DBUS_IFACE, syncSet) self.ss.AddConduit(self.conduit, dbus_interface=SYNCSET_DBUS_IFACE) self.do_sync() def usage(): print "Synchronizes files with a conduit dataprovider\n" + \ "Usage:\n\n" + \ "conduit-client -s SinkName [OPTIONS] files...\n\n" + \ "Options:\n\n" + \ " -h, --help Display Help\n" + \ " -c, --sink-configuration XML Configuration for the sink\n" + \ " -k, --keep Dont delete conduit after sync\n" + \ " -l, --list-dataproviders List available dataprovders\n" + \ " -x, --dont-start Dont start conduit (must be running)\n" + \ " -g, --gui Display in GUI\n" + \ " -t, --two-way Twoway Sync" def error(msg): print "\nERROR : %s" % msg ################################################################################ # Main ################################################################################ if __name__ == "__main__": try: opts, args = getopt.getopt(sys.argv[1:], "s:c:klxgth", ["sink=", "sink-configuration=", "keep", "list-dataproviders", "dont-start", "gui", "two-way", "help"]) except getopt.GetoptError: usage() sys.exit(1) #Defaults sinkName = None sinkConfig = None gui = False keep = False listDps = False startConduit = True syncSetPath = "/syncset/dbus" twoWay = False for o, a in opts: if o in ("-s", "--sink"): sinkName = a if o in ("-c", "--sink-configuration"): sinkConfig = a if o in ("-k", "--keep"): keep = True if o in ("-l", "--list-dataproviders"): listDps = True if o in ("-x", "--dont-start"): startConduit = False if o in ("-g", "--gui"): syncSetPath = "/syncset/gui" if o in ("-t", "--two-way"): twoWay = True if o in ("-h", "--help"): usage() sys.exit() if not listDps: if None in [sinkName]: usage() error("Please specify all compulsory arguments") sys.exit(1) files = [] for a in args: path = os.path.abspath(a) if os.path.exists(path): files.append(os.path.expanduser(path)) if len(files) == 0: usage() error("Please specify files to sync") sys.exit(1) if twoWay: if len(files) == 1 and os.path.isdir(files[0]): pass else: usage() error("Twoway sync expects a folder as its only argument") sys.exit(1) #Connect to conduit try: conduit = Conduit(start=startConduit) if listDps == True: conduit.list_dataproviders() sys.exit() else: conduit.sync( syncSet=syncSetPath, sink=sinkName, config=sinkConfig, files=files, deleteConduitWhenFinished=not keep, twoWay=twoWay ) except Exception, err: error(err.message) sys.exit(1) conduit-0.3.17/tools/Makefile.in0000644000175000017500000004771011326116731013407 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = tools DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(clientbindir)" SCRIPTS = $(clientbin_SCRIPTS) SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = nautilus-extension eog-plugin totem-plugin clientbindir = $(bindir) clientbin_SCRIPTS = conduit-client EXTRA_DIST = \ conduit-client all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-clientbinSCRIPTS: $(clientbin_SCRIPTS) @$(NORMAL_INSTALL) test -z "$(clientbindir)" || $(MKDIR_P) "$(DESTDIR)$(clientbindir)" @list='$(clientbin_SCRIPTS)'; test -n "$(clientbindir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(clientbindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(clientbindir)$$dir" || exit $$?; \ } \ ; done uninstall-clientbinSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(clientbin_SCRIPTS)'; test -n "$(clientbindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(clientbindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(clientbindir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(SCRIPTS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(clientbindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-clientbinSCRIPTS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-clientbinSCRIPTS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-clientbinSCRIPTS install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-clientbinSCRIPTS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/Makefile.am0000644000175000017500000000235011326115221012216 00000000000000SUBDIRS = conduit data po help tools DISTCHECK_CONFIGURE_FLAGS = --disable-scrollkeeper --disable-nautilus-extension --disable-eog-plugin release: dist scp $(PACKAGE)-$(VERSION).tar.gz jstowers@master.gnome.org: ssh jstowers@master.gnome.org install-module $(PACKAGE)-$(VERSION).tar.gz DISTCLEANFILES = \ intltool-extract \ intltool-merge \ intltool-update \ gnome-doc-utils.make EXTRA_DIST = \ NEWS \ TODO \ ChangeLog \ intltool-update.in \ intltool-extract.in \ intltool-merge.in \ gnome-doc-utils.make # ChangeLog generation from nautils distclean-local: if test "$(srcdir)" = "."; then :; else \ rm -f ChangeLog; \ fi ChangeLog: @echo Creating $@ @if test -d "$(srcdir)/.git"; then \ (GIT_DIR=$(top_srcdir)/.git ./missing --run git log 0.3.16.. --stat -M -C --name-status --date=short --no-color) | fmt --split-only > $@.tmp \ && mv -f $@.tmp $@ \ || ($(RM) $@.tmp; \ echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \ (test -f $@ || echo git-log is required to generate this file >> $@)); \ else \ test -f $@ || \ (echo A git checkout and git-log is required to generate ChangeLog >&2 && \ echo A git checkout and git-log is required to generate this file >> $@); \ fi conduit-0.3.17/README0000644000175000017500000000312611172176633011061 00000000000000What is Conduit ========== Conduit is a synchronization application for GNOME. It allows you to synchronize your data between online web services (Gmail, backpackit.com, etc) and your computer. Conduit is not a PIM synchronization application for sync'ing your mobile phone with your Evolution notes. This functionality is planned for the future What Can Conduit Do ============= This release aims to show the possibilities of Conduit and to try and get other developers interested. It is the first release that is Useful but still has limitations. You can synchronize (one way at this stage) between the following * Gmail Emails * Gnome-vfs Files * RSS Feed with Enclosures * Tomboy Notes * Stickynotes applet Notes * Backpackit.com Notes If conversion of data is required between these items then that will be handled automatically and transparently. E.g binary files will be attached to email, text files will be inserted inline. Development ========= I am actively looking for help with this project. * Conduit is written in python and PyGTK * Conduit has been designed to be easy to extend. It implements a plugin system much like deskbar. * One of Conduits main aims is to encourage other developers to come onto the project through supplying: ** Full API Documentation: http://doc.conduit-project.org/ ** Developer Walkthrough: http://www.conduit-project.org/wiki/Development Conclusion ======= More and more people use online services to organise their life, I hope Conduit can be the bridge between peoples computers and the web. http://www.conduit-project.org/ conduit-0.3.17/configure0000755000175000017500000070417111326116725012115 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.64 for conduit 0.3.17. # # Report bugs to . # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software # Foundation, Inc. # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: john.stowers@gmail.com about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error ERROR [LINENO LOG_FD] # --------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with status $?, using 1 if that was 0. as_fn_error () { as_status=$?; test $as_status -eq 0 && as_status=1 if test "$3"; then as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 fi $as_echo "$as_me: error: $1" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='conduit' PACKAGE_TARNAME='conduit' PACKAGE_VERSION='0.3.17' PACKAGE_STRING='conduit 0.3.17' PACKAGE_BUGREPORT='john.stowers@gmail.com' PACKAGE_URL='' ac_unique_file="conduit/__init__.py" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS DESKTOPFILEDIR MODULEDIR DATADIR PKGDATADIR LOCALEDIR LIBDIR BINDIR PYTHONDIR TOTEM_PLUGIN_DIR ENABLE_TOTEM_PLUGIN_FALSE ENABLE_TOTEM_PLUGIN_TRUE EOG_PLUGIN_DIR ENABLE_EOG_PLUGIN_FALSE ENABLE_EOG_PLUGIN_TRUE NAUTILUS_EXTENSION_DIR ENABLE_NAUTILUS_EXTENSION_FALSE ENABLE_NAUTILUS_EXTENSION_TRUE DBUS_SERVICES_DIR BROWSER_IMPL FILE_IMPL pkgpyexecdir pyexecdir pkgpythondir pythondir PYTHON_PLATFORM PYTHON_EXEC_PREFIX PYTHON_PREFIX PYTHON_VERSION PYTHON HAVE_GNOME_DOC_UTILS_FALSE HAVE_GNOME_DOC_UTILS_TRUE DISTCHECK_CONFIGURE_FLAGS ENABLE_SK_FALSE ENABLE_SK_TRUE DOC_USER_FORMATS OMF_DIR HELP_DIR PKG_CONFIG LN_S ALL_LINGUAS INTLTOOL_PERL MSGMERGE INTLTOOL_POLICY_RULE INTLTOOL_SERVICE_RULE INTLTOOL_THEME_RULE INTLTOOL_SCHEMAS_RULE INTLTOOL_CAVES_RULE INTLTOOL_XML_NOMERGE_RULE INTLTOOL_XML_RULE INTLTOOL_KBD_RULE INTLTOOL_XAM_RULE INTLTOOL_UI_RULE INTLTOOL_SOUNDLIST_RULE INTLTOOL_SHEET_RULE INTLTOOL_SERVER_RULE INTLTOOL_PONG_RULE INTLTOOL_OAF_RULE INTLTOOL_PROP_RULE INTLTOOL_KEYS_RULE INTLTOOL_DIRECTORY_RULE INTLTOOL_DESKTOP_RULE INTLTOOL_EXTRACT INTLTOOL_MERGE INTLTOOL_UPDATE MKINSTALLDIRS POSUB POFILES PO_IN_DATADIR_FALSE PO_IN_DATADIR_TRUE INTLLIBS INSTOBJEXT GMOFILES DATADIRNAME CATOBJEXT CATALOGS XGETTEXT GMSGFMT MSGFMT_OPTS MSGFMT USE_NLS EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC GETTEXT_PACKAGE ACLOCAL_AMFLAGS MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_maintainer_mode enable_dependency_tracking enable_nls with_help_dir with_omf_dir with_help_formats enable_scrollkeeper with_file_impl with_browser_impl with_session_bus_services_dir enable_nautilus_extension with_nautilus_extension_dir enable_eog_plugin with_eog_plugin_dir enable_totem_plugin with_totem_plugin_dir ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP PKG_CONFIG' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error "unrecognized option: \`$ac_option' Try \`$0 --help' for more information." ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures conduit 0.3.17 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/conduit] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of conduit 0.3.17:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --disable-nls do not use Native Language Support --disable-scrollkeeper do not make updates to the scrollkeeper database --enable-nautilus-extension Enable support for nautilus extension --enable-eog-plugin Enable support for eog plugin --enable-totem-plugin Enable support for Totem plugin Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-help-dir=DIR path to help docs --with-omf-dir=DIR path to OMF files --with-help-formats=FORMATS list of formats --with-file-impl GIO (default), Python --with-browser-impl webkit (default), gtkmozembed, system --with-session-bus-services-dir Path to DBus services directory --with-nautilus-extension-dir Path to nautilus extension dir --with-eog-plugin-dir Path to eog plugin dir --with-totem-plugin-dir Path to Totem plugin dir Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor PKG_CONFIG path to pkg-config utility Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF conduit configure 0.3.17 generated by GNU Autoconf 2.64 Copyright (C) 2009 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} return $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} return $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} return $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------- ## ## Report this to john.stowers@gmail.com ## ## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_mongrel # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} return $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_func cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by conduit $as_me 0.3.17, which was generated by GNU Autoconf 2.64. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then ac_site_file1=$CONFIG_SITE elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.11' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do for ac_t in install-sh install.sh shtool; do if test -f "$ac_dir/$ac_t"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/$ac_t -c" break 2 fi done done if test -z "$ac_aux_dir"; then as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test "${ac_cv_path_mkdir+set}" = set; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. test -d ./--version && rmdir ./--version MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AWK+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='conduit' VERSION='0.3.17' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE ACLOCAL_AMFLAGS="$ACLOCAL_FLAGS -I m4" ################################################################################ # Translation & i18n ################################################################################ GETTEXT_PACKAGE="conduit" cat >>confdefs.h <<_ACEOF #define GETTEXT_PACKAGE "$GETTEXT_PACKAGE" _ACEOF DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "no acceptable C compiler found in \$PATH See \`config.log' for more details." "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 rm -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } if test -z "$ac_file"; then : $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { as_fn_set_status 77 as_fn_error "C compiler cannot create executables See \`config.log' for more details." "$LINENO" 5; }; } fi ac_exeext=$ac_cv_exeext # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out ac_clean_files=$ac_clean_files_save # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." "$LINENO" 5; } fi rm -f conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if test "${ac_cv_objext+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "cannot compute suffix of object files: cannot compile See \`config.log' for more details." "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if test "${ac_cv_path_GREP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if test "${ac_cv_path_EGREP+set}" = set; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " eval as_val=\$$as_ac_Header if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in locale.h do : ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LOCALE_H 1 _ACEOF fi done if test $ac_cv_header_locale_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 $as_echo_n "checking for LC_MESSAGES... " >&6; } if test "${am_cv_val_LC_MESSAGES+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_val_LC_MESSAGES=yes else am_cv_val_LC_MESSAGES=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5 $as_echo "$am_cv_val_LC_MESSAGES" >&6; } if test $am_cv_val_LC_MESSAGES = yes; then $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi fi USE_NLS=yes gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= ac_fn_c_check_header_mongrel "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = x""yes; then : gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in libc" >&5 $as_echo_n "checking for ngettext in libc... " >&6; } if test "${gt_cv_func_ngettext_libc+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !ngettext ("","", 1) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_ngettext_libc=yes else gt_cv_func_ngettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_ngettext_libc" >&5 $as_echo "$gt_cv_func_ngettext_libc" >&6; } if test "$gt_cv_func_ngettext_libc" = "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in libc" >&5 $as_echo_n "checking for dgettext in libc... " >&6; } if test "${gt_cv_func_dgettext_libc+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !dgettext ("","") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_dgettext_libc=yes else gt_cv_func_dgettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_dgettext_libc" >&5 $as_echo "$gt_cv_func_dgettext_libc" >&6; } fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bindtextdomain in -lintl" >&5 $as_echo_n "checking for bindtextdomain in -lintl... " >&6; } if test "${ac_cv_lib_intl_bindtextdomain+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char bindtextdomain (); int main () { return bindtextdomain (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_bindtextdomain=yes else ac_cv_lib_intl_bindtextdomain=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_bindtextdomain" >&5 $as_echo "$ac_cv_lib_intl_bindtextdomain" >&6; } if test "x$ac_cv_lib_intl_bindtextdomain" = x""yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if test "${ac_cv_lib_intl_ngettext+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = x""yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in -lintl" >&5 $as_echo_n "checking for dgettext in -lintl... " >&6; } if test "${ac_cv_lib_intl_dgettext+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dgettext (); int main () { return dgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dgettext=yes else ac_cv_lib_intl_dgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dgettext" >&5 $as_echo "$ac_cv_lib_intl_dgettext" >&6; } if test "x$ac_cv_lib_intl_dgettext" = x""yes; then : gt_cv_func_dgettext_libintl=yes fi fi fi if test "$gt_cv_func_dgettext_libintl" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -liconv is needed to use gettext" >&5 $as_echo_n "checking if -liconv is needed to use gettext... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if test "${ac_cv_lib_intl_ngettext+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = x""yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dcgettext in -lintl" >&5 $as_echo_n "checking for dcgettext in -lintl... " >&6; } if test "${ac_cv_lib_intl_dcgettext+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dcgettext (); int main () { return dcgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dcgettext=yes else ac_cv_lib_intl_dcgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dcgettext" >&5 $as_echo "$ac_cv_lib_intl_dcgettext" >&6; } if test "x$ac_cv_lib_intl_dcgettext" = x""yes; then : gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv else : fi else : fi fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_MSGFMT+set}" = set; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in /*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then ac_cv_path_MSGFMT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" for ac_func in dcgettext do : ac_fn_c_check_func "$LINENO" "dcgettext" "ac_cv_func_dcgettext" if test "x$ac_cv_func_dcgettext" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DCGETTEXT 1 _ACEOF fi done MSGFMT_OPTS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking if msgfmt accepts -c" >&5 $as_echo_n "checking if msgfmt accepts -c... " >&6; } cat >conftest.foo <<_ACEOF msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" _ACEOF if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$MSGFMT -c -o /dev/null conftest.foo"; } >&5 ($MSGFMT -c -o /dev/null conftest.foo) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then MSGFMT_OPTS=-c; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } echo "$as_me: failed input was:" >&5 sed 's/^/| /' conftest.foo >&5 fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_GMSGFMT+set}" = set; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_XGETTEXT+set}" = set; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in /*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : CATOBJEXT=.gmo DATADIRNAME=share else case $host in *-*-solaris*) ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = x""yes; then : CATOBJEXT=.gmo DATADIRNAME=share else CATOBJEXT=.mo DATADIRNAME=lib fi ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi fi if test "$gt_cv_have_gettext" = "yes" ; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 $as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; } XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po ac_config_commands="$ac_config_commands default-1" for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 $as_echo_n "checking for catalogs to be installed... " >&6; } NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 $as_echo "$LINGUAS" >&6; } fi if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } case "$am__api_version" in 1.01234) as_fn_error "Automake 1.5 or newer is required to use intltool" "$LINENO" 5 ;; *) ;; esac if test -n "0.35.0"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intltool >= 0.35.0" >&5 $as_echo_n "checking for intltool >= 0.35.0... " >&6; } INTLTOOL_REQUIRED_VERSION_AS_INT=`echo 0.35.0 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_APPLIED_VERSION found" >&5 $as_echo "$INTLTOOL_APPLIED_VERSION found" >&6; } test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || as_fn_error "Your intltool is too old. You need intltool 0.35.0 or later." "$LINENO" 5 fi # Extract the first word of "intltool-update", so it can be a program name with args. set dummy intltool-update; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_INTLTOOL_UPDATE+set}" = set; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_UPDATE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_UPDATE="$INTLTOOL_UPDATE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_INTLTOOL_UPDATE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_UPDATE=$ac_cv_path_INTLTOOL_UPDATE if test -n "$INTLTOOL_UPDATE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_UPDATE" >&5 $as_echo "$INTLTOOL_UPDATE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "intltool-merge", so it can be a program name with args. set dummy intltool-merge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_INTLTOOL_MERGE+set}" = set; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_MERGE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_MERGE="$INTLTOOL_MERGE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_INTLTOOL_MERGE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_MERGE=$ac_cv_path_INTLTOOL_MERGE if test -n "$INTLTOOL_MERGE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_MERGE" >&5 $as_echo "$INTLTOOL_MERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "intltool-extract", so it can be a program name with args. set dummy intltool-extract; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_INTLTOOL_EXTRACT+set}" = set; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_EXTRACT in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_EXTRACT="$INTLTOOL_EXTRACT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_INTLTOOL_EXTRACT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_EXTRACT=$ac_cv_path_INTLTOOL_EXTRACT if test -n "$INTLTOOL_EXTRACT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_EXTRACT" >&5 $as_echo "$INTLTOOL_EXTRACT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then as_fn_error "The intltool scripts were not found. Please install intltool." "$LINENO" 5 fi INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< $@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< $@' INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' # Check the gettext tools to make sure they are GNU # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_XGETTEXT+set}" = set; then : $as_echo_n "(cached) " >&6 else case $XGETTEXT in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_XGETTEXT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XGETTEXT=$ac_cv_path_XGETTEXT if test -n "$XGETTEXT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_MSGMERGE+set}" = set; then : $as_echo_n "(cached) " >&6 else case $MSGMERGE in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_MSGMERGE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MSGMERGE=$ac_cv_path_MSGMERGE if test -n "$MSGMERGE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_MSGFMT+set}" = set; then : $as_echo_n "(cached) " >&6 else case $MSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_MSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MSGFMT=$ac_cv_path_MSGFMT if test -n "$MSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_GMSGFMT+set}" = set; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then as_fn_error "GNU gettext tools not found; required for intltool" "$LINENO" 5 fi xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then as_fn_error "GNU gettext tools not found; required for intltool" "$LINENO" 5 fi # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_INTLTOOL_PERL+set}" = set; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_PERL="$INTLTOOL_PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_INTLTOOL_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_PERL=$ac_cv_path_INTLTOOL_PERL if test -n "$INTLTOOL_PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_PERL" >&5 $as_echo "$INTLTOOL_PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$INTLTOOL_PERL"; then as_fn_error "perl not found" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for perl >= 5.8.1" >&5 $as_echo_n "checking for perl >= 5.8.1... " >&6; } $INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1 if test $? -ne 0; then as_fn_error "perl 5.8.1 is required for intltool" "$LINENO" 5 else IT_PERL_VERSION="`$INTLTOOL_PERL -e \"printf '%vd', $^V\"`" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $IT_PERL_VERSION" >&5 $as_echo "$IT_PERL_VERSION" >&6; } fi if test "x" != "xno-xml"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XML::Parser" >&5 $as_echo_n "checking for XML::Parser... " >&6; } if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } else as_fn_error "XML::Parser perl module is required for intltool" "$LINENO" 5 fi fi # Substitute ALL_LINGUAS so we can use it in po/Makefile # Set DATADIRNAME correctly if it is not set yet # (copied from glib-gettext.m4) if test -z "$DATADIRNAME"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : DATADIRNAME=share else case $host in *-*-solaris*) ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = x""yes; then : DATADIRNAME=share else DATADIRNAME=lib fi ;; *) DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi ################################################################################ # Gnome Doc Utils ################################################################################ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_PKG_CONFIG+set}" = set; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi gdu_cv_version_required=0.3.2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking gnome-doc-utils >= $gdu_cv_version_required" >&5 $as_echo_n "checking gnome-doc-utils >= $gdu_cv_version_required... " >&6; } if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gnome-doc-utils >= \$gdu_cv_version_required\""; } >&5 ($PKG_CONFIG --exists --print-errors "gnome-doc-utils >= $gdu_cv_version_required") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then gdu_cv_have_gdu=yes else gdu_cv_have_gdu=no fi if test "$gdu_cv_have_gdu" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error "gnome-doc-utils >= $gdu_cv_version_required not found" "$LINENO" 5 fi # Check whether --with-help-dir was given. if test "${with_help_dir+set}" = set; then : withval=$with_help_dir; else with_help_dir='${datadir}/gnome/help' fi HELP_DIR="$with_help_dir" # Check whether --with-omf-dir was given. if test "${with_omf_dir+set}" = set; then : withval=$with_omf_dir; else with_omf_dir='${datadir}/omf' fi OMF_DIR="$with_omf_dir" # Check whether --with-help-formats was given. if test "${with_help_formats+set}" = set; then : withval=$with_help_formats; else with_help_formats='' fi DOC_USER_FORMATS="$with_help_formats" # Check whether --enable-scrollkeeper was given. if test "${enable_scrollkeeper+set}" = set; then : enableval=$enable_scrollkeeper; else enable_scrollkeeper=yes fi if test "$gdu_cv_have_gdu" = "yes" -a "$enable_scrollkeeper" = "yes"; then ENABLE_SK_TRUE= ENABLE_SK_FALSE='#' else ENABLE_SK_TRUE='#' ENABLE_SK_FALSE= fi DISTCHECK_CONFIGURE_FLAGS="--disable-scrollkeeper $DISTCHECK_CONFIGURE_FLAGS" if test "$gdu_cv_have_gdu" = "yes"; then HAVE_GNOME_DOC_UTILS_TRUE= HAVE_GNOME_DOC_UTILS_FALSE='#' else HAVE_GNOME_DOC_UTILS_TRUE='#' HAVE_GNOME_DOC_UTILS_FALSE= fi ################################################################################ # Requirements ################################################################################ if test -n "$PYTHON"; then # If the user set $PYTHON, use it and don't search something else. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON version >= 2.4" >&5 $as_echo_n "checking whether $PYTHON version >= 2.4... " >&6; } prog="import sys, string # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. minver = map(int, string.split('2.4', '.')) + [0, 0, 0] minverhex = 0 for i in xrange(0, 4): minverhex = (minverhex << 8) + minver[i] sys.exit(sys.hexversion < minverhex)" if { echo "$as_me:$LINENO: $PYTHON -c "$prog"" >&5 ($PYTHON -c "$prog") >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else as_fn_error "too old" "$LINENO" 5 fi am_display_PYTHON=$PYTHON else # Otherwise, try each interpreter until we find one that satisfies # VERSION. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a Python interpreter with version >= 2.4" >&5 $as_echo_n "checking for a Python interpreter with version >= 2.4... " >&6; } if test "${am_cv_pathless_PYTHON+set}" = set; then : $as_echo_n "(cached) " >&6 else for am_cv_pathless_PYTHON in python python2 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 python1.6 python1.5 none; do test "$am_cv_pathless_PYTHON" = none && break prog="import sys, string # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. minver = map(int, string.split('2.4', '.')) + [0, 0, 0] minverhex = 0 for i in xrange(0, 4): minverhex = (minverhex << 8) + minver[i] sys.exit(sys.hexversion < minverhex)" if { echo "$as_me:$LINENO: $am_cv_pathless_PYTHON -c "$prog"" >&5 ($am_cv_pathless_PYTHON -c "$prog") >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then : break fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_pathless_PYTHON" >&5 $as_echo "$am_cv_pathless_PYTHON" >&6; } # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. if test "$am_cv_pathless_PYTHON" = none; then PYTHON=: else # Extract the first word of "$am_cv_pathless_PYTHON", so it can be a program name with args. set dummy $am_cv_pathless_PYTHON; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_PYTHON+set}" = set; then : $as_echo_n "(cached) " >&6 else case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 $as_echo "$PYTHON" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi am_display_PYTHON=$am_cv_pathless_PYTHON fi if test "$PYTHON" = :; then as_fn_error "no suitable Python interpreter found" "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5 $as_echo_n "checking for $am_display_PYTHON version... " >&6; } if test "${am_cv_python_version+set}" = set; then : $as_echo_n "(cached) " >&6 else am_cv_python_version=`$PYTHON -c "import sys; print sys.version[:3]"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 $as_echo "$am_cv_python_version" >&6; } PYTHON_VERSION=$am_cv_python_version PYTHON_PREFIX='${prefix}' PYTHON_EXEC_PREFIX='${exec_prefix}' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5 $as_echo_n "checking for $am_display_PYTHON platform... " >&6; } if test "${am_cv_python_platform+set}" = set; then : $as_echo_n "(cached) " >&6 else am_cv_python_platform=`$PYTHON -c "import sys; print sys.platform"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 $as_echo "$am_cv_python_platform" >&6; } PYTHON_PLATFORM=$am_cv_python_platform { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5 $as_echo_n "checking for $am_display_PYTHON script directory... " >&6; } if test "${am_cv_python_pythondir+set}" = set; then : $as_echo_n "(cached) " >&6 else am_cv_python_pythondir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(0,0,prefix='$PYTHON_PREFIX')" 2>/dev/null || echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 $as_echo "$am_cv_python_pythondir" >&6; } pythondir=$am_cv_python_pythondir pkgpythondir=\${pythondir}/$PACKAGE { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5 $as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; } if test "${am_cv_python_pyexecdir+set}" = set; then : $as_echo_n "(cached) " >&6 else am_cv_python_pyexecdir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(1,0,prefix='$PYTHON_EXEC_PREFIX')" 2>/dev/null || echo "${PYTHON_EXEC_PREFIX}/lib/python${PYTHON_VERSION}/site-packages"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 $as_echo "$am_cv_python_pyexecdir" >&6; } pyexecdir=$am_cv_python_pyexecdir pkgpyexecdir=\${pyexecdir}/$PACKAGE fi ################################################################################ # File Implementation ################################################################################ FILE_IMPL="GIO" # Check whether --with-file_impl was given. if test "${with_file_impl+set}" = set; then : withval=$with_file_impl; fi if test "$with_file_impl" = "Python" ; then FILE_IMPL=$with_file_impl fi ################################################################################ # Browser Implementation ################################################################################ BROWSER_IMPL="webkit" # Check whether --with-browser_impl was given. if test "${with_browser_impl+set}" = set; then : withval=$with_browser_impl; fi if test "$with_browser_impl" = "webkit" || test "$with_browser_impl" = "gtkmozembed" || test "$with_browser_impl" = "system"; then BROWSER_IMPL=$with_browser_impl fi ################################################################################ # Check for neccessary python modules (that dont install pc files) ################################################################################ py_mod_var=`echo vobject'_' | sed 'y%./+-%__p_%'` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python module vobject" >&5 $as_echo_n "checking for python module vobject... " >&6; } if { as_var=py_cv_mod_$py_mod_var; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else prog=" import sys try: import vobject except ImportError: sys.exit(1) except: sys.exit(0) sys.exit(0)" if $PYTHON -c "$prog" 1>&5 2>&5 then eval "py_cv_mod_$py_mod_var=yes" else eval "py_cv_mod_$py_mod_var=no" fi fi py_val=`eval "echo \`echo '$py_cv_mod_'$py_mod_var\`"` if test "x$py_val" != xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error "Python module vobject required to run Conduit" "$LINENO" 5 fi py_mod_var=`echo dateutil'_' | sed 'y%./+-%__p_%'` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python module dateutil" >&5 $as_echo_n "checking for python module dateutil... " >&6; } if { as_var=py_cv_mod_$py_mod_var; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else prog=" import sys try: import dateutil except ImportError: sys.exit(1) except: sys.exit(0) sys.exit(0)" if $PYTHON -c "$prog" 1>&5 2>&5 then eval "py_cv_mod_$py_mod_var=yes" else eval "py_cv_mod_$py_mod_var=no" fi fi py_val=`eval "echo \`echo '$py_cv_mod_'$py_mod_var\`"` if test "x$py_val" != xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error "Python module dateutil required to run Conduit" "$LINENO" 5 fi v=`echo 0.9.0 | sed -e "s/\./,/g"` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 0.9.0 of goocanvas" >&5 $as_echo_n "checking for 0.9.0 of goocanvas... " >&6; } prog=" import goocanvas ver = goocanvas.pygoocanvas_version if type(ver) == str: ver = ver.split('.') ver = map(int,ver) ver = tuple(ver) elif type(ver) == tuple: pass else: raise Exception if ver >= ($v): print 'yes' " out=`$PYTHON -c "$prog"` if test "x$out" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error "Python module goocanvas >= 0.9.0 required to run Conduit" "$LINENO" 5 fi v=`echo 0.80.0 | sed -e "s/\./,/g"` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 0.80.0 of dbus" >&5 $as_echo_n "checking for 0.80.0 of dbus... " >&6; } prog=" import dbus ver = dbus.__version__ if type(ver) == str: ver = ver.split('.') ver = map(int,ver) ver = tuple(ver) elif type(ver) == tuple: pass else: raise Exception if ver >= ($v): print 'yes' " out=`$PYTHON -c "$prog"` if test "x$out" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error "Python module dbus >= 0.80.0 required to run Conduit" "$LINENO" 5 fi if test $FILE_IMPL = "GIO" ; then v=`echo 2.16.1 | sed -e "s/\./,/g"` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 2.16.1 of gio" >&5 $as_echo_n "checking for 2.16.1 of gio... " >&6; } prog=" import gio ver = gio.pygio_version if type(ver) == str: ver = ver.split('.') ver = map(int,ver) ver = tuple(ver) elif type(ver) == tuple: pass else: raise Exception if ver >= ($v): print 'yes' " out=`$PYTHON -c "$prog"` if test "x$out" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error "Python module gio >= 2.16.1 required to run Conduit" "$LINENO" 5 fi fi ################################################################################ # DBus ################################################################################ # Check whether --with-session_bus_services_dir was given. if test "${with_session_bus_services_dir+set}" = set; then : withval=$with_session_bus_services_dir; fi if test "x$with_dbus_service_dir" != "x"; then DBUS_SERVICES_DIR=$with_dbus_service_dir else DBUS_SERVICES_DIR=${datadir}/dbus-1/services fi #################################################################### # Nautilus Extension #################################################################### # Check whether --enable-nautilus_extension was given. if test "${enable_nautilus_extension+set}" = set; then : enableval=$enable_nautilus_extension; else enable_nautilus_extension=no fi # Check whether --with-nautilus_extension_dir was given. if test "${with_nautilus_extension_dir+set}" = set; then : withval=$with_nautilus_extension_dir; fi if test "$enable_nautilus_extension" != "no"; then ENABLE_NAUTILUS_EXTENSION_TRUE= ENABLE_NAUTILUS_EXTENSION_FALSE='#' else ENABLE_NAUTILUS_EXTENSION_TRUE='#' ENABLE_NAUTILUS_EXTENSION_FALSE= fi if test "x$with_nautilus_extension_dir" = "x" ; then ext_dir="~/.nautilus/python-extensions/" else ext_dir="$with_nautilus_extension_dir" fi NAUTILUS_EXTENSION_DIR="$ext_dir" #################################################################### # EOG Plugin #################################################################### # Check whether --enable-eog_plugin was given. if test "${enable_eog_plugin+set}" = set; then : enableval=$enable_eog_plugin; else enable_eog_plugin=no fi # Check whether --with-eog_plugin_dir was given. if test "${with_eog_plugin_dir+set}" = set; then : withval=$with_eog_plugin_dir; fi if test "$enable_eog_plugin" != "no"; then ENABLE_EOG_PLUGIN_TRUE= ENABLE_EOG_PLUGIN_FALSE='#' else ENABLE_EOG_PLUGIN_TRUE='#' ENABLE_EOG_PLUGIN_FALSE= fi if test "x$with_eog_plugin_dir" = "x" ; then plug_dir="~/.gnome2/eog/plugins/" else plug_dir="$with_eog_plugin_dir" fi EOG_PLUGIN_DIR="$plug_dir" #################################################################### # Totem Plugin #################################################################### # Check whether --enable-totem_plugin was given. if test "${enable_totem_plugin+set}" = set; then : enableval=$enable_totem_plugin; else enable_totem_plugin=no fi # Check whether --with-totem_plugin_dir was given. if test "${with_totem_plugin_dir+set}" = set; then : withval=$with_totem_plugin_dir; fi if test "$enable_totem_plugin" != "no"; then ENABLE_TOTEM_PLUGIN_TRUE= ENABLE_TOTEM_PLUGIN_FALSE='#' else ENABLE_TOTEM_PLUGIN_TRUE='#' ENABLE_TOTEM_PLUGIN_FALSE= fi if test "x$with_totem_plugin_dir" = "x" ; then plug_dir="~/.config/totem/plugins/" else plug_dir="$with_totem_plugin_dir" fi TOTEM_PLUGIN_DIR="$plug_dir" ################################################################################ # Write the values of various paths for defs.py ################################################################################ EXP_VAR=PYTHONDIR FROM_VAR=$pythondir prefix_save=$prefix exec_prefix_save=$exec_prefix if test "x$prefix" = "xNONE"; then prefix=$ac_default_prefix fi if test "x$exec_prefix" = "xNONE"; then exec_prefix=$prefix fi full_var="$FROM_VAR" while true; do new_full_var="`eval echo $full_var`" if test "x$new_full_var"="x$full_var"; then break; fi full_var=$new_full_var done full_var=$new_full_var PYTHONDIR="$full_var" prefix=$prefix_save exec_prefix=$exec_prefix_save EXP_VAR=BINDIR FROM_VAR=$bindir prefix_save=$prefix exec_prefix_save=$exec_prefix if test "x$prefix" = "xNONE"; then prefix=$ac_default_prefix fi if test "x$exec_prefix" = "xNONE"; then exec_prefix=$prefix fi full_var="$FROM_VAR" while true; do new_full_var="`eval echo $full_var`" if test "x$new_full_var"="x$full_var"; then break; fi full_var=$new_full_var done full_var=$new_full_var BINDIR="$full_var" prefix=$prefix_save exec_prefix=$exec_prefix_save EXP_VAR=LIBDIR FROM_VAR=$libdir prefix_save=$prefix exec_prefix_save=$exec_prefix if test "x$prefix" = "xNONE"; then prefix=$ac_default_prefix fi if test "x$exec_prefix" = "xNONE"; then exec_prefix=$prefix fi full_var="$FROM_VAR" while true; do new_full_var="`eval echo $full_var`" if test "x$new_full_var"="x$full_var"; then break; fi full_var=$new_full_var done full_var=$new_full_var LIBDIR="$full_var" prefix=$prefix_save exec_prefix=$exec_prefix_save EXP_VAR=LOCALEDIR FROM_VAR=$datarootdir/locale prefix_save=$prefix exec_prefix_save=$exec_prefix if test "x$prefix" = "xNONE"; then prefix=$ac_default_prefix fi if test "x$exec_prefix" = "xNONE"; then exec_prefix=$prefix fi full_var="$FROM_VAR" while true; do new_full_var="`eval echo $full_var`" if test "x$new_full_var"="x$full_var"; then break; fi full_var=$new_full_var done full_var=$new_full_var LOCALEDIR="$full_var" prefix=$prefix_save exec_prefix=$exec_prefix_save EXP_VAR=PKGDATADIR FROM_VAR=$datarootdir/$PACKAGE prefix_save=$prefix exec_prefix_save=$exec_prefix if test "x$prefix" = "xNONE"; then prefix=$ac_default_prefix fi if test "x$exec_prefix" = "xNONE"; then exec_prefix=$prefix fi full_var="$FROM_VAR" while true; do new_full_var="`eval echo $full_var`" if test "x$new_full_var"="x$full_var"; then break; fi full_var=$new_full_var done full_var=$new_full_var PKGDATADIR="$full_var" prefix=$prefix_save exec_prefix=$exec_prefix_save EXP_VAR=DATADIR FROM_VAR=$datarootdir/$PACKAGE prefix_save=$prefix exec_prefix_save=$exec_prefix if test "x$prefix" = "xNONE"; then prefix=$ac_default_prefix fi if test "x$exec_prefix" = "xNONE"; then exec_prefix=$prefix fi full_var="$FROM_VAR" while true; do new_full_var="`eval echo $full_var`" if test "x$new_full_var"="x$full_var"; then break; fi full_var=$new_full_var done full_var=$new_full_var DATADIR="$full_var" prefix=$prefix_save exec_prefix=$exec_prefix_save EXP_VAR=MODULEDIR FROM_VAR=$libdir/$PACKAGE/modules prefix_save=$prefix exec_prefix_save=$exec_prefix if test "x$prefix" = "xNONE"; then prefix=$ac_default_prefix fi if test "x$exec_prefix" = "xNONE"; then exec_prefix=$prefix fi full_var="$FROM_VAR" while true; do new_full_var="`eval echo $full_var`" if test "x$new_full_var"="x$full_var"; then break; fi full_var=$new_full_var done full_var=$new_full_var MODULEDIR="$full_var" prefix=$prefix_save exec_prefix=$exec_prefix_save EXP_VAR=DESKTOPFILEDIR FROM_VAR=$datarootdir/applications prefix_save=$prefix exec_prefix_save=$exec_prefix if test "x$prefix" = "xNONE"; then prefix=$ac_default_prefix fi if test "x$exec_prefix" = "xNONE"; then exec_prefix=$prefix fi full_var="$FROM_VAR" while true; do new_full_var="`eval echo $full_var`" if test "x$new_full_var"="x$full_var"; then break; fi full_var=$new_full_var done full_var=$new_full_var DESKTOPFILEDIR="$full_var" prefix=$prefix_save exec_prefix=$exec_prefix_save ################################################################################ #------------------------------------------------------------------------------- ################################################################################ ac_config_files="$ac_config_files Makefile conduit/defs.py conduit/Makefile conduit/utils/Makefile conduit/datatypes/Makefile conduit/dataproviders/Makefile conduit/gtkui/Makefile conduit/hildonui/Makefile conduit/platform/Makefile conduit/modules/Makefile conduit/modules/BackpackModule/Makefile conduit/modules/BackpackModule/backpack/Makefile conduit/modules/BansheeModule/Makefile conduit/modules/BoxDotNetModule/Makefile conduit/modules/BoxDotNetModule/BoxDotNetAPI/Makefile conduit/modules/EvolutionModule/Makefile conduit/modules/FileModule/Makefile conduit/modules/FeedModule/Makefile conduit/modules/FlickrModule/Makefile conduit/modules/FacebookModule/Makefile conduit/modules/FacebookModule/pyfacebook/Makefile conduit/modules/FspotModule/Makefile conduit/modules/iPodModule/Makefile conduit/modules/SmugMugModule/Makefile conduit/modules/SmugMugModule/SmugMugAPI/Makefile conduit/modules/GoogleModule/Makefile conduit/modules/ShutterflyModule/Makefile conduit/modules/ShutterflyModule/shutterfly/Makefile conduit/modules/RhythmboxModule/Makefile conduit/modules/N800Module/Makefile conduit/modules/NetworkModule/Makefile conduit/modules/GConfModule/Makefile conduit/modules/ZotoModule/Makefile conduit/modules/Firefox3Module/Makefile data/Makefile data/conduit.desktop.in data/conduit.pc data/icons/Makefile data/icons/hicolor/Makefile data/icons/hicolor/16x16/Makefile data/icons/hicolor/16x16/actions/Makefile data/icons/hicolor/16x16/apps/Makefile data/icons/hicolor/16x16/hildon/Makefile data/icons/hicolor/16x16/status/Makefile data/icons/hicolor/22x22/Makefile data/icons/hicolor/22x22/apps/Makefile data/icons/hicolor/24x24/Makefile data/icons/hicolor/24x24/apps/Makefile data/icons/hicolor/26x26/Makefile data/icons/hicolor/26x26/apps/Makefile data/icons/hicolor/32x32/Makefile data/icons/hicolor/32x32/apps/Makefile data/icons/hicolor/48x48/apps/Makefile data/icons/hicolor/48x48/Makefile data/icons/hicolor/scalable/Makefile data/icons/hicolor/scalable/apps/Makefile po/Makefile.in help/Makefile tools/Makefile tools/nautilus-extension/Makefile tools/eog-plugin/Makefile tools/totem-plugin/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi ac_config_commands="$ac_config_commands po/stamp-it" if test -z "${ENABLE_SK_TRUE}" && test -z "${ENABLE_SK_FALSE}"; then as_fn_error "conditional \"ENABLE_SK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_GNOME_DOC_UTILS_TRUE}" && test -z "${HAVE_GNOME_DOC_UTILS_FALSE}"; then as_fn_error "conditional \"HAVE_GNOME_DOC_UTILS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_NAUTILUS_EXTENSION_TRUE}" && test -z "${ENABLE_NAUTILUS_EXTENSION_FALSE}"; then as_fn_error "conditional \"ENABLE_NAUTILUS_EXTENSION\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_EOG_PLUGIN_TRUE}" && test -z "${ENABLE_EOG_PLUGIN_FALSE}"; then as_fn_error "conditional \"ENABLE_EOG_PLUGIN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_TOTEM_PLUGIN_TRUE}" && test -z "${ENABLE_TOTEM_PLUGIN_FALSE}"; then as_fn_error "conditional \"ENABLE_TOTEM_PLUGIN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : ${CONFIG_STATUS=./config.status} ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error ERROR [LINENO LOG_FD] # --------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with status $?, using 1 if that was 0. as_fn_error () { as_status=$?; test $as_status -eq 0 && as_status=1 if test "$3"; then as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 fi $as_echo "$as_me: error: $1" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by conduit $as_me 0.3.17, which was generated by GNU Autoconf 2.64. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ conduit config.status 0.3.17 configured by $0, generated by GNU Autoconf 2.64, with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2009 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "conduit/defs.py") CONFIG_FILES="$CONFIG_FILES conduit/defs.py" ;; "conduit/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/Makefile" ;; "conduit/utils/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/utils/Makefile" ;; "conduit/datatypes/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/datatypes/Makefile" ;; "conduit/dataproviders/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/dataproviders/Makefile" ;; "conduit/gtkui/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/gtkui/Makefile" ;; "conduit/hildonui/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/hildonui/Makefile" ;; "conduit/platform/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/platform/Makefile" ;; "conduit/modules/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/modules/Makefile" ;; "conduit/modules/BackpackModule/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/modules/BackpackModule/Makefile" ;; "conduit/modules/BackpackModule/backpack/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/modules/BackpackModule/backpack/Makefile" ;; "conduit/modules/BansheeModule/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/modules/BansheeModule/Makefile" ;; "conduit/modules/BoxDotNetModule/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/modules/BoxDotNetModule/Makefile" ;; "conduit/modules/BoxDotNetModule/BoxDotNetAPI/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/modules/BoxDotNetModule/BoxDotNetAPI/Makefile" ;; "conduit/modules/EvolutionModule/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/modules/EvolutionModule/Makefile" ;; "conduit/modules/FileModule/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/modules/FileModule/Makefile" ;; "conduit/modules/FeedModule/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/modules/FeedModule/Makefile" ;; "conduit/modules/FlickrModule/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/modules/FlickrModule/Makefile" ;; "conduit/modules/FacebookModule/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/modules/FacebookModule/Makefile" ;; "conduit/modules/FacebookModule/pyfacebook/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/modules/FacebookModule/pyfacebook/Makefile" ;; "conduit/modules/FspotModule/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/modules/FspotModule/Makefile" ;; "conduit/modules/iPodModule/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/modules/iPodModule/Makefile" ;; "conduit/modules/SmugMugModule/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/modules/SmugMugModule/Makefile" ;; "conduit/modules/SmugMugModule/SmugMugAPI/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/modules/SmugMugModule/SmugMugAPI/Makefile" ;; "conduit/modules/GoogleModule/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/modules/GoogleModule/Makefile" ;; "conduit/modules/ShutterflyModule/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/modules/ShutterflyModule/Makefile" ;; "conduit/modules/ShutterflyModule/shutterfly/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/modules/ShutterflyModule/shutterfly/Makefile" ;; "conduit/modules/RhythmboxModule/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/modules/RhythmboxModule/Makefile" ;; "conduit/modules/N800Module/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/modules/N800Module/Makefile" ;; "conduit/modules/NetworkModule/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/modules/NetworkModule/Makefile" ;; "conduit/modules/GConfModule/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/modules/GConfModule/Makefile" ;; "conduit/modules/ZotoModule/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/modules/ZotoModule/Makefile" ;; "conduit/modules/Firefox3Module/Makefile") CONFIG_FILES="$CONFIG_FILES conduit/modules/Firefox3Module/Makefile" ;; "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; "data/conduit.desktop.in") CONFIG_FILES="$CONFIG_FILES data/conduit.desktop.in" ;; "data/conduit.pc") CONFIG_FILES="$CONFIG_FILES data/conduit.pc" ;; "data/icons/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/Makefile" ;; "data/icons/hicolor/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/hicolor/Makefile" ;; "data/icons/hicolor/16x16/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/hicolor/16x16/Makefile" ;; "data/icons/hicolor/16x16/actions/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/hicolor/16x16/actions/Makefile" ;; "data/icons/hicolor/16x16/apps/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/hicolor/16x16/apps/Makefile" ;; "data/icons/hicolor/16x16/hildon/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/hicolor/16x16/hildon/Makefile" ;; "data/icons/hicolor/16x16/status/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/hicolor/16x16/status/Makefile" ;; "data/icons/hicolor/22x22/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/hicolor/22x22/Makefile" ;; "data/icons/hicolor/22x22/apps/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/hicolor/22x22/apps/Makefile" ;; "data/icons/hicolor/24x24/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/hicolor/24x24/Makefile" ;; "data/icons/hicolor/24x24/apps/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/hicolor/24x24/apps/Makefile" ;; "data/icons/hicolor/26x26/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/hicolor/26x26/Makefile" ;; "data/icons/hicolor/26x26/apps/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/hicolor/26x26/apps/Makefile" ;; "data/icons/hicolor/32x32/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/hicolor/32x32/Makefile" ;; "data/icons/hicolor/32x32/apps/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/hicolor/32x32/apps/Makefile" ;; "data/icons/hicolor/48x48/apps/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/hicolor/48x48/apps/Makefile" ;; "data/icons/hicolor/48x48/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/hicolor/48x48/Makefile" ;; "data/icons/hicolor/scalable/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/hicolor/scalable/Makefile" ;; "data/icons/hicolor/scalable/apps/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/hicolor/scalable/apps/Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "help/Makefile") CONFIG_FILES="$CONFIG_FILES help/Makefile" ;; "tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;; "tools/nautilus-extension/Makefile") CONFIG_FILES="$CONFIG_FILES tools/nautilus-extension/Makefile" ;; "tools/eog-plugin/Makefile") CONFIG_FILES="$CONFIG_FILES tools/eog-plugin/Makefile" ;; "tools/totem-plugin/Makefile") CONFIG_FILES="$CONFIG_FILES tools/totem-plugin/Makefile" ;; "po/stamp-it") CONFIG_COMMANDS="$CONFIG_COMMANDS po/stamp-it" ;; *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\).*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\).*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ || as_fn_error "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin" \ || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ || as_fn_error "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; esac \ || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "default-1":C) case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac ;; "po/stamp-it":C) if ! grep "^# INTLTOOL_MAKEFILE$" "po/Makefile.in" > /dev/null ; then as_fn_error "po/Makefile.in.in was not created by intltoolize." "$LINENO" 5 fi rm -f "po/stamp-it" "po/stamp-it.tmp" "po/POTFILES" "po/Makefile.tmp" >"po/stamp-it.tmp" sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/po/POTFILES.in" | sed '$!s/$/ \\/' >"po/POTFILES" sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r po/POTFILES } ' "po/Makefile.in" >"po/Makefile" rm -f "po/Makefile.tmp" mv "po/stamp-it.tmp" "po/stamp-it" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit $? fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi echo echo $PACKAGE v$VERSION echo echo Prefix............... : $prefix echo File Implementation.. : $FILE_IMPL echo Browser Implementation: $BROWSER_IMPL echo Dbus Services Dir.... : $DBUS_SERVICES_DIR echo Nautilus Extension... : $enable_nautilus_extension echo EOG Plugin........... : $enable_eog_plugin echo Totem Plugin......... : $enable_totem_plugin echo conduit-0.3.17/missing0000755000175000017500000002623311326116726011602 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2009-04-28.21; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # 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, 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, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; tar*) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar*) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case $firstarg in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case $firstarg in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: conduit-0.3.17/configure.ac0000644000175000017500000002073511326114370012463 00000000000000AC_INIT([conduit], [0.3.17],[john.stowers@gmail.com],[conduit]) AM_INIT_AUTOMAKE([1.9]) AC_CONFIG_SRCDIR(conduit/__init__.py) AC_CONFIG_MACRO_DIR([m4]) AM_MAINTAINER_MODE AC_SUBST(ACLOCAL_AMFLAGS, "$ACLOCAL_FLAGS -I m4") ################################################################################ # Translation & i18n ################################################################################ GETTEXT_PACKAGE="conduit" AC_SUBST([GETTEXT_PACKAGE]) AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], "$GETTEXT_PACKAGE", [Gettext package]) AM_GLIB_GNU_GETTEXT IT_PROG_INTLTOOL([0.35.0]) ################################################################################ # Gnome Doc Utils ################################################################################ GNOME_DOC_INIT ################################################################################ # Requirements ################################################################################ AM_PATH_PYTHON(2.4) ################################################################################ # File Implementation ################################################################################ FILE_IMPL="GIO" AC_ARG_WITH([file_impl], AC_HELP_STRING([--with-file-impl], [GIO (default), Python])) if test "$with_file_impl" = "Python" ; then FILE_IMPL=$with_file_impl fi AC_SUBST(FILE_IMPL) ################################################################################ # Browser Implementation ################################################################################ BROWSER_IMPL="webkit" AC_ARG_WITH([browser_impl], AC_HELP_STRING([--with-browser-impl], [webkit (default), gtkmozembed, system])) if test "$with_browser_impl" = "webkit" || test "$with_browser_impl" = "gtkmozembed" || test "$with_browser_impl" = "system"; then BROWSER_IMPL=$with_browser_impl fi AC_SUBST(BROWSER_IMPL) ################################################################################ # Check for neccessary python modules (that dont install pc files) ################################################################################ AM_CHECK_PYMOD([vobject], , , AC_MSG_ERROR([Python module vobject required to run Conduit])) AM_CHECK_PYMOD([dateutil], , , AC_MSG_ERROR([Python module dateutil required to run Conduit])) AM_CHECK_PYMOD_VERSION([goocanvas], [pygoocanvas_version], [0.9.0], , AC_MSG_ERROR([Python module goocanvas >= 0.9.0 required to run Conduit])) AM_CHECK_PYMOD_VERSION([dbus], [__version__], [0.80.0], , AC_MSG_ERROR([Python module dbus >= 0.80.0 required to run Conduit])) if test $FILE_IMPL = "GIO" ; then AM_CHECK_PYMOD_VERSION([gio], [pygio_version], [2.16.1], , AC_MSG_ERROR([Python module gio >= 2.16.1 required to run Conduit])) fi ################################################################################ # DBus ################################################################################ AC_ARG_WITH([session_bus_services_dir], AC_HELP_STRING([--with-session-bus-services-dir], [Path to DBus services directory])) if test "x$with_dbus_service_dir" != "x"; then DBUS_SERVICES_DIR=$with_dbus_service_dir else DBUS_SERVICES_DIR=${datadir}/dbus-1/services fi AC_SUBST(DBUS_SERVICES_DIR) #################################################################### # Nautilus Extension #################################################################### AC_ARG_ENABLE([nautilus_extension], AC_HELP_STRING([--enable-nautilus-extension], [Enable support for nautilus extension]),, [enable_nautilus_extension=no]) AC_ARG_WITH([nautilus_extension_dir], AC_HELP_STRING([--with-nautilus-extension-dir], [Path to nautilus extension dir])) AM_CONDITIONAL(ENABLE_NAUTILUS_EXTENSION, test "$enable_nautilus_extension" != "no") if test "x$with_nautilus_extension_dir" = "x" ; then ext_dir="~/.nautilus/python-extensions/" else ext_dir="$with_nautilus_extension_dir" fi NAUTILUS_EXTENSION_DIR="$ext_dir" AC_SUBST(NAUTILUS_EXTENSION_DIR) #################################################################### # EOG Plugin #################################################################### AC_ARG_ENABLE([eog_plugin], AC_HELP_STRING([--enable-eog-plugin], [Enable support for eog plugin]),, [enable_eog_plugin=no]) AC_ARG_WITH([eog_plugin_dir], AC_HELP_STRING([--with-eog-plugin-dir], [Path to eog plugin dir])) AM_CONDITIONAL(ENABLE_EOG_PLUGIN, test "$enable_eog_plugin" != "no") if test "x$with_eog_plugin_dir" = "x" ; then plug_dir="~/.gnome2/eog/plugins/" else plug_dir="$with_eog_plugin_dir" fi EOG_PLUGIN_DIR="$plug_dir" AC_SUBST(EOG_PLUGIN_DIR) #################################################################### # Totem Plugin #################################################################### AC_ARG_ENABLE([totem_plugin], AC_HELP_STRING([--enable-totem-plugin], [Enable support for Totem plugin]),, [enable_totem_plugin=no]) AC_ARG_WITH([totem_plugin_dir], AC_HELP_STRING([--with-totem-plugin-dir], [Path to Totem plugin dir])) AM_CONDITIONAL(ENABLE_TOTEM_PLUGIN, test "$enable_totem_plugin" != "no") if test "x$with_totem_plugin_dir" = "x" ; then plug_dir="~/.config/totem/plugins/" else plug_dir="$with_totem_plugin_dir" fi TOTEM_PLUGIN_DIR="$plug_dir" AC_SUBST(TOTEM_PLUGIN_DIR) ################################################################################ # Write the values of various paths for defs.py ################################################################################ AC_SUBST(VERSION) AC_SUBST(PACKAGE) AS_AC_EXPAND(PYTHONDIR, $pythondir) AS_AC_EXPAND(BINDIR, $bindir) AS_AC_EXPAND(LIBDIR, $libdir) AS_AC_EXPAND(LOCALEDIR, $datarootdir/locale) AS_AC_EXPAND(PKGDATADIR, $datarootdir/$PACKAGE) AS_AC_EXPAND(DATADIR, $datarootdir/$PACKAGE) AS_AC_EXPAND(MODULEDIR, $libdir/$PACKAGE/modules) AS_AC_EXPAND(DESKTOPFILEDIR, $datarootdir/applications) ################################################################################ #------------------------------------------------------------------------------- ################################################################################ AC_OUTPUT( Makefile conduit/defs.py conduit/Makefile conduit/utils/Makefile conduit/datatypes/Makefile conduit/dataproviders/Makefile conduit/gtkui/Makefile conduit/hildonui/Makefile conduit/platform/Makefile conduit/modules/Makefile conduit/modules/BackpackModule/Makefile conduit/modules/BackpackModule/backpack/Makefile conduit/modules/BansheeModule/Makefile conduit/modules/BoxDotNetModule/Makefile conduit/modules/BoxDotNetModule/BoxDotNetAPI/Makefile conduit/modules/EvolutionModule/Makefile conduit/modules/FileModule/Makefile conduit/modules/FeedModule/Makefile conduit/modules/FlickrModule/Makefile conduit/modules/FacebookModule/Makefile conduit/modules/FacebookModule/pyfacebook/Makefile conduit/modules/FspotModule/Makefile conduit/modules/iPodModule/Makefile conduit/modules/SmugMugModule/Makefile conduit/modules/SmugMugModule/SmugMugAPI/Makefile conduit/modules/GoogleModule/Makefile conduit/modules/ShutterflyModule/Makefile conduit/modules/ShutterflyModule/shutterfly/Makefile conduit/modules/RhythmboxModule/Makefile conduit/modules/N800Module/Makefile conduit/modules/NetworkModule/Makefile conduit/modules/GConfModule/Makefile conduit/modules/ZotoModule/Makefile conduit/modules/Firefox3Module/Makefile data/Makefile data/conduit.desktop.in data/conduit.pc data/icons/Makefile data/icons/hicolor/Makefile data/icons/hicolor/16x16/Makefile data/icons/hicolor/16x16/actions/Makefile data/icons/hicolor/16x16/apps/Makefile data/icons/hicolor/16x16/hildon/Makefile data/icons/hicolor/16x16/status/Makefile data/icons/hicolor/22x22/Makefile data/icons/hicolor/22x22/apps/Makefile data/icons/hicolor/24x24/Makefile data/icons/hicolor/24x24/apps/Makefile data/icons/hicolor/26x26/Makefile data/icons/hicolor/26x26/apps/Makefile data/icons/hicolor/32x32/Makefile data/icons/hicolor/32x32/apps/Makefile data/icons/hicolor/48x48/apps/Makefile data/icons/hicolor/48x48/Makefile data/icons/hicolor/scalable/Makefile data/icons/hicolor/scalable/apps/Makefile po/Makefile.in help/Makefile tools/Makefile tools/nautilus-extension/Makefile tools/eog-plugin/Makefile tools/totem-plugin/Makefile ) echo echo $PACKAGE v$VERSION echo echo Prefix............... : $prefix echo File Implementation.. : $FILE_IMPL echo Browser Implementation: $BROWSER_IMPL echo Dbus Services Dir.... : $DBUS_SERVICES_DIR echo Nautilus Extension... : $enable_nautilus_extension echo EOG Plugin........... : $enable_eog_plugin echo Totem Plugin......... : $enable_totem_plugin echo conduit-0.3.17/AUTHORS0000644000175000017500000000037311172176633011252 00000000000000jstowers:John Stowers johncarr:John Carr thomasvm:Thomas Van Machelen jonnylamb:Jonny Lamb arosenfeld:Alexandre Rosenfeld conduit-0.3.17/conduit/0000777000175000017500000000000011326117101011712 500000000000000conduit-0.3.17/conduit/conduit.real0000755000175000017500000000106011321403566014150 00000000000000#!/usr/bin/env python """ This module tests whether conduit appears to be running from the source directory. If this is the case it will modify the conduit constants such as SHARED_DATA_DIR to reflect this environment. Copyright: John Stowers, 2006 License: GPLv2 """ import sys import os.path #support running uninstalled _dirname = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) if os.path.exists(os.path.join(_dirname,"ChangeLog")): sys.path.insert(0, _dirname) import conduit import conduit.Main app = conduit.Main.Application() conduit-0.3.17/conduit/Synchronization.py0000644000175000017500000011503111321370454015411 00000000000000""" Holds class used for the actual synchronisation phase Copyright: John Stowers, 2006 License: GPLv2 """ import thread import traceback import threading import logging log = logging.getLogger("Syncronization") import conduit import conduit.dataproviders.DataProvider as DataProvider import conduit.Exceptions as Exceptions import conduit.DeltaProvider as DeltaProvider from conduit.Conflict import Conflict, CONFLICT_DELETE, CONFLICT_COPY_SOURCE_TO_SINK,CONFLICT_SKIP,CONFLICT_COPY_SINK_TO_SOURCE from conduit.datatypes import DataType, Rid, COMPARISON_OLDER, COMPARISON_EQUAL, COMPARISON_NEWER, COMPARISON_UNKNOWN def put_data(source, sink, sourceData, sourceDataRid, overwrite): """ Puts sourceData into sink, overwrites if overwrite is True. Updates the mappingDB """ #get the existing mapping mapping = conduit.GLOBALS.mappingDB.get_mapping( sourceUID=source.get_UID(), dataLUID=sourceDataRid.get_UID(), sinkUID=sink.get_UID() ) sourceDataLUID = sourceDataRid.get_UID() sinkDataLUID = mapping.get_sink_rid().get_UID() #put the data log.info("Putting data %s --> %s into %s" % (sourceDataLUID, sinkDataLUID, sink.get_UID())) sinkRid = sink.module.put( sourceData, overwrite, sinkDataLUID) #Update the mapping and save mapping.set_source_rid(sourceDataRid) mapping.set_sink_rid(sinkRid) conduit.GLOBALS.mappingDB.save_mapping(mapping) def delete_data(source, sink, dataLUID): """ Deletes data from sink and updates the mapping DB """ log.info("Deleting %s from %s" % (dataLUID, sink.get_UID())) sink.module.delete(dataLUID) mapping = conduit.GLOBALS.mappingDB.get_mapping( sourceUID=source.get_UID(), dataLUID=dataLUID, sinkUID=sink.get_UID() ) conduit.GLOBALS.mappingDB.delete_mapping(mapping) class SyncManager: """ Given a dictionary of relationships this class synchronizes the relevant sinks and sources. If there is a conflict then this is handled by the conflictResolver """ def __init__ (self, typeConverter): """ Constructor. Creates a dictionary of syncWorkers indexed by conduit """ self.syncWorkers = {} self.typeConverter = typeConverter def _cancel_sync_thread(self, cond): log.warn("Conduit already in queue (alive: %s)" % self.syncWorkers[cond].isAlive()) #If the thread is alive then cancel it if self.syncWorkers[cond].isAlive(): log.warn("Cancelling thread") self.syncWorkers[cond].cancel() self.syncWorkers[cond].join() #Will block def _on_sync_completed(self, cond, abort, error, conflict, worker): if cond in self.syncWorkers: log.debug("Deleting worker: %s" % worker) del(self.syncWorkers[cond]) def _start_worker_thread(self, cond, worker): log.info("Setting global cancel flag") conduit.GLOBALS.cancelled = False log.debug("Starting worker: %s" % worker) cond.connect("sync-completed", self._on_sync_completed, worker) self.syncWorkers[cond] = worker self.syncWorkers[cond].start() def is_busy(self): """ Returns true if any conduit is currently undergoing a sync """ for cond in self.syncWorkers: if self.syncWorkers[cond].isAlive(): return True return False def sync_in_progress(self, cond): """ Returns true if cond is currently undergoing sync, refresh etc """ return cond in self.syncWorkers and self.syncWorkers[cond].isAlive() def cancel_all(self): """ Cancels all threads and also joins() them. Will block """ for c in self.syncWorkers: self._cancel_sync_thread(c) def join_one(self, cond, timeout=None): """ Blocks until the thread associated with the supplied conduit finishes """ log.info("Waiting for thread to finish") self.syncWorkers[cond].join(timeout) def join_all(self, timeout=None): """ Joins all threads. This function will block the calling thread """ for c in self.syncWorkers: self.syncWorkers[c].join(timeout) def run_blocking_dataprovider_function_calls(self, dataprovider, callback, *functions): """ Runs functions in a seperate thread, calling callback when complete @param dataprovider: The dataprovider associated with the functions to be run @param callback: The function to call when all functions have been run @param functions: A list of functions to call """ #need to get the conduit assocated with this dataprovider because the sync-completed #signal is emmited from the conduit object conds = [] conds.extend(conduit.GLOBALS.app.guiSyncSet.get_all_conduits()) conds.extend(conduit.GLOBALS.app.dbusSyncSet.get_all_conduits()) for c in conds: for dpw in c.get_all_dataproviders(): if dataprovider == dpw.module: #found it! if c not in self.syncWorkers: #connect the supplied callback c.connect("sync-completed",callback) #start the thread bfcw = BlockingFunctionCallWorker(c, *functions) self._start_worker_thread(c, bfcw) return log.info("Could not create BlockingFunctionCallWorker") def refresh_dataprovider(self, cond, dataproviderWrapper): if cond in self.syncWorkers: log.info("Refresh dataproviderWrapper already in progress") self.join_one(cond) threadedWorker = RefreshDataProviderWorker(cond, dataproviderWrapper) self._start_worker_thread(cond, threadedWorker) def refresh_conduit(self, cond): if cond in self.syncWorkers: log.info("Refresh already in progress") self.join_one(cond) threadedWorker = SyncWorker(self.typeConverter, cond, False) self._start_worker_thread(cond, threadedWorker) def sync_conduit(self, cond): if cond in self.syncWorkers: log.info("Sync already in progress") self.join_one(cond) threadedWorker = SyncWorker(self.typeConverter, cond, True) self._start_worker_thread(cond, threadedWorker) def did_sync_abort(self, cond): """ Returns True if the supplied conduit aborted (the sync did not complete due to an unhandled exception, a SynchronizeFatalError or the conduit was unsyncable (source did not refresh, etc) """ return self.syncWorkers[cond].aborted def did_sync_error(self, cond): """ Returns True if the supplied conduit raised a non fatal SynchronizeError during sync """ return self.syncWorkers[cond].did_sync_error() def did_sync_conflict(self, cond): """ Returns True if the supplied conduit encountered a conflict during processing """ return self.syncWorkers[cond].did_sync_conflict() class _ThreadedWorker(threading.Thread): """ Aa python thread, Base class for refresh and syncronization operations """ CONFIGURE_STATE = 0 REFRESH_STATE = 1 SYNC_STATE = 2 DONE_STATE = 3 def __init__(self): threading.Thread.__init__(self) log.debug("Created thread %s (thread: %s)" % (self,thread.get_ident())) #Python threads are not cancellable. Hopefully this will be fixed #in Python 3000 self.cancelled = False #true if the sync aborts via an unhandled exception self.aborted = False #Keep track of any non conflicts, fatal errors (or trapped exceptions) in the sync process. #Class variable because these may occur in a data conversion. #Needed so that the correct status is shown on the GUI at the end of the sync process self.sinkErrors = {} #Start at the beginning self.state = self.CONFIGURE_STATE def _get_changes(self, source, sink): """ Returns all the data from the source to the sink. If the dataprovider implements get_changes() then this is called. Otherwise the dataprovider is proxied using DeltaProvider @returns: added, modified, deleted """ try: added, modified, deleted = source.module.get_changes() except NotImplementedError: delta = DeltaProvider.DeltaProvider(source, sink) added, modified, deleted = delta.get_changes() log.debug("%s Changes: New %s items\n%s" % (source.get_UID(), len(added), added)) log.debug("%s Changes: Modified %s items\n%s" % (source.get_UID(), len(modified), modified)) log.debug("%s Changes: Deleted %s items\n%s" % (source.get_UID(), len(deleted), deleted)) #FIXME: Copy the lists because they are modified in place somewhere... return added[:], modified[:], deleted[:] def cancel(self): """ Cancels the sync thread. Does not do so immediately but as soon as possible. """ self.cancelled = True def did_sync_error(self): #conflicts do not specifically count as errors so remove them errors = self.sinkErrors.values() while True: try: errors.remove(DataProvider.STATUS_DONE_SYNC_CONFLICT) except ValueError: break return len(errors) > 0 def did_sync_conflict(self): errors = self.sinkErrors.values() return DataProvider.STATUS_DONE_SYNC_CONFLICT in errors class SyncWorker(_ThreadedWorker): """ Class designed to be operated within a thread used to perform the synchronization operation. Inherits from GObject because it uses signals to communcate with the main GUI. Operates on a per Conduit basis, so a single SyncWorker may synchronize one source with many sinks within a single conduit """ PROGRESS_UPDATE_THRESHOLD = 5.0/100 def __init__(self, typeConverter, cond, do_sync): _ThreadedWorker.__init__(self) self.typeConverter = typeConverter self.cond = cond self.source = cond.datasource self.sinks = cond.datasinks self.do_sync = do_sync self._progress = 0 self._progressUIDs = [] if self.cond.is_two_way(): self.setName("%s <--> %s" % (self.source, self.sinks[0])) else: self.setName("%s |--> %s" % (self.source, self.sinks)) def _emit_progress(self, progress, dataUID): """ Emits progress signals, if the elapsed progress since the last call to this function is greater that 5%. This is necessary because otherwise we starve the main loop with too frequent progress events """ self._progressUIDs.append(dataUID) if (progress - self._progress) > self.PROGRESS_UPDATE_THRESHOLD or progress == 1.0: self._progress = progress self.cond.emit("sync-progress", self._progress, self._progressUIDs) self._progressUIDs = [] def _get_data(self, source, sink, uid): """ Gets the data from source. Handles exceptions, etc. @returns: The data that was got or None """ data = None try: data = source.module.get(uid) except Exceptions.SyncronizeError, err: log.warn("%s\n%s" % (err, traceback.format_exc())) self.sinkErrors[sink] = DataProvider.STATUS_DONE_SYNC_ERROR return data def _put_data(self, source, sink, sourceData, sourceDataRid): """ Handles exceptions when putting data from source to sink. Default is not to overwrite @returns: True if the data was successfully put """ if sourceData != None: try: put_data(source, sink, sourceData, sourceDataRid, False) return True except Exceptions.SyncronizeError, err: log.warn("%s\n%s" % (err, traceback.format_exc())) self.sinkErrors[sink] = DataProvider.STATUS_DONE_SYNC_ERROR except Exceptions.SynchronizeConflictError, err: comp = err.comparison if comp == COMPARISON_EQUAL: log.info("Skipping %s (Equal)" % sourceData) else: assert(err.fromData == sourceData) self._apply_conflict_policy(source, sink, err.comparison, sourceData, sourceDataRid, err.toData, err.toData.get_rid()) else: log.info("Could not put data: Was None") return False def _convert_data(self, source, sink, data): """ Converts data into a format acceptable for sink, handling exceptions, etc. """ newdata = None try: newdata = self.typeConverter.convert(source.get_output_type(), sink.get_input_type(), data) except Exceptions.ConversionDoesntExistError, err: log.warn("Error performing conversion:\n%s" % err) self.sinkErrors[sink] = DataProvider.STATUS_DONE_SYNC_SKIPPED except Exceptions.ConversionError, err: log.warn("Error performing conversion:\n%s" % err) self.sinkErrors[sink] = DataProvider.STATUS_DONE_SYNC_ERROR except Exception: log.critical("UNKNOWN CONVERSION ERROR\n%s" % traceback.format_exc()) self.sinkErrors[sink] = DataProvider.STATUS_DONE_SYNC_ERROR return newdata def _apply_deleted_policy(self, sourceWrapper, sourceDataLUID, sinkWrapper, sinkDataLUID): """ Applies user policy when data has been deleted from source. sourceDataLUID is the original UID of the data that has been deleted sinkDataLUID is the uid of the data in sink that should now be deleted """ if self.cond.get_policy("deleted") == "skip": log.debug("Deleted Policy: Skipping") elif self.cond.get_policy("deleted") == "ask": log.debug("Deleted Policy: Ask") #FIXME: Delete should be handled differently from conflict self.sinkErrors[sinkWrapper] = DataProvider.STATUS_DONE_SYNC_CONFLICT #check if the source is visually on the left of the sink if self.source == sourceWrapper: #it is on the left #dont support copying back yet #(CONFLICT_COPY_SINK_TO_SOURCE,CONFLICT_SKIP) validResolveChoices = (CONFLICT_DELETE, CONFLICT_SKIP) else: #dont support copying back yet #(CONFLICT_SKIP,CONFLICT_COPY_SINK_TO_SOURCE) validResolveChoices = (CONFLICT_DELETE, CONFLICT_SKIP) sourceData = DeletedData(sourceDataLUID) sinkData = DeletedData(sinkDataLUID) c = Conflict( self.cond, #the conduit this conflict belongs to sourceWrapper, #datasource wrapper sourceData, #from data sourceData.get_rid(), #from data rid sinkWrapper, #datasink wrapper sinkData, #to data sinkData.get_rid(), #to data rid validResolveChoices, #valid resolve choices True #This conflict is a deletion ) self.cond.emit_conflict(c) elif self.cond.get_policy("deleted") == "replace": log.debug("Deleted Policy: Delete") #FIXME: Delete should be handled differently from conflict self.sinkErrors[sinkWrapper] = DataProvider.STATUS_DONE_SYNC_CONFLICT delete_data(sourceWrapper, sinkWrapper, sinkDataLUID) def _apply_conflict_policy(self, sourceWrapper, sinkWrapper, comparison, fromData, fromDataRid, toData, toDataRid): """ Applies user policy when a put() has failed. This may mean emitting the conflict up to the GUI or skipping altogether """ if self.cond.get_policy("conflict") == "skip": log.debug("Conflict Policy: Skipping") elif self.cond.get_policy("conflict") == "ask": log.debug("Conflict Policy: Ask") self.sinkErrors[sinkWrapper] = DataProvider.STATUS_DONE_SYNC_CONFLICT if sourceWrapper.module_type in ["twoway", "sink"]: #in twoway case the user can copy back avail = (CONFLICT_SKIP,CONFLICT_COPY_SOURCE_TO_SINK,CONFLICT_COPY_SINK_TO_SOURCE) else: avail = (CONFLICT_SKIP,CONFLICT_COPY_SOURCE_TO_SINK) c = Conflict( self.cond, sourceWrapper, fromData, fromDataRid, sinkWrapper, toData, toDataRid, avail, False ) self.cond.emit_conflict(c) elif self.cond.get_policy("conflict") == "replace": log.debug("Conflict Policy: Replace") self.sinkErrors[sinkWrapper] = DataProvider.STATUS_DONE_SYNC_CONFLICT try: put_data(sourceWrapper, sinkWrapper, fromData, fromDataRid, True) except: log.warn("Forced Put Failed\n%s" % traceback.format_exc()) def check_thread_not_cancelled(self, dataprovidersToCancel): """ Checks if the thread has been scheduled to be cancelled. If it has then this function sets the status of the dataproviders to indicate that they were stopped through a cancel operation. """ if self.cancelled: for s in dataprovidersToCancel: s.module.set_status(DataProvider.STATUS_DONE_SYNC_CANCELLED) raise Exceptions.StopSync(self.state) def one_way_sync(self, source, sink): """ Transfers numItems of data from source to sink. """ log.info("Synchronizing %s |--> %s " % (source, sink)) #get all the data added, modified, deleted = self._get_changes(source, sink) #handle deleted data for d in deleted: matchingUID = conduit.GLOBALS.mappingDB.get_matching_UID(source.get_UID(), d, sink.get_UID()) if matchingUID != None: self._apply_deleted_policy(source, d, sink, matchingUID) #one way sync treats added and modifed the same. Both get transferred items = added + modified numItems = len(items) idx = 0 for i in items: idx += 1.0 self.check_thread_not_cancelled([source, sink]) #transfer the data data = self._get_data(source, sink, i) if data != None: log.debug("1WAY PUT: %s (%s) -----> %s" % (source.name,data.get_UID(),sink.name)) dataRid = data.get_rid() data = self._convert_data(source, sink, data) self._put_data(source, sink, data, dataRid) #work out the percent complete done = idx/(numItems*len(self.sinks)) + \ float(self.sinks.index(sink))/len(self.sinks) self._emit_progress(done, i) def two_way_sync(self, source, sink): """ Performs a two way sync from source to sink and back. """ def modified_and_deleted(dp1, modified, dp2, deleted): found = [] for i in modified[:]: matchingUID = conduit.GLOBALS.mappingDB.get_matching_UID(dp1.get_UID(), i, dp2.get_UID()) if deleted.count(matchingUID) != 0: log.debug("2WAY MOD+DEL: %s v %s" % (i, matchingUID)) deleted.remove(matchingUID) modified.remove(i) found += [(dp2, matchingUID, dp1)] return found log.info("Synchronizing (Two Way) %s <--> %s " % (source, sink)) #Need to do all the analysis before we touch the mapping db toput = [] # (sourcedp, dataUID, sinkdp) todelete = [] # (sourcedp, dataUID, sinkdp) tocomp = [] # (dp1, data1UID, dp2, data2UID) #PHASE ONE: CALCULATE WHAT NEEDS TO BE DONE #get all the datauids sourceAdded, sourceModified, sourceDeleted = self._get_changes(source, sink) sinkAdded, sinkModified, sinkDeleted = self._get_changes(sink, source) #added data can be put right away toput += [(source, i, sink) for i in sourceAdded] toput += [(sink, i, source) for i in sinkAdded] #check first for data that had been simulatainously modified and deleted todelete += modified_and_deleted(source, sourceModified, sink, sinkDeleted) todelete += modified_and_deleted(sink, sinkModified, source, sourceDeleted) #as can deleted data todelete += [(source, i, sink) for i in sourceDeleted] todelete += [(sink, i, source) for i in sinkDeleted] #modified is a bit harder because we need to check if both side have #been modified at the same time. First find items in both lists and seperate #them out as they need to be compared. for i in sourceModified[:]: matchingUID = conduit.GLOBALS.mappingDB.get_matching_UID(source.get_UID(), i, sink.get_UID()) if sinkModified.count(matchingUID) != 0: log.warn("2WAY BOTH MODIFIED: %s v %s" % (i, matchingUID)) sourceModified.remove(i) sinkModified.remove(matchingUID) tocomp.append( (source, i, sink, matchingUID) ) #all that remains in the original lists are to be put toput += [(source, i, sink) for i in sourceModified] toput += [(sink, i, source) for i in sinkModified] total = len(toput) + len(todelete) + len(tocomp) cnt = 0 #PHASE TWO: TRANSFER DATA for sourcedp, dataUID, sinkdp in todelete: matchingUID = conduit.GLOBALS.mappingDB.get_matching_UID(sourcedp.get_UID(), dataUID, sinkdp.get_UID()) log.debug("2WAY DEL: %s (%s)" % (sinkdp.name, matchingUID)) if matchingUID != None: self._apply_deleted_policy(sourcedp, dataUID, sinkdp, matchingUID) #progress cnt = cnt+1 self._emit_progress(float(cnt)/total, dataUID) for sourcedp, dataUID, sinkdp in toput: data = self._get_data(sourcedp, sinkdp, dataUID) if data != None: log.debug("2WAY PUT: %s (%s) -----> %s" % (sourcedp.name,dataUID,sinkdp.name)) dataRid = data.get_rid() data = self._convert_data(sourcedp, sinkdp, data) self._put_data(sourcedp, sinkdp, data, dataRid) cnt = cnt+1 self._emit_progress(float(cnt)/total, dataUID) #FIXME: rename dp1 -> sourcedp1 and dp2 -> sinkdp2 because when both #data is modified we might as well choost source -> sink as the comparison direction for dp1, data1UID, dp2, data2UID in tocomp: data1 = self._get_data(dp1, dp2, data1UID) data1Rid = data1.get_rid() data2 = self._get_data(dp2, dp1, data2UID) data2Rid = data2.get_rid() #Only need to convert one data to the other type #choose to convert the source data for no reason other than convention data1 = self._convert_data(dp1, dp2, data1) log.debug("2WAY CMP: %s v %s" % (data1, data2)) #compare the data if data1 != None and data2 != None: comparison = data1.compare(data2) if comparison == conduit.datatypes.COMPARISON_OLDER: self._apply_conflict_policy(dp2, dp1, COMPARISON_UNKNOWN, data2, data2Rid, data1, data1Rid) else: self._apply_conflict_policy(dp1, dp2, COMPARISON_UNKNOWN, data1, data1Rid, data2, data2Rid) cnt = cnt+1 self._emit_progress(float(cnt)/total, data1UID) def run(self): """ The main syncronisation state machine. Takes the conduit through the refresh->get,put,get,put->done steps, setting its status at the appropriate time and performing nicely in the case of errors. It is also threaded so remember 1. Syncronization should not block the GUI 2. Due to pygtk/gtk single threadedness do not attempt to communicate with the gui in any way other than signals, which since Glib 2.10 are threadsafe. If any error occurs during sync raise a L{conduit.Exceptions.StopSync} exception otherwise exit normally @raise Exceptions.StopSync: Raises a L{conduit.Exceptions.StopSync} exception if the synchronisation state machine does not complete, in some way, without success. """ log.debug("Started thread %s (thread: %s)" % (self,thread.get_ident())) try: log.debug("Sync %s beginning. Slow: %s, Twoway: %s" % ( self, self.cond.do_slow_sync(), self.cond.is_two_way() )) #Variable to exit the loop finished = False #Keep track of those sinks that didnt refresh ok sinkDidntRefreshOK = {} sinkDidntConfigureOK = {} #Error handling is a bit complex because we need to send #signals back to the gui for display, and because some errors #are not fatal. If there is an error, set the #'working' statuses immediately (Sync, Refresh) and set the #Negative status (error, conflict, etc) at the end so they remain #on the GUI and the user can see them. #UNLESS the error is Fatal (causes us to throw a stopsync exceptiion) #in which case set the error status immediately. self.cond.emit("sync-started") while not finished: self.check_thread_not_cancelled([self.source] + self.sinks) log.debug("Syncworker state %s" % self.state) #Check dps have been configured if self.state is self.CONFIGURE_STATE: if not self.source.module.is_configured( isSource=True, isTwoWay=self.cond.is_two_way()): self.source.module.set_status(DataProvider.STATUS_DONE_SYNC_NOT_CONFIGURED) #Cannot continue if source not configured raise Exceptions.StopSync(self.state) for sink in self.sinks: if not sink.module.is_configured( isSource=False, isTwoWay=self.cond.is_two_way()): sinkDidntConfigureOK[sink] = True self.sinkErrors[sink] = DataProvider.STATUS_DONE_SYNC_NOT_CONFIGURED #Need to have at least one successfully configured sink if len(sinkDidntConfigureOK) < len(self.sinks): #If this thread is a sync thread do a sync self.state = self.REFRESH_STATE else: #We are finished log.warn("Not enough configured datasinks") self.aborted = True self.state = self.DONE_STATE #refresh state elif self.state is self.REFRESH_STATE: log.debug("Source Status = %s" % self.source.module.get_status()) #Refresh the source try: self.source.module.refresh() self.source.module.set_status(DataProvider.STATUS_DONE_REFRESH_OK) except Exceptions.RefreshError: self.source.module.set_status(DataProvider.STATUS_DONE_REFRESH_ERROR) log.warn("RefreshError: %s" % self.source) #Cannot continue with no source data raise Exceptions.StopSync(self.state) except Exception: log.critical("UNKNOWN REFRESH ERROR: %s\n%s" % (self.source,traceback.format_exc())) self.source.module.set_status(DataProvider.STATUS_DONE_REFRESH_ERROR) #Cannot continue with no source data raise Exceptions.StopSync(self.state) #Refresh all the sinks. At least one must refresh successfully for sink in self.sinks: self.check_thread_not_cancelled([self.source, sink]) if sink not in sinkDidntConfigureOK: try: sink.module.refresh() sink.module.set_status(DataProvider.STATUS_DONE_REFRESH_OK) except Exceptions.RefreshError: log.warn("RefreshError: %s" % sink) sinkDidntRefreshOK[sink] = True self.sinkErrors[sink] = DataProvider.STATUS_DONE_REFRESH_ERROR except Exception: log.critical("UNKNOWN REFRESH ERROR: %s\n%s" % (sink,traceback.format_exc())) sinkDidntRefreshOK[sink] = True self.sinkErrors[sink] = DataProvider.STATUS_DONE_REFRESH_ERROR #Need to have at least one successfully refreshed sink if len(sinkDidntRefreshOK) < len(self.sinks): #If this thread is a sync thread do a sync if self.do_sync: self.state = self.SYNC_STATE else: #This must be a refresh thread so we are done self.state = self.DONE_STATE else: #We are finished log.info("Not enough sinks refreshed") self.aborted = True self.state = self.DONE_STATE #synchronize state elif self.state is self.SYNC_STATE: for sink in self.sinks: self.check_thread_not_cancelled([self.source, sink]) #only sync with those sinks that refresh'd OK if sink not in sinkDidntRefreshOK: try: #now perform a one or two way sync depending on the user prefs #and the capabilities of the dataprovider if self.cond.is_two_way(): #two way self.two_way_sync(self.source, sink) else: #one way self.one_way_sync(self.source, sink) except Exceptions.SyncronizeFatalError, err: log.warn("%s\n%s" % (err, traceback.format_exc())) sink.module.set_status(DataProvider.STATUS_DONE_SYNC_ERROR) self.source.module.set_status(DataProvider.STATUS_DONE_SYNC_ERROR) #cannot continue with this source, sink pair continue except Exception: log.critical("UNKNOWN SYNCHRONIZATION ERROR\n%s" % traceback.format_exc()) sink.module.set_status(DataProvider.STATUS_DONE_SYNC_ERROR) self.source.module.set_status(DataProvider.STATUS_DONE_SYNC_ERROR) #cannot continue with this source, sink pair continue #Done go clean up self.state = self.DONE_STATE #Done successfully go home without raising exception elif self.state is self.DONE_STATE: #Now go back and check for errors, so that we can tell the GUI #First update those sinks which had no errors for sink in self.sinks: if sink not in self.sinkErrors: #Tell the gui if things went OK. if self.do_sync: sink.module.set_status(DataProvider.STATUS_DONE_SYNC_OK) else: sink.module.set_status(DataProvider.STATUS_DONE_REFRESH_OK) #Then those sinks which had some error for sink in self.sinkErrors: sink.module.set_status(self.sinkErrors[sink]) #It is safe to put this call here because all other source related #Errors raise a StopSync exception and the thread exits if self.do_sync: self.source.module.set_status(DataProvider.STATUS_DONE_SYNC_OK) else: self.source.module.set_status(DataProvider.STATUS_DONE_REFRESH_OK) #Exit thread finished = True except Exceptions.StopSync: log.warn("Sync Aborted") self.aborted = True #Post sync cleanup and notification of sync success error = self.did_sync_error() conflict = self.did_sync_conflict() for s in [self.source] + self.sinks: s.module.finish(self.aborted, error, conflict) conduit.GLOBALS.mappingDB.save() self.cond.emit("sync-completed", self.aborted, error, conflict) class RefreshDataProviderWorker(_ThreadedWorker): """ Refreshes a single dataprovider, handling any errors, etc """ def __init__(self, cond, dataproviderWrapper): """ @param dataproviderWrapper: The dp to refresh """ _ThreadedWorker.__init__(self) self.dataproviderWrapper = dataproviderWrapper self.cond = cond self.setName("%s" % self.dataproviderWrapper) def run(self): """ The main refresh state machine. Takes the conduit through the init->is_configured->refresh steps, setting its status at the appropriate time and performing nicely in the case of errors. """ log.debug("Started thread %s (thread: %s)" % (self,thread.get_ident())) try: log.debug("Refresh %s beginning" % self) self.cond.emit("sync-started") if not self.dataproviderWrapper.module.is_configured( isSource=self.cond.get_dataprovider_position(self.dataproviderWrapper)[0]==0, isTwoWay=self.cond.is_two_way()): self.dataproviderWrapper.module.set_status(DataProvider.STATUS_DONE_SYNC_NOT_CONFIGURED) #Cannot continue if source not configured raise Exceptions.StopSync(self.state) self.state = self.REFRESH_STATE try: self.dataproviderWrapper.module.refresh() self.dataproviderWrapper.module.set_status(DataProvider.STATUS_DONE_REFRESH_OK) except Exceptions.RefreshError: self.dataproviderWrapper.module.set_status(DataProvider.STATUS_DONE_REFRESH_ERROR) log.warn("RefreshError: %s" % self.dataproviderWrapper) #Cannot continue with no source data raise Exceptions.StopSync(self.state) except Exception: self.dataproviderWrapper.module.set_status(DataProvider.STATUS_DONE_REFRESH_ERROR) log.critical("UNKNOWN REFRESH ERROR: %s\n%s" % (self.dataproviderWrapper,traceback.format_exc())) #Cannot continue with no source data raise Exceptions.StopSync(self.state) except Exceptions.StopSync: log.warn("Sync Aborted") self.aborted = True conduit.GLOBALS.mappingDB.save() self.cond.emit("sync-completed", self.aborted, self.did_sync_error(), self.did_sync_conflict()) class BlockingFunctionCallWorker(_ThreadedWorker): """ Calls the provided (blocking) function in a new thread. When the function returns a sync-completed signal is sent """ def __init__(self, cond, *functions): _ThreadedWorker.__init__(self) self.cond = cond self.functions = functions self.setName("%s functions" % len(self.functions)) def run(self): log.debug("Started thread %s (thread: %s)" % (self,thread.get_ident())) try: #FIXME: Set the status text on the dataprovider for f in self.functions: log.debug("FunctionCall %s beginning" % f.__name__) f() self.aborted = False except Exception, e: log.warn("FunctionCall error: %s" % e) self.aborted = True self.cond.emit("sync-completed", self.aborted, False, False) class DeletedData(DataType.DataType): """ Simple wrapper around a deleted item. If an item has been deleted then we can no longer rely on its open_URI, and we must fall back to a plain string object """ def __init__(self, UID, **kwargs): self.UID = UID self.snippet = kwargs.get("snippet", "Deleted %s" % self.UID) def get_UID(self): return self.UID def get_rid(self): return Rid(self.UID) def get_snippet(self): return self.snippet def get_open_URI(self): return None def __str__(self): return "Deleted Data: %s" % self.UID conduit-0.3.17/conduit/Module.py0000644000175000017500000003014411321403566013437 00000000000000""" Classes associated with dynamic module loading Copyright: John Stowers, 2006 License: GPLv2 """ import gobject import os, os.path import traceback import pydoc import logging log = logging.getLogger("Module") import conduit.dataproviders import conduit.ModuleWrapper as ModuleWrapper import conduit.Knowledge as Knowledge import conduit.Vfs as Vfs from gettext import gettext as _ class ModuleManager(gobject.GObject): """ Generic dynamic module loader for conduit. Given a path it loads all modules in that directory, keeping them in an internam array which may be returned via get_modules Also manages dataprovider factories which make dataproviders available at runtime """ __gsignals__ = { #Fired when a new instantiatable DP becomes available. It is described via #a wrapper because we do not actually instantiate it till later - to save memory "dataprovider-available" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [ gobject.TYPE_PYOBJECT]), #The DPW describing the new DP class "dataprovider-unavailable" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [ gobject.TYPE_PYOBJECT]), #The DPW describing the DP class which is now unavailable # Fired when load_all has loaded every available modules "all-modules-loaded" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, []), # Fired when a syncset is created "syncset-added" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [ gobject.TYPE_PYOBJECT]), #The syncset that was added } def __init__(self, dirs=None): """ @param dirs: A list of directories to search. Relative pathnames and paths containing ~ will be expanded. If dirs is None the ModuleLoader will not search for modules. @type dirs: C{string[]} """ gobject.GObject.__init__(self) #Dict of loaded modulewrappers. key is wrapper.get_key() #Stored seperate to the classes because dynamic dataproviders may #use the same class but with different initargs (diff keys) self.moduleWrappers = {} #Files that could not be loaded properly self.invalidFiles = [] #Keep a ref to dataprovider factories so they are not collected self.dataproviderFactories = [] #scan all dirs for files in the right format (*Module/*Module.py) self.filelist = self._build_filelist_from_directories(dirs) def _on_dynamic_dataprovider_added(self, monitor, dpw, klass): """ Store the ipod so it can be retrieved later by the treeview/model emit a signal so it is added to the GUI """ log.info("Dynamic dataprovider (%s) available by %s" % (dpw, monitor)) self._append_module(dpw, klass) def _on_dynamic_dataprovider_removed(self, monitor, key): log.info("Dynamic dataprovider (%s) unavailable by %s" % (key, monitor)) self._remove_module(key) def _emit_available(self, dataproviderWrapper): if dataproviderWrapper.module_type in ["source", "sink", "twoway"]: self.emit("dataprovider-available", dataproviderWrapper) def _emit_unavailable(self, dataproviderWrapper): if dataproviderWrapper.module_type in ["source", "sink", "twoway"]: self.emit("dataprovider-unavailable", dataproviderWrapper) def _build_filelist_from_directories(self, directories=None): """ Converts a given array of directories into a list containing the filenames of all qualified modules. Recurses into directories and adds files if they have the same name as the directory in which they reside. This method is automatically invoked by the constructor. """ res = [] if not directories: return res #convert to abs path directories = [os.path.abspath(os.path.expanduser(s)) for s in directories] while len(directories) > 0: d = directories.pop(0) try: if not os.path.exists(d): continue for i in os.listdir(d): f = os.path.join(d,i) if os.path.isfile(f) and self._is_module(f): if os.path.basename(f) not in [os.path.basename(j) for j in res]: res.append(f) elif os.path.isdir(f) and self._is_module_dir(f): directories.append(f) except OSError, err: log.warn("Error reading directory %s, skipping." % (d)) return res def _is_module(self, filename): return filename.endswith("Module.py") def _is_module_dir(self, dirname): return dirname.endswith("Module") def _append_module(self, wrapper, klass): #Check if the wrapper is unique key = wrapper.get_dnd_key() if key not in self.moduleWrappers: self.moduleWrappers[key] = wrapper #Emit a signal because this wrapper is new self._emit_available(wrapper) else: log.warn("Wrapper with key %s allready loaded" % key) def _remove_module(self, key): """ Looks for a given key in the class registry and attempts to remove it @param key: The key of the class to remove """ if not key in self.moduleWrappers: log.warn("Unable to remove class - it isn't available! (%s)" % key) return #keep a ref for the signal emission dpw = self.moduleWrappers[key] # remove from moduleWrappers... del self.moduleWrappers[key] # notify everything that dp is no longer available self._emit_unavailable(dpw) def _import_file(self, filename): """ Tries to import the specified file. Returns the python module on succes. Primarily for internal use. Note that the python module returned may actually contain several more loadable modules. """ mods = pydoc.importfile (filename) try: if (mods.MODULES): pass except AttributeError: log.warn("The file %s is not a valid module. Skipping." % (filename)) log.warn("A module must have the variable MODULES defined as a dictionary.") raise for modules, infos in mods.MODULES.items(): for i in ModuleWrapper.COMPULSORY_ATTRIBUTES: if i not in infos: log.warn("Class %s in file %s does define a %s attribute. Skipping." % (modules, filename, i)) raise Exception return mods def _load_modules_in_file(self, filename): """ Loads all modules in the given file """ try: mod = self._import_file(filename) for modules, infos in mod.MODULES.items(): try: klass = getattr(mod, modules) if infos["type"] == "dataprovider" or infos["type"] == "converter": mod_wrapper = ModuleWrapper.ModuleWrapper( klass=klass, initargs=(), category=getattr(klass, "_category_", conduit.dataproviders.CATEGORY_TEST) ) #Save the module (signal is emitted in _append_module) self._append_module( mod_wrapper, klass ) elif infos["type"] == "dataprovider-factory": # build a dict of kwargs to pass to factories kwargs = { "moduleManager": self, } #instantiate and store the factory instance = klass(**kwargs) self.dataproviderFactories.append(instance) else: log.warn("Class is an unknown type: %s" % klass) except AttributeError: log.warn("Could not find module %s in %s\n%s" % (modules,filename,traceback.format_exc())) except pydoc.ErrorDuringImport, e: log.warn("Error loading the file: %s\n%s" % (filename, "".join(traceback.format_exception(e.exc,e.value,e.tb)))) self.invalidFiles.append(os.path.basename(filename)) except Exception, e: log.error("Error loading the file: %s\n%s" % (filename, traceback.format_exc())) self.invalidFiles.append(os.path.basename(filename)) def load_all(self, whitelist, blacklist): """ Loads all classes in the configured paths. If whitelist and blacklist are supplied then the name of the file is tested against them. Default policy is to load all modules unless """ for f in self.filelist: name, ext = Vfs.uri_get_filename_and_extension(f) if whitelist: if name in whitelist: self._load_modules_in_file(f) elif blacklist: if name not in blacklist: self._load_modules_in_file(f) else: self._load_modules_in_file(f) for i in self.dataproviderFactories: i.connect("dataprovider-removed", self._on_dynamic_dataprovider_removed) i.connect("dataprovider-added", self._on_dynamic_dataprovider_added) i.probe() self.emit('all-modules-loaded') def get_all_modules(self): """ @returns: All loaded modules @rtype: L{conduit.ModuleManager.ModuleWrapper}[] """ return self.moduleWrappers.values() def get_modules_by_type(self, *type_filter): """ Returns all loaded modules of type specified by type_filter or all if the filter is set to None. """ if len(type_filter) == 0: return self.moduleWrappers.values() return [i for i in self.moduleWrappers.values() if i.module_type in type_filter] def get_module_wrapper_with_instance(self, wrapperKey): """ Returns a new ModuleWrapper with a dp instace described by wrapperKey """ mod_wrapper = None if wrapperKey in self.moduleWrappers: #Get the existing wrapper m = self.moduleWrappers[wrapperKey] #Make a copy of it, containing an instantiated module mod_wrapper = ModuleWrapper.ModuleWrapper( klass=m.klass, initargs=m.initargs, category=m.category ) mod_wrapper.instantiate_module() else: log.warn("Could not find module wrapper: %s" % (wrapperKey)) mod_wrapper = ModuleWrapper.PendingDataproviderWrapper(wrapperKey) return mod_wrapper def make_modules_callable(self, type_filter): """ If it is necesary to call the modules directly. This function creates those instances in wrappers of the specified type """ for i in self.moduleWrappers.values(): if i.module_type == type_filter: i.instantiate_module() def list_preconfigured_conduits(self): #strip the keys back to the classnames, because the preconfigured dps #are described in terms of classes, not instances (keys) names = {} for key in self.moduleWrappers: names[key.split(":")[0]] = key #for a preconfigured conduit to be available, both the #source and sink must be loaded found = [] for (source,sink),(comment,twoway) in Knowledge.PRECONFIGIRED_CONDUITS.items(): if source in names and sink in names: #return key,key,desc,two-way found.append( (names[source],names[sink],_(comment),twoway) ) return found def quit(self): for dpf in self.dataproviderFactories: dpf.quit() conduit-0.3.17/conduit/datatypes/0000777000175000017500000000000011326117101013710 500000000000000conduit-0.3.17/conduit/datatypes/File.py0000644000175000017500000003764511321403566015104 00000000000000import sys import os import tempfile import datetime import traceback import logging log = logging.getLogger("datatypes.File") import conduit import conduit.datatypes.DataType as DataType import conduit.Vfs as Vfs class FileTransferError(Exception): pass class File(DataType.DataType): _name_ = "file" def __init__(self, URI, **kwargs): """ File constructor. Compulsory args - URI: The title of the note Optional kwargs - basepath: The files basepath - group: A named group to which this file belongs """ DataType.DataType.__init__(self) #you can override the file implmentation at runtime #for testing purposes only implName = kwargs.get("implName", conduit.FILE_IMPL) if implName == "GIO": import conduit.platform.FileGio as FileImpl self.FileImpl = FileImpl elif implName == "Python": import conduit.platform.FilePython as FileImpl self.FileImpl = FileImpl else: raise Exception("File Implementation %s Not Supported" % implName) self._file = self.FileImpl.FileImpl(URI) #optional args self.basePath = kwargs.get("basepath","") self.group = kwargs.get("group","") #instance self._newFilename = None self._newMtime = None self._isProxyFile = False self._proxyFileSize = None def _close_file(self): self._file.close() #check to see if we have applied the rename/mtimes yet if self.get_filename() == self._newFilename: log.debug("Clearing pending rename") self._newFilename = None if self.get_mtime() == self._newMtime: log.debug("Clearing pending mtime") self._newMtime = None def _xfer_check_global_cancel_flag(self): return conduit.GLOBALS.cancelled def _get_text_uri(self): return self._file.get_text_uri() def _defer_rename(self, filename): """ In the event that the file is on a read-only volume this call defers the file rename till after the transfer proces """ log.debug("Defering rename till transfer (New name: %s)" % filename) self._newFilename = filename def _is_deferred_rename(self): return self._newFilename != None def _defer_new_mtime(self, mtime): """ In the event that the file is on a read-only volume this call defers the file mtime modification till after the transfer proces """ log.debug("Defering new mtime till transfer (New mtime: %s)" % mtime) self._newMtime = mtime def _is_deferred_new_mtime(self): return self._newMtime != None def _is_tempfile(self): tmpdir = tempfile.gettempdir() path = self._file.get_local_path() if self._file.is_local() and path and path.startswith(tmpdir): return True else: return False def _is_proxyfile(self): return self._isProxyFile def _set_file_mtime(self, mtime): timestamp = conduit.utils.datetime_get_timestamp(mtime) log.debug("Setting mtime of %s to %s (%s)" % ( self._file.get_text_uri(), timestamp, type(timestamp))) return self._file.set_mtime(timestamp) def _set_filename(self, filename): oldname = self._file.get_filename() olduri = self._file.get_text_uri() #ignore unicode for equality if str(filename) != str(oldname): newuri = self._file.set_filename(filename) if newuri: log.debug("Rename file %s (%s) -> %s (%s)" % (olduri,oldname,newuri,filename)) else: log.debug("Error renaming file %s (%s) -> %s" % (olduri,oldname,filename)) return newuri else: return olduri def _get_impl(self): return self._file def set_from_instance(self, f): """ Function to give this file all the properties of the supplied instance. This is important in converters where there might be pending renames etc on the file that you do not want to lose """ self._file = f._file self.basePath = f.basePath self.group = f.group self._newFilename = f._newFilename self._newMtime = f._newMtime self._isProxyFile = f._isProxyFile self._proxyFileSize = f._proxyFileSize def to_tempfile(self): """ Copies this file to a temporary file in the system tempdir @returns: The local file path """ #Get a temporary file name tempname = tempfile.mkstemp(prefix="conduit")[1] log.debug("Tempfile %s -> %s" % (self._get_text_uri(), tempname)) filename = self.get_filename() mtime = self.get_mtime() self.transfer( newURIString=tempname, overwrite=True ) #retain all original information self.force_new_filename(filename) self.force_new_mtime(mtime) return tempname def exists(self): """ Checks the file exists """ return self._file.exists() def is_local(self): """ Checks if a File is on the local filesystem or not. If not, it is expected that the caller will call get_local_uri, which will copy the file to that location, and return the new path """ return self._file.is_local() def is_directory(self): """ @returns: True if the File is a directory """ return self._file.is_directory() def make_directory(self): """ Makes a directory with the default permissions. """ return self._file.make_directory() def make_directory_and_parents(self): """ Makes a directory and all parents up till the root. Equivilent to mkdir -p """ return self._file.make_directory_and_parents() def force_new_filename(self, filename): """ Renames the file """ if self._is_tempfile() or self._is_proxyfile(): self._defer_rename(filename) else: if not self._set_filename(filename): self._defer_rename(filename) def force_new_file_extension(self, ext): """ Changes the file extension to ext. @param ext: The new file extension (including the dot) """ curname,curext = self.get_filename_and_extension() if curext != ext: self.force_new_filename(curname+ext) def force_new_mtime(self, mtime): """ Changes the mtime of the file """ if self._is_tempfile() or self._is_proxyfile(): self._defer_new_mtime(mtime) else: if not self._set_file_mtime(mtime): self._defer_new_mtime(mtime) def transfer(self, newURIString, overwrite=False, cancel_function=None): """ Transfers the file to newURI. Returning True from cancel_function gives the ability to cancel transfers @type newURIString: C{string} """ trans = self.FileImpl.FileTransferImpl( source=self._file, dest=newURIString) #the default cancel function just checks conduit.GLOBALS.cancelled if cancel_function == None: cancel_function = self._xfer_check_global_cancel_flag if self._is_deferred_rename(): log.debug("Using deferred filename in transfer") trans.set_destination_filename(self._newFilename) #transfer file ok,f = trans.transfer(overwrite, cancel_function) if not ok: raise FileTransferError #close the file and the handle so that the file info is refreshed self._file = f self._close_file() #if we have been transferred anywhere (i.e. the destination, our #location, is writable) then we are no longer a proxy file self._isProxyFile = False #apply any pending renames if self._is_deferred_rename(): self.force_new_filename(self._newFilename) if self._is_deferred_new_mtime(): self.force_new_mtime(self._newMtime) def delete(self): """ Deletes the file """ log.debug("Deleting %s" % self._file.get_text_uri()) self._file.delete() def get_mimetype(self): """ @returns: The file mimetype """ return self._file.get_mimetype() def get_mtime(self): """ Returns the modification time for the file @returns: A python datetime object containing the modification time of the file or None on error. @rtype: C{datetime} """ if self._is_deferred_new_mtime(): return self._newMtime else: ts = self._file.get_mtime() if ts: return datetime.datetime.fromtimestamp(ts) else: return None def set_mtime(self, mtime): """ Sets the modification time of the file """ if mtime != None: self.force_new_mtime(mtime) def get_size(self): """ Gets the file size """ if self._is_proxyfile(): return self._proxyFileSize else: return self._file.get_size() def get_hash(self): # Join the tags into a string to be hashed so the object is updated if # they change. tagstr = "%s%s%s" % (self.get_mtime(),self.get_size(),"".join(self.get_tags())) return str(hash(tagstr)) def get_filename(self): """ Returns the filename of the file """ if self._is_deferred_rename(): return self._newFilename else: return self._file.get_filename() def get_filename_and_extension(self): """ @returns: filename,file_extension """ return os.path.splitext(self.get_filename()) def get_contents_as_text(self): return self._file.get_contents() def set_contents_as_text(self, contents): return self._file.set_contents(contents) def get_local_uri(self): """ Gets the local URI (full path) for the file. If the file is already on the local system then its local path is returned (excluding the vfs sheme, i.e. file:///foo/bar becomes /foo/bar) If it is a remote file then a local temporary file copy is created @returns: local absolute path the the file or None on error @rtype: C{string} """ path = self._file.get_local_path() if not path: return self.to_tempfile() else: return path def get_removable_volume_root_uri(self): return self._file.get_removable_volume_root_uri() def is_on_removale_volume(self): return self._file.is_on_removale_volume() def get_relative_uri(self): """ @returns: The files URI relative to its basepath """ if self.basePath: return Vfs.uri_get_relative(self.basePath,self._get_text_uri()) else: return self._get_text_uri() def compare(self, B, sizeOnly=False): """ Compare me with B based upon their modification times, or optionally based on size only """ if B.exists() == False: return conduit.datatypes.COMPARISON_NEWER #Compare based on size only? if sizeOnly: meSize = self.get_size() bSize = B.get_size() log.debug("Comparing %s (SIZE: %s) with %s (SIZE: %s)" % (self._get_text_uri(), meSize, B._get_text_uri(), bSize)) if meSize == None or bSize == None: return conduit.datatypes.COMPARISON_UNKNOWN elif meSize == bSize: return conduit.datatypes.COMPARISON_EQUAL else: return conduit.datatypes.COMPARISON_UNKNOWN #Else look at the modification times meTime = self.get_mtime() bTime = B.get_mtime() log.debug("Comparing %s (MTIME: %s) with %s (MTIME: %s)" % (self._get_text_uri(), meTime, B._get_text_uri(), bTime)) if meTime is None: return conduit.datatypes.COMPARISON_UNKNOWN if bTime is None: return conduit.datatypes.COMPARISON_UNKNOWN #Am I newer than B if meTime > bTime: return conduit.datatypes.COMPARISON_NEWER #Am I older than B? elif meTime < bTime: return conduit.datatypes.COMPARISON_OLDER elif meTime == bTime: meSize = self.get_size() bSize = B.get_size() #If the times are equal, and the sizes are equal then assume #that they are the same. if meSize == None or bSize == None: #In case of error return conduit.datatypes.COMPARISON_UNKNOWN elif meSize == bSize: return conduit.datatypes.COMPARISON_EQUAL else: #shouldnt get here log.warn("Error comparing file sizes") return conduit.datatypes.COMPARISON_UNKNOWN else: log.warn("Error comparing file modification times") return conduit.datatypes.COMPARISON_UNKNOWN def __getstate__(self): data = DataType.DataType.__getstate__(self) data['basePath'] = self.basePath data['group'] = self.group data['filename'] = self.get_filename() data['filemtime'] = self.get_mtime() data['isproxyfile'] = self._isProxyFile data['proxyfilesize'] = self._proxyFileSize #FIXME: Maybe we should tar this first... data['data'] = open(self.get_local_uri(), 'rb').read() return data def __setstate__(self, data): fd, name = tempfile.mkstemp(prefix="netsync") os.write(fd, data['data']) os.close(fd) implName = conduit.FILE_IMPL if implName == "GIO": import conduit.platform.FileGio as FileImpl self.FileImpl = FileImpl elif implName == "Python": import conduit.platform.FilePython as FileImpl self.FileImpl = FileImpl else: raise Exception("File Implementation %s Not Supported" % implName) self._file = self.FileImpl.FileImpl(name) self.basePath = data['basePath'] self.group = data['group'] self._defer_rename(data['filename']) self._defer_new_mtime(data['filemtime']) self._isProxyFile = data['isproxyfile'] self._proxyFileSize = data['proxyfilesize'] DataType.DataType.__setstate__(self, data) class TempFile(File): """ Creates a file in the system temp directory with the given contents. """ def __init__(self, contents, **kwargs): #create the file containing contents fd, name = tempfile.mkstemp(prefix="conduit") os.write(fd, contents) os.close(fd) File.__init__(self, name, **kwargs) log.debug("New tempfile created at %s" % name) class ProxyFile(File): """ Pretends to be a file for the sake of comparison and transfer. Typically located on a remote, read only resource, such as http://. Once transferred to the local filesystem, it behaves just like a file. """ def __init__(self, URI, name, modified, size, **kwargs): File.__init__(self, URI, **kwargs) self._isProxyFile = True self._proxyFileSize = size if modified: self.force_new_mtime(modified) if name: self.force_new_filename(name) conduit-0.3.17/conduit/datatypes/Event.py0000644000175000017500000000215211172176633015275 00000000000000import vobject import re import conduit.datatypes.DataType as DataType class Event(DataType.DataType): """ Very basic calendar event representation """ _name_ = "event" def __init__(self, **kwargs): DataType.DataType.__init__(self) self.iCal = vobject.iCalendar() def set_from_ical_string(self, string): self.iCal = vobject.readOne(string) def get_ical_string(self, version=1.0): return self.iCal.serialize() def __getstate__(self): data = DataType.DataType.__getstate__(self) data['ical'] = self.get_ical_string() return data def __setstate__(self, data): self.set_from_ical_string(data['ical']) DataType.DataType.__setstate__(self, data) def get_hash(self): ical_string = self.get_ical_string() p = re.compile('CREATED:.*\n') ical_string = p.sub( '', ical_string ) p = re.compile('LAST-MODIFIED:.*\n') ical_string = p.sub( '', ical_string ) p = re.compile('UID:.*\n') ical_string = p.sub( '', ical_string ) return str(hash(ical_string)) conduit-0.3.17/conduit/datatypes/Text.py0000644000175000017500000000156411172176633015146 00000000000000import conduit.datatypes.DataType as DataType class Text(DataType.DataType): """ Wrapper around a text string. Use this as a datatype instead of the plain string object """ _name_ = "text" def __init__(self, text, **kwargs): DataType.DataType.__init__(self) self.text = text def get_string(self): return self.text def __str__(self): #only show first 20 characters if len(self.text) > 20: return self.text[0:19] else: return self.text def __getstate__(self): data = DataType.DataType.__getstate__(self) data['text'] = self.text return data def __setstate__(self, data): self.text = data['text'] DataType.DataType.__setstate__(self, data) def get_hash(self): return str(hash(self.text)) conduit-0.3.17/conduit/datatypes/Note.py0000644000175000017500000000217111172176633015122 00000000000000import logging log = logging.getLogger("datatypes.Note") import conduit from conduit.datatypes import DataType class Note(DataType.DataType): """ Represents a Note with a title and content """ _name_ = "note" def __init__(self, title, contents, **kwargs): DataType.DataType.__init__(self) self.title = title self.contents = contents def get_title(self): return self.title def get_contents(self): return self.contents def get_hash(self): return str(hash( (self.get_title(), self.get_contents()) )) def get_note_string(self): return self.__str__() def __getstate__(self): data = DataType.DataType.__getstate__(self) data["title"] = self.get_title() data["contents"] = self.get_contents() return data def __setstate__(self, data): self.title = data["title"] self.contents = data["contents"] DataType.DataType.__setstate__(self, data) def __str__(self): return ("Title: %s\n%s\n(Modified: %s)" % (self.get_title(), self.get_contents(), self.get_mtime())) conduit-0.3.17/conduit/datatypes/Makefile.am0000644000175000017500000000040511172176633015675 00000000000000conduitdir = $(pythondir)/conduit/datatypes conduit_PYTHON = \ Audio.py \ Contact.py \ DataType.py \ Email.py \ Event.py \ File.py \ __init__.py \ Note.py \ Photo.py \ Setting.py \ Text.py \ Video.py \ Bookmark.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/datatypes/Contact.py0000644000175000017500000000540611172176633015614 00000000000000import vobject import conduit.datatypes.DataType as DataType def parse_vcf(string): """ Parses a vcf string, potentially containing many vcards @returns: A list of Contacts """ contacts = [] for vobj in vobject.readComponents(string): if vobj.behavior == vobject.vcard.VCard3_0: contacts.append(Contact(vcard=vobj)) return contacts class Contact(DataType.DataType): """ Very basic contact representation @keyword vcard: A vobject.vcard.VCard3_0 instance """ _name_ = "contact" def __init__(self, **kwargs): DataType.DataType.__init__(self) self.vcard = kwargs.get('vcard',vobject.vCard()) self.set_name(**kwargs) def set_from_vcard_string(self, string): self.vcard = vobject.readOne(string) def get_vcard_string(self, version=2.1): for prop in ('fn', 'n'): if prop not in self.vcard.contents: self.vcard.add(prop) return self.vcard.serialize() def get_emails(self): emails = [] if 'email' in self.vcard.contents: for email in self.vcard.contents['email']: emails.append(email.value) return emails def get_name(self): #In order of preference, 1)formatted name, 2)name, 3)"" #FIXME: Return dict of formattedName, givenName, familyName, etc for attr in [self.vcard.fn, self.vcard.n]: #because str() on a vobject.vcard.Name pads with whitespace name = str(attr.value).strip() if len(name) > 0: return name return "" def set_name(self, **kwargs): #vcards must have one, and only one N and FN fn = kwargs.get("formattedName","") try: self.vcard.fn except AttributeError: self.vcard.add('fn') if fn: self.vcard.fn.value = fn g = kwargs.get("givenName","") f = kwargs.get("familyName","") try: self.vcard.n except AttributeError: self.vcard.add('n') if f or g: self.vcard.n.value = vobject.vcard.Name(family=f,given=g) def set_emails(self, *args): for address in args: email = self.vcard.add('email') email.value = address email.type_param = 'INTERNET' def __getstate__(self): data = DataType.DataType.__getstate__(self) data['vcard'] = self.get_vcard_string() return data def __setstate__(self, data): self.set_from_vcard_string(data['vcard']) DataType.DataType.__setstate__(self, data) def __str__(self): return "Name: %s" % self.get_name() def get_hash(self): return str(hash(self.get_vcard_string())) conduit-0.3.17/conduit/datatypes/Video.py0000644000175000017500000000271111172176633015263 00000000000000import conduit import conduit.datatypes.File as File import conduit.utils.MediaFile as MediaFile PRESET_ENCODINGS = { "divx":{"vcodec":"xvidenc", "acodec":"lame", "format":"avimux", "vtag":"DIVX", "file_extension":"avi", "mimetype": "video/x-msvideo"}, #FIXME: The following comment has not been tested with GStreamer, it may or may not still be true: # breaks on single channel audio files because ffmpeg vorbis encoder only suuport stereo "ogg":{"vcodec":"theoraenc", "acodec":"vorbisenc", "format":"oggmux", "file_extension":"ogg"}, #requires gst-ffmpeg and gst-plugins-ugly "flv":{"vcodec":"ffenc_flv", "acodec":"lame", "format":"ffmux_flv", "file_extension":"flv"} } def mimetype_is_video(mimetype): """ @returns: True if the given mimetype string represents a video file """ if mimetype.startswith("video/"): return True elif mimetype == "application/ogg": return True else: return False class Video(MediaFile.MediaFile): _name_ = "file/video" def __init__(self, URI, **kwargs): MediaFile.MediaFile.__init__(self, URI, **kwargs) def get_video_duration(self): ''' Video duration, in milisecs (int) ''' return self._get_metadata('duration') def get_video_size(self): ''' Video size, as a tuple (width, height), both in pixels (int, int) ''' return self._get_metadata('width'), self._get_metadata('height') conduit-0.3.17/conduit/datatypes/Setting.py0000644000175000017500000000133011172176633015626 00000000000000import conduit.datatypes.DataType as DataType class Setting(DataType.DataType): """ Represents a users 'setting' or a preference. Basically a key:value type """ _name_ = "setting" def __init__(self, key, value, **kwargs): DataType.DataType.__init__(self) self.key = key self.value = value def __getstate__(self): data = DataType.DataType.__getstate__(self) data["key"] = self.key data["value"] = self.value return data def __setstate__(self, data): self.key = data["key"] self.value = data["value"] DataType.DataType.__setstate__(self, data) def get_hash(self): return str(hash( (self.key,self.value) )) conduit-0.3.17/conduit/datatypes/Bookmark.py0000644000175000017500000000214511172176633015763 00000000000000# (c) Copyright Andrew Stormont 2008. import logging log = logging.getLogger("datatypes.Bookmark") import conduit from conduit.datatypes import DataType class Bookmark(DataType.DataType): """ Represents a Bookmark with a title and uri """ _name_ = "Bookmark" def __init__(self, title, uri, **kwargs): DataType.DataType.__init__(self) self.title = title self.uri = uri def get_title(self): return self.title def get_uri(self): return self.uri def get_hash(self): return str(hash( (self.get_title(), self.get_uri()) )) def get_bookmark_string(self): return self.__str__() def __getstate__(self): data = DataType.DataType.__getstate__(self) data["title"] = self.get_title() data["uri"] = self.get_uri() return data def __setstate__(self, data): self.title = data["title"] self.uri = data["uri"] DataType.DataType.__setstate__(self, data) def __str__(self): return "%s:%s" % (self.get_title(), self.get_uri() ) conduit-0.3.17/conduit/datatypes/Photo.py0000644000175000017500000000546311172176633015315 00000000000000import conduit import conduit.datatypes.File as File import conduit.utils as Utils import logging log = logging.getLogger("datatypes.Photo") PRESET_ENCODINGS = { "jpeg":{'formats':'image/jpeg','default-format':'image/jpeg'}, "png":{'formats':'image/png','default-format':'image/png'} } def mimetype_is_photo(mimetype): """ @returns: True if the given mimetype string represents an image file """ if mimetype.startswith("image/"): return True else: return False class Photo(File.File): """ A Small wrapper around a Pixbuf """ _name_ = "file/photo" def __init__(self, URI, **kwargs): File.File.__init__(self, URI, **kwargs) self.pb = None self._caption = None def compare(self, B, sizeOnly=False): if sizeOnly: return File.File.compare(self, B, True) meTime = self.get_mtime() bTime = B.get_mtime() log.debug("Comparing %s (MTIME: %s) with %s (MTIME: %s)" % (self.URI, meTime, B.URI, bTime)) if meTime and bTime and (meTime != bTime): if meTime > bTime: #Am I newer than B return conduit.datatypes.COMPARISON_NEWER else: return conduit.datatypes.COMPARISON_OLDER meHash = self.get_hash() bHash = B.get_hash() log.debug("Comparing %s (HASH: %s) with %s (HASH: %s)" % (self.URI, meHash, B.URI, bHash)) if (meHash == bHash): return conduit.datatypes.COMPARISON_EQUAL else: return conduit.datatypes.COMPARISON_UNKNOWN def get_photo_pixbuf(self): """ Defer actually getting the pixbuf till as late as possible, as it is really only needed for conversion """ import gtk.gdk if self.pb == None: self.pb = gtk.gdk.pixbuf_new_from_file(self.get_local_uri()) return self.pb def get_photo_size(self): """ Returns the pb size, width, height """ self.get_photo_pixbuf() return self.pb.get_width(),self.pb.get_height() def get_caption(self): """ @returns: the photo's caption """ return self._caption def set_caption(self, caption): self._caption = caption def get_hash(self): # Combine the file hash with other photo metadata. file_hash = File.File.get_hash(self) hash_data = "%s%s%s" % (file_hash, self.get_photo_size(), self.get_caption()) return str(hash(hash_data)) def __getstate__(self): data = File.File.__getstate__(self) data["caption"] = self._caption return data def __setstate__(self, data): self.pb = None self._caption = data["caption"] File.File.__setstate__(self, data) conduit-0.3.17/conduit/datatypes/DataType.py0000644000175000017500000001230211172176633015725 00000000000000import logging log = logging.getLogger("datatypes.DataType") import conduit.datatypes CHANGE_UNMODIFIED = 0 CHANGE_ADDED = 1 CHANGE_MODIFIED = 2 CHANGE_DELETED = 3 class DataType(object): """ Base DataType which represents any thing which can be synchronized between two DataProviders @cvar _name_: The name of the type @type _name_: C{string} @ivar URI: A URI which uniquely represents the location of the datatype. @type URI: C{string} @ivar UID: A Unique identifier for this type. This is particuarly neccessary on types that are used in two-way sync. @type UID: C{string} """ _name_ = "" def __init__(self): self.change_type = CHANGE_UNMODIFIED self._original_URI = None self._mtime = None self._UID = None self._tags = () def get_type(self): """ @returns: The type (name) of this datatype @rtype: C{string} """ return self._name_ def compare(self, B, sinkUID=None): """ Comparison function to be overridden by datatypes who support two way synchronisation. This funcion should compare self with B. All answers are from the perspective of the me (the instance) - C{conduit.datatypes.COMPARISON_NEWER} This means the I am newer than B - C{conduit.datatypes.COMPARISON_EQUAL} This means the we are equal - L{conduit.datatypes.COMPARISON_OLDER} This means the I am older than B - L{conduit.datatypes.COMPARISON_UNKNOWN} This means we were unable to determine which was newer than the other so its up to the user to decide """ log.debug("COMPARE: %s <----> %s " % (self.get_UID(), B.get_UID())) m = None if sinkUID: m = conduit.GLOBALS.mappingDB.get_mapping_from_objects(self.get_UID(), B.get_UID(), sinkUID) if self.get_rid() == B.get_rid(): return conduit.datatypes.COMPARISON_EQUAL mtime1 = self.get_mtime() mtime2 = B.get_mtime() # resolve conflicts with hashes if only one side has changed and mtimes are not useful if (mtime1 == None or mtime2 == None) and m and m.get_sink_rid().get_hash() == B.get_hash(): return conduit.datatypes.COMPARISON_NEWER elif mtime1 == None or mtime2 == None: return conduit.datatypes.COMPARISON_UNKNOWN if mtime1 > mtime2: return conduit.datatypes.COMPARISON_NEWER else: return conduit.datatypes.COMPARISON_OLDER def get_hash(self): raise NotImplementedError def get_UID(self): """ Returns the UID of the datatype """ return self._UID def set_UID(self, UID): """ Sets the UID of the datatype @type UID: C{string} """ self._UID = UID def set_mtime(self, mtime): """ Sets the modification time of the datatype. @type mtime: C{datetime.datetime} """ self._mtime = mtime def get_mtime(self): """ @returns: The file modification time (or None) as a python datetime object @rtype: C{datetime.datetime} """ return self._mtime def get_tags(self): """ @returns: the current list of tags """ return self._tags def set_tags(self, tags): """ Sets the tags of the datatype """ self._tags = tags def get_open_URI(self): """ @returns: The URI that can be opened through gnome-open (or None) """ return self._original_URI def set_open_URI(self, URI): """ Saves the URI that can be opened through gnome-open """ self._original_URI = URI def get_snippet(self): """ Returns a small representation of the data that may be shown to the user. Derived types may override this function. """ s = "" uri = self.get_open_URI() mtime = self.get_mtime() if uri != None: s += "%s" % uri if mtime != None: s += " (%s)" % mtime.strftime("%c") if s == "": s += "%s" % str(self) else: s += "\n%s" % str(self) return s def get_rid(self): """ @returns: The record identifier (Rid) for this data """ log.debug("Getting Rid for %s" % self.get_UID()) rid = conduit.datatypes.Rid( uid=self.get_UID(), mtime=self.get_mtime(), hash=self.get_hash() ) return rid def __getstate__(self): """ Store the object state in a dict for pickling """ data = {} data['mtime'] = self.get_mtime() data['uid'] = self.get_UID() data['open_uri'] = self.get_open_URI() data['tags'] = self.get_tags() return data def __setstate__(self, data): """ Set object state from dict (after unpickling) """ self.set_mtime(data['mtime']) self.set_UID(data['uid']) self.set_open_URI(data['open_uri']) self.set_tags(data['tags']) conduit-0.3.17/conduit/datatypes/Audio.py0000644000175000017500000000600211172176633015253 00000000000000import conduit import conduit.datatypes.File as File import conduit.utils.MediaFile as MediaFile import logging log = logging.getLogger("datatypes.Audio") PRESET_ENCODINGS = { "ogg":{"description": "Ogg", "acodec": "vorbisenc", "format":"oggmux","file_extension":"ogg", 'mimetype': 'application/ogg'}, "wav":{"description": "Wav", "acodec": "wavenc", "file_extension":"wav", 'mimetype': 'audio/x-wav'}, "mp3":{"description": "Mp3", "acodec": "lame", "file_extension": "mp3", 'mimetype':'audio/mpeg'}, #AAC conversion doesn't work #"aac":{"description": "AAC", "acodec": "faac", "file_extension": "m4a"}, } def mimetype_is_audio(mimetype): """ @returns: True if the given mimetype string represents an audio file """ if mimetype.startswith("audio/"): return True elif mimetype == "application/ogg": return True else: return False class Audio(MediaFile.MediaFile): _name_ = "file/audio" def __init__(self, URI, **kwargs): MediaFile.MediaFile.__init__(self, URI, **kwargs) def get_audio_title(self): ''' Song title (str) ''' return self._get_metadata('title') def get_audio_artist(self): ''' Song artist (str) ''' return self._get_metadata('artist') def get_audio_album(self): ''' Song album (str) ''' return self._get_metadata('album') def get_audio_genre(self): ''' Song genre (str) ''' return self._get_metadata('genre') def get_audio_track(self): ''' Get number of the track inside the album (int) ''' return self._get_metadata('track-number') def get_audio_tracks(self): ''' Get number of tracks in album (int) ''' return self._get_metadata('track-count') def get_audio_bitrate(self): ''' Bitrate of the audio stream, in bits/sec (int) ''' return self._get_metadata('bitrate') def get_audio_composer(self): ''' Song composer (str) ''' return self._get_metadata('composer') def get_audio_duration(self): ''' Duration in miliseconds (int) ''' return self._get_metadata('duration') def get_audio_samplerate(self): ''' Sample rate of the audio stream (int) ''' return self._get_metadata('samplerate') def get_audio_channels(self): ''' Number of channels in the audio stream (int) ''' return self._get_metadata('channels') def get_audio_playcount(self): ''' Audio play count (int) ''' return self._get_metadata('play_count') def get_audio_rating(self): ''' Audio rating from 0.0 to 5.0 (float) ''' return self._get_metadata('rating') def get_audio_cover_location(self): ''' Get path to the track album cover (str) ''' return self._get_metadata('cover_location') conduit-0.3.17/conduit/datatypes/Email.py0000644000175000017500000000623111172176633015245 00000000000000import email from email import Encoders from email.MIMEAudio import MIMEAudio from email.MIMEBase import MIMEBase from email.MIMEMultipart import MIMEMultipart from email.MIMEImage import MIMEImage from email.MIMEText import MIMEText import logging log = logging.getLogger("dataproviders.Email") import conduit from conduit.datatypes import DataType, File class Email(DataType.DataType): """ Basic email representation. Based on: http://aspn.activestate.com/ASPN/docs/ActivePython/2.4/python/lib/node597.html """ _name_ = "email" def __init__(self, **kwargs): DataType.DataType.__init__(self) self.attachments = [] self.email = MIMEText(kwargs.get("content", "")) self.email['Subject'] = kwargs.get("subject", "") self.email['To'] = kwargs.get("to", "") self.email['From'] = kwargs.get("from", "") self.email.preamble = '' self.email.epilogue = '' def has_attachments(self): if len(self.attachments) > 0: return True return False def add_attachment(self, path): #Create a multipart message and each attachment gets a part if not self.email.is_multipart(): newemail = MIMEMultipart() newemail['Subject'] = self.email['Subject'] newemail['To'] = self.email['To'] newemail['From'] = self.email['From'] newemail.preamble = 'There are attachments\n' newemail.epilogue = '' self.email = newemail f = File.File(path) filename = f.get_filename() mt = f.get_mimetype() maintype, subtype = mt.split('/', 1) if maintype == 'text': fp = open(path) #We should handle calculating the charset msg = MIMEText(fp.read(), _subtype=subtype) fp.close() elif maintype == 'image': fp = open(path, 'rb') msg = MIMEImage(fp.read(), _subtype=subtype) fp.close() elif maintype == 'audio': fp = open(path, 'rb') msg = MIMEAudio(fp.read(), _subtype=subtype) fp.close() else: fp = open(path, 'rb') msg = MIMEBase('application', 'octet-stream') msg.set_payload(fp.read()) fp.close() # Encode the payload using Base64 Encoders.encode_base64(msg) # Set the filename parameter msg.add_header('Content-Disposition', 'attachment', filename=filename) self.email.attach(msg) self.attachments.append(path) def set_from_email_string(self, text_source): self.email = email.message_from_string(text_source) def get_email_string(self): return self.email.as_string() def get_subject(self): return self.email['Subject'] def __getstate__(self): data = DataType.DataType.__getstate__(self) data['email'] = self.get_email_string() return data def __setstate__(self, data): self.set_from_email_string(data['email']) DataType.DataType.__setstate__(self, data) def get_hash(self): return str(hash( self.get_email_string() )) conduit-0.3.17/conduit/datatypes/Makefile.in0000644000175000017500000003222511326116726015711 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/datatypes DIST_COMMON = $(conduit_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduitdir)" py_compile = $(top_srcdir)/py-compile DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ conduitdir = $(pythondir)/conduit/datatypes conduit_PYTHON = \ Audio.py \ Contact.py \ DataType.py \ Email.py \ Event.py \ File.py \ __init__.py \ Note.py \ Photo.py \ Setting.py \ Text.py \ Video.py \ Bookmark.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/datatypes/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/datatypes/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduitPYTHON: $(conduit_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduitdir)" || $(MKDIR_P) "$(DESTDIR)$(conduitdir)" @list='$(conduit_PYTHON)'; dlist=; list2=; test -n "$(conduitdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduitdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduitdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduitdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduitdir)" $$dlist; \ fi; \ else :; fi uninstall-conduitPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_PYTHON)'; test -n "$(conduitdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduitdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduitdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduitdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduitdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduitdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduitdir)" && rm -f $$fileso tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(conduitdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-conduitPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-conduitPYTHON .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-conduitPYTHON \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am uninstall-conduitPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/datatypes/__init__.py0000644000175000017500000000537111172176633015761 00000000000000""" Exposes the DataTypes for public use It is expected that DataProviders (written by the user, or included within Conduit) may require the use of DataTypes other than their own in their implementation. For example all email programs should share the same common mail datatype. For this reason DataTypes, not DataProviders are exported """ #Constants used for comparison COMPARISON_EQUAL = 0 COMPARISON_NEWER = 1 COMPARISON_OLDER = 2 COMPARISON_UNKNOWN = 3 import datetime import logging log = logging.getLogger("datatypes.Rid") class Rid(object): def __init__(self, uid=None, mtime=None, hash=""): """ @param uid: str or None @param mtime: datetime or None @param hash: str """ self.uid = uid self.mtime = mtime self.hash = str(hash) assert (type(uid) == str or type(uid) == unicode or uid == None), "UID must be unicode,string or None not %s" % type(uid) assert (type(mtime) == datetime.datetime or mtime == None), "mtime must be datatime or None not %s" % type(datetime) def __eq__(self, other): if other == None: return False #log.debug("EQ: UID:%s mtime:%s hash:%s" % (self.uid != other.uid, self.mtime != other.mtime, self.hash != other.hash)) #log.debug("EQ Types: UID:%sv%s mtime:%sv%s hash:%sv%s" % (type(self.uid),type(other.uid),type(self.mtime),type(other.mtime),type(self.hash),type(other.hash))) return self.uid == other.uid and self.mtime == other.mtime and self.hash == other.hash def __ne__(self, other): if other == None: return True #log.debug("NE: UID:%s mtime:%s hash:%s" % (self.uid != other.uid, self.mtime != other.mtime, self.hash != other.hash)) #log.debug("NE Types: UID:%sv%s mtime:%sv%s hash:%sv%s" % (type(self.uid),type(other.uid),type(self.mtime),type(other.mtime),type(self.hash),type(other.hash))) return self.uid != other.uid or self.mtime != other.mtime or self.hash != other.hash def __hash__(self): return hash( (self.uid, self.mtime, self.hash) ) def __str__(self): return "UID:%s mtime:%s hash:%s" % (self.uid, self.mtime, self.hash) def get_UID(self): return self.uid def get_mtime(self): return self.mtime def get_hash(self): return self.hash def __getstate__(self): """ Store the Rid state in a dict for pickling """ data = {} data['uid'] = self.uid data['mtime'] = self.mtime data['hash'] = self.hash return data def __setstate__(self, data): """ Restore Rid state from dict (after unpickling) """ self.uid = data['uid'] self.mtime = data['mtime'] self.hash = data['hash'] conduit-0.3.17/conduit/XMLSerialization.py0000644000175000017500000001463611321742705015421 00000000000000# Copyright 2009 - Andrew Stomont # # This file is part of GPE-Mail. # # GPE-Mail 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. # # GPE-Mail 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 GPE-Mail. If not, see . from os.path import exists from xml.dom.minidom import parseString from urllib import quote, unquote class Error(Exception): pass class Settings( object ): """ A class to store/retrieve data to/from an XML file """ #Increment this number when the xml settings file #changes format XML_VERSION = "2" def __init__(self, xml_text=""): """ Initializes Settings class """ self.xml_document = parseString(xml_text) self.xml_version = self.XML_VERSION def __string_to_type__(self, string, desired_type): """ Converts a string into the desired scalar type """ if desired_type == "bool": return self.__bool_from_string__(string) elif desired_type == "float": return float(string) elif desired_type == "int": return int(string) elif desired_type == "str": return str(string) elif desired_type == "unicode": return unicode(string) elif desired_type == "none": return None else: raise Error("Type %s not recognized for value %s" % (desired_type, string)) def __type_as_string__(self, data_type): """ Returns string name of given data type """ if type(data_type) == list: return "list" elif type(data_type) == tuple: return "tuple" elif type(data_type) == dict: return "dict" elif type(data_type) == int: return "int" elif type(data_type) == float: return "float" elif type(data_type) == str: return "str" elif type(data_type) == unicode: return "unicode" elif type(data_type) == bool: return "bool" elif data_type is None: return "none" else: raise Error("Type for %s is not supported" % data_type) def __bool_from_string__(self, string): """ Returns a bool from a string representation """ if string == "True": return True else: return False def __getitem__(self, name): """ Called when variable get via subscript interface """ node = self.__get_data_node__(name) if node: return self.__node_to_data__(node) else: raise KeyError(name) def __setitem__(self, name, value): """ Called when variable set via subscript interface """ newNode = self.__data_to_node__(name, value) oldNode = self.__get_data_node__(name) if oldNode: self.xml_document.documentElement.replaceChild(newNode, oldNode) else: self.xml_document.documentElement.appendChild(newNode) def __delitem__(self, name): """ Deletes item from saved file """ node = self.__get_data_node__(name) if node: self.xml_document.documentElement.removeChild(node) else: raise KeyError(name) def __contains__(self, name): """ This gets called by the 'in' construct """ node = self.__get_data_node__(name) if node: return True return False def __get_data_node__(self, name): """ Returns data node with given name """ for node in self.xml_document.documentElement.childNodes: if node.nodeType == node.ELEMENT_NODE and unquote(node.nodeName) == name: return node def __iter__(self): return self.iteritems() def iteritems(self): for node in self.xml_document.documentElement.childNodes: if node.nodeType == node.ELEMENT_NODE: yield unquote(node.nodeName), self.__node_to_data__(node) def __data_to_node__(self, name, data): """ Converts a python data type into an xml node """ node = self.xml_document.createElement(quote(str(name))) node.setAttribute("type", self.__type_as_string__(data)) #node.setAttribute("name", str(name)) if type(data) == dict: for (key, value) in data.iteritems(): node.appendChild(self.__data_to_node__(key, value)) elif type(data) == list or type(data) == tuple: for (index, value) in enumerate(data): node.appendChild(self.__data_to_node__("item", value)) else: node.appendChild(self.xml_document.createTextNode(str(data))) return node def __node_to_data__(self, node): """ Returns python data from data node """ node_type = node.getAttribute("type") if node_type == "dict": retval = {} for childNode in node.childNodes: if childNode.nodeType == node.ELEMENT_NODE: retval[childNode.nodeName] = self.__node_to_data__(childNode) return retval elif node_type in ("list", "tuple"): #In older versions lists were saved as comma-separated strings if self.xml_version == 1: retval = node.firstChild.data.split(',') return retval else: retval = [] for childNode in node.childNodes: if childNode.nodeType == node.ELEMENT_NODE: retval.append(self.__node_to_data__(childNode)) if node_type == "tuple": retval = tuple(retval) return retval else: if len(node.childNodes) > 0: return self.__string_to_type__(node.firstChild.data, node_type) else: return "" conduit-0.3.17/conduit/Web.py0000644000175000017500000001461011172176633012735 00000000000000""" Functions for dealing with web urls, generally used for logging into web sites for authorization """ import sys import os import gobject import time import thread import logging log = logging.getLogger("Web") import conduit import conduit.utils.Singleton as Singleton import conduit.platform.WebBrowserSystem as WebBrowserSystem class LoginWindow(Singleton.Singleton): """ The ConduitLogin object needs to be a singleton so that we only have one window with multiple tabs, and so we can guarentee that it runs in the GUI thread """ def __init__(self): self.window = None self.notebook = None self.pages = {} self.finished = {} log.debug("Created login window (thread: %s)" % thread.get_ident()) def _on_window_closed(self, *args): for url in self.pages.keys(): self._delete_page(url) return True def _on_tab_close_clicked(self, button, url): self._delete_page(url) def _on_open_uri(self, *args): log.debug("Link clicked (thread: %s)" % thread.get_ident()) def _delete_page(self, url): log.debug("Delete page (thread: %s)" % thread.get_ident()) #get the original objects browser = self.pages[url] browserWidget = browser.widget() browser.stop_load() #remove the page and any refs idx = self.notebook.page_num(browserWidget) self.notebook.remove_page(idx) browserWidget.destroy() del(self.pages[url]) if self.notebook.get_n_pages() == 0: self.window.hide() #notify self.finished[url] = True def _create_page(self, name, url, browserName): log.debug("Create page: %s (thread: %s)" % (url,thread.get_ident())) if url in self.pages: return False import gtk if browserName == "gtkmozembed": import conduit.platform.WebBrowserMozilla as WebBrowserImpl elif browserName == "webkit": import conduit.platform.WebBrowserWebkit as WebBrowserImpl #lazy init to save a bit of time if self.window == None: self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.set_title("Conduit Login Manager") self.window.set_border_width(12) self.window.connect('delete-event', self._on_window_closed) self.notebook = gtk.Notebook() self.window.add(self.notebook) #If we have been launched from a Gtk.Dialog (usually a configure #dialog), then we should be transient for that dialog, and we #must ensure that the dialog is no longer modal so we can close the browser for w in gtk.window_list_toplevels(): if type(w) == gtk.Dialog: #center the browser window over the dialog self.window.set_transient_for(w) #disable dialog modality w.set_modal(False) self.window.set_default_size(700, 600) self.window.set_position(gtk.WIN_POS_CENTER) self.window.show_all() #create object and connect signals browser = WebBrowserImpl.WebBrowserImpl() browser.connect("open_uri",self._on_open_uri) #create the tab label tab_button = gtk.Button() tab_button.connect('clicked', self._on_tab_close_clicked, url) tab_label = gtk.Label(name) tab_box = gtk.HBox(False, 2) #Add icon to button icon_box = gtk.HBox(False, 0) image = gtk.Image() image.set_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU) tab_button.set_relief(gtk.RELIEF_NONE) icon_box.pack_start(image, True, False, 0) tab_button.add(icon_box) tab_box.pack_start(tab_label, False) tab_box.pack_start(tab_button, False) tab_box.show_all() #add to notebook browserWidget = browser.widget() browserWidget.show_now() self.notebook.append_page(child=browserWidget, tab_label=tab_box) self.notebook.show_all() self.pages[url] = browser browser.load_url(url) return False def _raise_page(self, url): log.debug("Raise page (thread: %s)" % thread.get_ident()) self.window.show_all() #get the original objects browser = self.pages[url] browserWidget = browser.widget() #make page current idx = self.notebook.page_num(browserWidget) self.notebook.set_current_page(idx) #show browserWidget.show_now() return False def wait_for_login(self, name, url, **kwargs): log.debug("Wait for login (thread: %s)" % thread.get_ident()) if url in self.pages: gobject.idle_add(self._raise_page, url) else: gobject.idle_add(self._create_page, name, url, kwargs["browserName"]) self.finished[url] = False while not self.finished[url] and not conduit.GLOBALS.cancelled: #We can/need to sleep here because the GUI work is going on in the main thread #and gtk.main needs to iterate time.sleep(0.1) log.debug("Finished login (thread: %s)" % thread.get_ident()) #call the test function testFunc = kwargs.get("login_function",None) if testFunc != None and testFunc(): return else: raise Exception("Login failure") class LoginMagic(object): """ Performs all the magic to log into a website to authenticate. Uses either the system browser, or conduits own one. """ def __init__(self, name, url, **kwargs): browser = kwargs.get("browser",conduit.BROWSER_IMPL) log.info("Logging in using browser: %s (thread: %s)" % (browser,thread.get_ident())) #instantiate the browser if browser == "system": login = WebBrowserSystem.WebBrowserImpl() else: try: if browser not in ("gtkmozembed","webkit"): log.warn("Unknown browser type") return kwargs["browserName"] = browser login = LoginWindow() except ImportError: login = None if login: #blocks/times out until the user logs in or gives up login.wait_for_login(name, url, **kwargs) else: log.warn("Error setting up browser") conduit-0.3.17/conduit/Makefile.am0000644000175000017500000000134711214122722013670 00000000000000SUBDIRS = datatypes dataproviders modules gtkui hildonui utils platform conduitbindir = $(bindir) conduitbin_SCRIPTS = \ conduit.real \ conduit conduitdir = $(pythondir)/conduit conduit_PYTHON = \ Conduit.py \ Configurator.py \ Conflict.py \ Database.py \ DBus.py \ defs.py \ DeltaProvider.py \ Exceptions.py \ Globals.py \ __init__.py \ Knowledge.py \ Logging.py \ libconduit.py \ Main.py \ MappingDB.py \ Module.py \ ModuleWrapper.py \ Settings.py \ Synchronization.py \ SyncSet.py \ TypeConverter.py \ Vfs.py \ Web.py \ XMLSerialization.py CLEANFILES = \ defs.py \ $(BUILT_SOURCES) DISTCLEANFILES = \ $(CLEANFILES) EXTRA_DIST = \ defs.py.in \ conduit.real \ conduit clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/ModuleWrapper.py0000644000175000017500000002512611321742705015005 00000000000000import traceback import logging log = logging.getLogger("ModuleWrapper") COMPULSORY_ATTRIBUTES = ( "type", ) class ModuleWrapper: """ A generic wrapper for any dynamically loaded module. Wraps the complexity of a stored L{conduit.DataProvider.DataProvider} behind additional descriptive fields like name and description. Useful for classification and searching for moldules of certain types, etc. """ def __init__ (self, klass, initargs, category): """ Initializes the ModuleWrapper with an uninstantiated class @param klass: The klass this wrapper wraps @param initargs: The arguments used to instantiate klass @param category: The category @ivar name: The name of the contained module @ivar description: The description of the contained module @ivar icon_name: The name of an icon representing the contained module @ivar module_type: The type of the contained module (e.g. sink, source) @ivar category: The category of the contained module @ivar in_type: The name of the datatype that the module accepts (put()) @ivar out_type: The name of the datatype that the module produces (get()) @ivar classname: The classname used to instanciate another module instance @ivar initargs: The arguments passed to the new module if created @ivar module: An instance of the described module """ if type(initargs) != tuple: raise Exception("Module init args must be a tuple") self.klass = klass self.initargs = initargs self.category = category #extract class parameters if klass: self.name = getattr(klass, "_name_", "") self.description = getattr(klass, "_description_", "") self.icon_name = getattr(klass, "_icon_", "") self.module_type = getattr(klass, "_module_type_", "") self.in_type = getattr(klass, "_in_type_", "") self.out_type = getattr(klass, "_out_type_", "") self.configurable = getattr(klass, "_configurable_", False) self.classname = klass.__name__ else: self.name = "Unknown" self.description = "Unknown" self.icon_name = "image-missing" self.module_type = "" self.in_type = "" self.out_type = "" self.classname = "" self.configurable = False self.dndKey = None self.enabled = True self.module = None self.icon_path = "" self.icon = {} self.descriptiveIcon = None def __str__(self): return "Wrapper: %s %s (UID: %s)" % (self.get_name(), self.module_type, self.get_UID()) # Keys serve two goals in conduit, nominally related to dataprovider factories. # and instantiating dataproviders # # 1. Keys act as a match pattern for instantiating the same class multiple times # with different configurations, such as when the user has multiple iPods connected. # This matching is tested when conduit restores saved dataproviders, if the key # is not known to Conduit, then a pending dataprovider is inserted in its place # # 2. They are also serve a way to show the same class in multiple categories def get_dnd_key(self): if self.dndKey: return self.dndKey return self.get_key() def set_dnd_key(self, dndKey): self.dndKey = dndKey def get_key(self): """ Returns a string in the form of classname:initarg0:initarg1:... I suppose I could have used the builtin __getinitargs__ call used with pickle but requires less implementation detail on the part of the DP """ if len(self.initargs) > 0: return self.classname + ":" + ":".join(self.initargs) else: return self.classname def get_name(self): """ @returns: The dataproviders user readable name """ if self.module == None: return self.name else: return self.module.get_name() def set_name(self, name): """ Sets the dataproviders user readable name """ self.name = name def get_UID(self): """ Returs a unique identifier for the module and its contained dataprovider. @rtype: C{string} """ if self.module == None: muid = "None" else: muid = self.module.get_UID() return "%s-%s" % (self.get_key(), muid) def get_input_type(self): """ Returns the in_type for the module. If the module has not yet been initialised then its in_type is derived from its class attributes. If it has been initialised then it can supply its own in_type """ if self.module == None: return self.in_type else: return self.module.get_input_type() def get_output_type(self): """ Returns the out_type for the module. See get_input_type() """ if self.module == None: return self.out_type else: return self.module.get_output_type() def get_icon(self, size=16): """ Returns the icon for the module contained in this wrapper. In the case of a sink or source this is easy as the module contains the icon. Wrappers derived from this class (such as the CategoryWrapper) may override this function """ import gtk if not self.icon.has_key(size) or self.icon[size] is None: if self.module_type in ["source", "sink", "twoway", "category"]: try: info = gtk.icon_theme_get_default().lookup_icon(self.icon_name, size, 0) self.icon[size] = info.load_icon() self.icon_path = info.get_filename() except: self.icon[size] = None log.warn("Could not load icon %s for %s" % (self.icon_name, self.name)) #Last resort: Try the non icon-naming-spec compliant icon self.icon_name = "conduit" info = gtk.icon_theme_get_default().lookup_icon(self.icon_name, size, 0) self.icon[size] = info.load_icon() self.icon_path = info.get_filename() return self.icon[size] def get_descriptive_icon(self): """ The descriptive icon is two icons composited side by side. On the left is the dataprovider icon, on the right an arrow indicating its type size of each icon """ import gtk # _____ # | |___ # | i | a | # |_____|___| isize = 24 asize = 16 bwidth = isize + asize bheight = max(isize, asize) if self.descriptiveIcon is None: if self.module_type in ["source", "sink", "twoway"]: try: icon = self.get_icon(isize) arrowName = "conduit-"+self.module_type arrow = gtk.icon_theme_get_default().load_icon(arrowName, asize, 0) #Composite the arrow to the right of the icon dest = gtk.gdk.Pixbuf( colorspace=gtk.gdk.COLORSPACE_RGB, has_alpha=True, bits_per_sample=8, width=bwidth, height=bheight ) dest.fill(0) #Composite the icon on the left icon.composite( dest=dest, dest_x=0, #right of icon dest_y=0, #at the top dest_width=isize, #use whole arrow 1:1 dest_height=isize, #ditto offset_x=0, offset_y=0, scale_x=1, scale_y=1, interp_type=gtk.gdk.INTERP_NEAREST, overall_alpha=255 ) #Arrow on the right arrow.composite( dest=dest, dest_x=isize, #right of icon dest_y=isize-asize, #at the bottom dest_width=asize, #use whole arrow 1:1 dest_height=asize, #ditto offset_x=isize, #move self over to the right offset_y=isize-asize,#at the bottom scale_x=1, scale_y=1, interp_type=gtk.gdk.INTERP_NEAREST, overall_alpha=255 ) self.descriptiveIcon = dest except: log.warn("Error getting icon\n%s" % traceback.format_exc()) elif self.module_type == "category": self.descriptiveIcon = self.get_icon(isize) return self.descriptiveIcon def set_configuration_xml(self, xmltext): self.module.set_configuration_xml(xmltext) def get_configuration_xml(self): return self.module.get_configuration_xml() def instantiate_module(self): self.module = self.klass(*self.initargs) def is_pending(self): return self.module == None class PendingDataproviderWrapper(ModuleWrapper): def __init__(self, key): ModuleWrapper.__init__( self, klass=None, initargs=(), category=None ) self.icon_name="image-loading" self.module_type="twoway" self.classname=key.split(':')[0] self.enabled=False self.key = key self.xmltext = "" def __str__(self): return "PendingWrapper Key: %s" % self.get_key() def get_key(self): return self.key def set_configuration_xml(self, xmltext): self.xmltext = xmltext def get_configuration_xml(self): return self.xmltext conduit-0.3.17/conduit/modules/0000777000175000017500000000000011326117101013362 500000000000000conduit-0.3.17/conduit/modules/N800Module/0000777000175000017500000000000011326117103015157 500000000000000conduit-0.3.17/conduit/modules/N800Module/N800Module.py0000644000175000017500000001371711321370454017256 00000000000000""" Provides a number of dataproviders which are associated with a N800 device. Allow the transcoding of music, photos and video before transferring them to the n800 Copyright 2007: Jaime Frutos Morales, John Stowers License: GPLv2 """ import logging log = logging.getLogger("modules.N800") import conduit import conduit.datatypes.File as File import conduit.datatypes.Video as Video import conduit.datatypes.Audio as Audio import conduit.datatypes.Photo as Photo import conduit.dataproviders.VolumeFactory as VolumeFactory import conduit.dataproviders.DataProviderCategory as DataProviderCategory import conduit.dataproviders.File as FileDataProvider import conduit.Exceptions as Exceptions import conduit.Vfs as Vfs from gettext import gettext as _ MODULES = { "N800Factory" : { "type": "dataprovider-factory" }, } class N800Factory(VolumeFactory.VolumeFactory): def is_interesting(self, udi, props): if props.has_key("info.parent") and props.has_key("info.parent")!="": prop2 = self._get_properties(props["info.parent"]) if prop2.has_key("storage.model") and prop2["storage.model"] in ("N800", "N810"): if prop2.has_key("storage.removable") and prop2["storage.removable"] == True: return True return False def get_category(self, udi, **kwargs): return DataProviderCategory.DataProviderCategory( "Nokia N800", "n800", kwargs['mount']) def get_dataproviders(self, udi, **kwargs): return [N800FolderTwoWay, N800AudioTwoWay, N800VideoTwoWay, N800PhotoTwoWay] class N800Base(FileDataProvider.FolderTwoWay): """ TwoWay dataprovider for synchronizing a folder on a N800 """ #Translators: Translate this in derived classes. DEFAULT_FOLDER = _("Conduit") #Signifies that a conversion should not take place NO_CONVERSION_STRING = _("None") _configurable_ = True def __init__(self, mount, udi, folder): FileDataProvider.FolderTwoWay.__init__(self, "file://"+folder, "N800", False, False, False ) self.mount = mount self.udi = udi self.encodings = {} self.update_configuration( encoding = "" ) def config_setup(self, config): config.add_item(_("Encoding"), "radio", config_name = "encoding", choices = self.encodings.keys()+[self.NO_CONVERSION_STRING] ) def refresh(self): d = File.File(URI=self.folder) if not d.exists(): try: d.make_directory_and_parents() except: raise Exceptions.RefreshError("Error Creating Directory") FileDataProvider.FolderTwoWay.refresh(self) def get_input_conversion_args(self): try: return self.encodings[self.encoding] except KeyError: return {} def get_UID(self): return "%s" % self.udi class N800FolderTwoWay(N800Base): """ TwoWay dataprovider for synchronizing a folder on a N800 """ _name_ = _("N800 Files") _description_ = _("Synchronizes files/folders to a N800 device") _in_type_ = "file" _out_type_ = "file" #To translators: default backup folder of N800 DEFAULT_FOLDER = _("Backups") def __init__(self, *args): N800Base.__init__( self, mount=args[0], udi=args[1], folder=Vfs.uri_join(args[0],self.DEFAULT_FOLDER) ) class N800AudioTwoWay(N800Base): """ TwoWay dataprovider for synchronizing a folder on a N800 """ _name_ = _("N800 Music") _description_ = _("Synchronizes music to a N800 device") _in_type_ = "file/audio" _out_type_ = "file/audio" _icon_ = "audio-x-generic" #To translators: defaul music folder of N800 DEFAULT_FOLDER = _("Music") def __init__(self, *args): N800Base.__init__( self, mount=args[0], udi=args[1], folder=Vfs.uri_join(args[0],self.DEFAULT_FOLDER) ) self.encodings = Audio.PRESET_ENCODINGS.copy() self.encoding = "ogg" class N800VideoTwoWay(N800Base): """ TwoWay dataprovider for synchronizing a folder on a N800 """ _name_ = _("N800 Videos") _description_ = _("Synchronizes video to a N800 device") _in_type_ = "file/video" _out_type_ = "file/video" _icon_ = "video-x-generic" #To translators: defaul video folder of N800 DEFAULT_FOLDER = _("Video") def __init__(self, *args): N800Base.__init__( self, mount=args[0], udi=args[1], folder=Vfs.uri_join(args[0],self.DEFAULT_FOLDER) ) self.encodings = Video.PRESET_ENCODINGS.copy() self.encoding = "ogg" class N800PhotoTwoWay(N800Base): """ TwoWay dataprovider for synchronizing a folder on a N800 """ _name_ = _("N800 Photos") _description_ = _("Synchronizes photos to an N800 device") _in_type_ = "file/photo" _out_type_ = "file/photo" _icon_ = "image-x-generic" #To translators: default photos folder of N800 DEFAULT_FOLDER = _("Photo") def __init__(self, *args): N800Base.__init__( self, mount=args[0], udi=args[1], folder=Vfs.uri_join(args[0],self.DEFAULT_FOLDER) ) self.encodings = Photo.PRESET_ENCODINGS.copy() #Add size = 800x480 to the default photo encodings for k in self.encodings.keys(): self.encodings[k]['size'] = '800x480' self.encoding = "jpeg" conduit-0.3.17/conduit/modules/N800Module/Makefile.am0000644000175000017500000000020511172176633017140 00000000000000conduit_handlersdir = $(libdir)/conduit/modules/N800Module conduit_handlers_PYTHON = N800Module.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/modules/N800Module/Makefile.in0000644000175000017500000003243411326116727017161 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/modules/N800Module DIST_COMMON = $(conduit_handlers_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduit_handlersdir)" py_compile = $(top_srcdir)/py-compile DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ conduit_handlersdir = $(libdir)/conduit/modules/N800Module conduit_handlers_PYTHON = N800Module.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/modules/N800Module/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/modules/N800Module/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduit_handlersPYTHON: $(conduit_handlers_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduit_handlersdir)" || $(MKDIR_P) "$(DESTDIR)$(conduit_handlersdir)" @list='$(conduit_handlers_PYTHON)'; dlist=; list2=; test -n "$(conduit_handlersdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduit_handlersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduit_handlersdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduit_handlersdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduit_handlersdir)" $$dlist; \ fi; \ else :; fi uninstall-conduit_handlersPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_handlers_PYTHON)'; test -n "$(conduit_handlersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$fileso tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(conduit_handlersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-conduit_handlersPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-conduit_handlersPYTHON .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-conduit_handlersPYTHON \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am \ uninstall-conduit_handlersPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/modules/Firefox3Module/0000777000175000017500000000000011326117104016220 500000000000000conduit-0.3.17/conduit/modules/Firefox3Module/Firefox3Module.py0000644000175000017500000000671011321403566021352 00000000000000# Copyright 2009 - Andrew Stormont import os.path import ConfigParser import sqlite3 import logging log = logging.getLogger("modules.Firefox3") from gettext import gettext as _ import conduit import conduit.dataproviders.DataProvider as DataProvider import conduit.utils as Utils import conduit.datatypes.Bookmark as Bookmark import conduit.Exceptions as Exceptions FFDIR = None LINFFDIR = os.path.expanduser(os.path.join("~",".mozilla","firefox")) MACFFDIR = os.path.expanduser(os.path.join("~","Library","Application Support","Firefox")) if os.path.exists(LINFFDIR): FFDIR = LINFFDIR elif os.path.exists(MACFFDIR): FFDIR = MACFFDIR else: log.warn("Firefox 3 bookmarks support disabled") if FFDIR: MODULES = { "Firefox3DataProviderSource" : { "type" : "dataprovider" }, } else: MODULES = {} class Firefox3DataProviderSource(DataProvider.DataSource): """ Firefox 3 Bookmarks datasource """ _name_ = _("Firefox 3 Bookmarks") _description_ = _("Syncronize your Firefox 3 Bookmarks") _category_ = conduit.dataproviders.CATEGORY_BOOKMARKS _module_type_ = "source" _out_type_ = "bookmark" _icon_ = "applications-internet" _configurable_ = True BOOKMARKS_ROOT, BOOKMARKS_MENU, BOOKMARKS_TOOLBAR = range(1,4) def __init__(self): DataProvider.DataSource.__init__(self) self._bookmarks = [] self._cf = ConfigParser.ConfigParser() self._cf.read(os.path.join(FFDIR,"profiles.ini")) self.update_configuration( profilepath = self._cf.get("Profile0", "Path") # default ) def _get_profiles(self): retval = [] for section in self._cf.sections(): if section != "General": retval.append((self._cf.get(section, "Name"), self._cf.get(section, "Path"))) return retval def refresh(self): DataProvider.DataSource.refresh(self) # sqlite3 is not thread safe, so we cannot preserve connections in this class con = sqlite3.connect(os.path.join(FFDIR,self.profilepath,"places.sqlite")) try: # table structure # moz_bookmarks: id|type|fk|parent|position|title|keyword_id|folder_type|dateAdded|lastModified # moz_places: id|url|title|rev_host|visit_count|hidden|typed|favicon_id|frecency cur = con.execute("SELECT b.title,p.url FROM moz_bookmarks b, moz_places p WHERE b.fk=p.id;") except: con.close() raise Exceptions.SyncronizeError("Can't read Firefox 3 Bookmarks - Make sure Firefox is closed.") for (title, url) in cur.fetchall(): bookmark = Bookmark.Bookmark(title, url) bookmark.set_UID(bookmark.get_hash()) self._bookmarks.append(bookmark) con.close() def get_all(self): DataProvider.DataSource.get_all(self) retval = [] for bookmark in self._bookmarks: retval.append(bookmark.get_UID()) return retval def get(self, luid): DataProvider.DataSource.get(self, luid) for bookmark in self._bookmarks: if bookmark.get_UID() == luid: return bookmark def config_setup(self, config): config.add_item(_("Firefox Profile"), "combo", config_name = "profilepath", choices = [(path, name) for name, path in self._get_profiles()] ) def get_UID(self): return Utils.get_user_string() conduit-0.3.17/conduit/modules/Firefox3Module/Makefile.am0000644000175000017500000000021511172176633020201 00000000000000conduit_handlersdir = $(libdir)/conduit/modules/Firefox3Module conduit_handlers_PYTHON = Firefox3Module.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/modules/Firefox3Module/Makefile.in0000644000175000017500000003246011326116727020220 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/modules/Firefox3Module DIST_COMMON = $(conduit_handlers_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduit_handlersdir)" py_compile = $(top_srcdir)/py-compile DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ conduit_handlersdir = $(libdir)/conduit/modules/Firefox3Module conduit_handlers_PYTHON = Firefox3Module.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/modules/Firefox3Module/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/modules/Firefox3Module/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduit_handlersPYTHON: $(conduit_handlers_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduit_handlersdir)" || $(MKDIR_P) "$(DESTDIR)$(conduit_handlersdir)" @list='$(conduit_handlers_PYTHON)'; dlist=; list2=; test -n "$(conduit_handlersdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduit_handlersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduit_handlersdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduit_handlersdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduit_handlersdir)" $$dlist; \ fi; \ else :; fi uninstall-conduit_handlersPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_handlers_PYTHON)'; test -n "$(conduit_handlersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$fileso tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(conduit_handlersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-conduit_handlersPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-conduit_handlersPYTHON .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-conduit_handlersPYTHON \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am \ uninstall-conduit_handlersPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/modules/GoogleModule/0000777000175000017500000000000011326117103015746 500000000000000conduit-0.3.17/conduit/modules/GoogleModule/GoogleModule.py0000644000175000017500000016413411321403766020637 00000000000000import os import re import urlparse import gobject import datetime import dateutil.parser import vobject import time from dateutil.tz import tzutc, tzlocal from gettext import gettext as _ import logging log = logging.getLogger("modules.Google") import gtk import conduit import conduit.dataproviders.DataProvider as DataProvider import conduit.dataproviders.Image as Image import conduit.utils as Utils import conduit.Exceptions as Exceptions from conduit.datatypes import Rid import conduit.datatypes.Contact as Contact import conduit.datatypes.Event as Event import conduit.datatypes.Photo as Photo import conduit.datatypes.Video as Video import conduit.datatypes.File as File #Distributors, if you ship python gdata >= 1.0.10 then remove this line #and the appropriate directories Utils.dataprovider_add_dir_to_path(__file__) try: import atom.service import gdata.service import gdata.photos.service import gdata.calendar.service import gdata.contacts.service import gdata.docs.service import gdata.youtube.service MODULES = { # "GoogleCalendarTwoWay" : { "type": "dataprovider" }, "PicasaTwoWay" : { "type": "dataprovider" }, "YouTubeTwoWay" : { "type": "dataprovider" }, "ContactsTwoWay" : { "type": "dataprovider" }, "DocumentsSink" : { "type": "dataprovider" }, } log.info("Module Information: %s" % Utils.get_module_information(gdata, None)) except (ImportError, AttributeError): MODULES = {} log.info("Google support disabled") # time format FORMAT_STRING = "%Y-%m-%dT%H:%M:%S" class _GoogleBase: _configurable_ = True def __init__(self, service): self.update_configuration( username = ("", self._set_username), password = ("", self._set_password), authenticated = False, ) self.loggedIn = False self.service = service self._status = "Not authenticated" self.status_config = None if conduit.GLOBALS.settings.proxy_enabled(): log.info("Configuring proxy for %s" % self.service) host,port,user,password = conduit.GLOBALS.settings.get_proxy() #FIXME: Is this necessary, does GNOME propogate the gconf vars to #env vars? gdata automatically picks those up os.environ['http_proxy'] = "%s:%s" % (host,port) os.environ['https_proxy'] = "%s:%s" % (host,port) os.environ['proxy_username'] = user os.environ['proxy_password'] = password def _do_login(self): self.service.ClientLogin(self.username, self.password) def _login(self): if not self.loggedIn: try: self._do_login() self.loggedIn = True self.authenticated = True self._set_status("Authenticated") except gdata.service.BadAuthentication: log.info("Error logging in: Incorrect username or password") self._set_status("Incorrect username or password") except Exception, e: log.info("Error logging in: %s" % e) self._set_status("Error logging in") else: self._login_finished() def _set_status(self, status): self._status = status if self.status_config: self.status_config.value = status def _reset_authentication(self): self.loggedIn = False self.authenticated = False self._set_status("Not authenticated") def _set_username(self, username): if self.username != username: self.username = username self._reset_authentication() def _set_password(self, password): if self.password != password: self.password = password self._reset_authentication() def _login_finished(self): pass def config_setup(self, config): config.add_section("Google Account") username_config = config.add_item("Email", "text", config_name = "username") password_config = config.add_item("Password", "text", config_name = "password", password = True) def _login(button): config.apply_config(items = [username_config, password_config]) self._login() if self.authenticated: self._set_status("Authenticated") self.status_config = config.add_item(None, "label", xalignment = 0.5, initial_value = self._status) config.add_item("Authenticate", "button", image="dialog-password", action = _login) return username_config, password_config def is_configured (self, isSource, isTwoWay): if len(self.username) < 1: return False if len(self.password) < 1: return False return True def get_UID(self): return self.username class _GoogleCalendar: def __init__(self, name, uri): self.uri = uri self.name = name @classmethod def from_google_format(cls, calendar): uri = calendar.id.text.split('/')[-1] name = calendar.title.text return cls(name, uri) def __eq__(self, other): if other is None: return False else: return self.get_uri() == other.get_uri() def get_uri(self): return self.uri def get_name(self): return self.name def get_feed_link(self): return '/calendar/feeds/' + self.get_uri() + '/private/full' def convert_madness_to_datetime(inputDate): log.debug('Attempting to parse: %s' % inputDate) dateStr = None dateDate = None dateDateTime = None dateTZInfo = None if isinstance(inputDate,str) or isinstance(inputDate, unicode): dateStr = inputDate if isinstance(inputDate, vobject.base.ContentLine): if isinstance(inputDate.value, unicode): dateStr = inputDate.value elif isinstance(inputDate.value, datetime.date): dateDate = inputDate.value elif isinstance(inputDate.value, datetime.datetime): dateDateTime = inputDate.value if dateStr is not None: if 'T' not in dateStr: dateDate = dateutil.parser.parse(dateStr).date() else: dateDateTime = dateutil.parser.parse(dateStr) if dateDate is not None: return dateDate if dateDateTime is not None: if dateDateTime.tzinfo is not None: log.warn("returning: %s",dateDateTime) ts = dateDateTime.timetuple() dateDateTime = dateDateTime.fromtimestamp(time.mktime(ts)) return dateDateTime elif dateTZInfo is not None: return dateDateTime.replace(tzinfo=dateTZInfo) else: log.warn('Waring, assuming datetime ('+dateDateTime.isoformat()+') is UTC') return dateDateTime.replace(tzinfo=tzutc()) raise TypeError('Unable to convert to datetime') def parse_google_recur(recurString, args): vobjGoogle = vobject.readOne('BEGIN:VEVENT\r\n'+recurString+'\r\nEND:VEVENT\r\n') iCalString = "BEGIN:VCALENDAR\r\nVERSION:2.0\r\n" if 'vtimezone' in vobjGoogle.contents: iCalString += vobjGoogle.vtimezone.serialize() iCalString += 'BEGIN:VEVENT\r\n' if 'dtend' in vobjGoogle.contents: iCalString += vobjGoogle.dtend.serialize() if 'dtstart' in vobjGoogle.contents: iCalString += vobjGoogle.dtstart.serialize() if 'rrule' in vobjGoogle.contents: iCalString += vobjGoogle.rrule.serialize() iCalString += 'END:VEVENT\r\nEND:VCALENDAR\r\n' vobjICal = vobject.readOne(iCalString) if 'dtstart' in vobjICal.vevent.contents: args['startTime'] = convert_madness_to_datetime(vobjICal.vevent.dtstart) if 'dtend' in vobjICal.vevent.contents: args['endTime'] = convert_madness_to_datetime(vobjICal.vevent.dtend) if 'rrule' in vobjICal.vevent.contents: args['recurrence'] = vobjICal.vevent.rrule.value if 'vtimezone' in vobjICal.contents: args['vtimezone'] = vobjICal.vtimezone class _GoogleEvent: def __init__(self, **kwargs): self.uid = kwargs.get('uid', None) self.mTime = kwargs.get('mTime', None) self.title = kwargs.get('title', None) self.description = kwargs.get('description', None) self.location = kwargs.get('location', None) self.recurrence = kwargs.get('recurrence', None) self.startTime = kwargs.get('startTime', None) self.endTime = kwargs.get('endTime', None) self.vtimezone = kwargs.get('vtimezone',None) self.created = kwargs.get('created', None) self.visibility = kwargs.get('visibility', None) self.status = kwargs.get('status', None) self.editLink = kwargs.get('editLink', None) @classmethod def from_ical_format(cls, iCalString): args = dict() log.debug('Importing from iCal Event :\n'+iCalString) iCal = vobject.readOne(iCalString) iCalEvent = iCal.vevent if 'vtimezone' in iCal.contents: args['vtimezone'] = iCal.vtimezone if 'summary' in iCalEvent.contents: args['title'] = iCalEvent.summary.value if 'description' in iCalEvent.contents: args['description'] = iCalEvent.description.value if 'location' in iCalEvent.contents: args['location'] = iCalEvent.location.value if 'status' in iCalEvent.contents: args['status'] = iCalEvent.status.value if 'class' in iCalEvent.contents: args['visibility'] = iCalEvent.contents['class'][0].value if 'rrule' in iCalEvent.contents: args['recurrence'] = iCalEvent.rrule.value if 'dtstart' in iCalEvent.contents: args['startTime'] = convert_madness_to_datetime(iCalEvent.dtstart) if 'dtend' in iCalEvent.contents: args['endTime'] = convert_madness_to_datetime(iCalEvent.dtend) return cls(**args) @classmethod def from_google_format(cls, googleEvent): args = dict() log.debug('Importing from Google Event :\n'+str(googleEvent)) if googleEvent.id.text is not None: args['uid'] = googleEvent.id.text.split('/')[-1] + "@google.com" if googleEvent.title.text is not None: args['title'] = googleEvent.title.text if googleEvent.content.text is not None: args['description'] = googleEvent.content.text if googleEvent.where[0].value_string is not None: args['location'] = googleEvent.where[0].value_string if googleEvent.event_status.value is not None: args['status'] = googleEvent.event_status.value if googleEvent.visibility.value is not None: #Can't find out what default visibility is from gdata #See: http://code.google.com/p/gdata-issues/issues/detail?id=5 if googleEvent.visibility.value != 'DEFAULT': args['visibility'] = googleEvent.visibility.value if googleEvent.published.text is not None: args['created'] = convert_madness_to_datetime(googleEvent.published.text) if googleEvent.updated.text is not None: args['mTime'] = convert_madness_to_datetime(googleEvent.updated.text) #iCalEvent.vevent.add('dtstamp').value = if len(googleEvent.when) > 0: eventTimes = googleEvent.when[0] args['startTime'] = convert_madness_to_datetime(eventTimes.start_time) args['endTime'] = convert_madness_to_datetime(eventTimes.end_time) if googleEvent.recurrence is not None: parse_google_recur(googleEvent.recurrence.text, args) args['editLink'] = googleEvent.GetEditLink().href return cls(**args) def get_uid(self): return self.uid def get_mtime(self): #mtimes need to be naive and local #Shouldn't Conduit use non-naive mTimes? try: mTimeLocal = self.mTime.astimezone(tzlocal()) except ValueError: mTimeLocal = self.mTime mTimeLocalWithoutTZ = mTimeLocal.replace(tzinfo=None) return mTimeLocalWithoutTZ def get_edit_link(self): return self.editLink def get_google_format(self): googleEvent = gdata.calendar.CalendarEventEntry() if self.title is not None: googleEvent.title = atom.Title(text=self.title) if self.description is not None: googleEvent.content = atom.Content(text=self.description) if self.location is not None: googleEvent.where.append(gdata.calendar.Where(value_string=self.location)) if self.status is not None: status = gdata.calendar.EventStatus() status.value = self.status googleEvent.event_status = status if self.visibility is not None: vis = gdata.calendar.Visibility() vis.value = self.visibility googleEvent.visibility = vis if self.recurrence is not None: vobj = vobject.iCalendar().add('vevent') vobj.add('rrule').value = self.recurrence recurText = vobj.rrule.serialize() if self.startTime is not None: vobj.add('dtstart').value = self.startTime recurText += vobj.dtstart.serialize() if self.endTime is not None: vobj.add('dtend').value = self.endTime recurText += vobj.dtend.serialize() if self.vtimezone is not None: vobj.add('vtimezone') vobj.vtimezone = self.vtimezone recurText += vobj.vtimezone.serialize() googleEvent.recurrence = gdata.calendar.Recurrence(text=recurText) else: eventTimes = gdata.calendar.When() eventTimes.start_time = self.startTime.isoformat() eventTimes.end_time = self.endTime.isoformat() googleEvent.when.append(eventTimes) log.debug("Created Google Format :\n"+str(googleEvent)) return googleEvent def get_ical_format(self): iCalEvent = vobject.iCalendar().add('vevent') if self.uid is not None: iCalEvent.add('uid').value = self.uid if self.title is not None: iCalEvent.add('summary').value = self.title if self.description is not None: iCalEvent.add('description').value = self.description if self.location is not None: iCalEvent.add('location').value = self.location if self.status is not None: iCalEvent.add('status').value = self.status if self.visibility is not None: iCalEvent.add('class').value = self.visibility if self.created is not None: try: iCalEvent.add('created').value = self.created.astimezone(tzutc()) except ValueError: pass if self.mTime is not None: try: iCalEvent.add('last-modified').value = self.mTime.astimezone(tzutc()) except ValueError: pass #iCalEvent.vevent.add('dtstamp').value = if self.recurrence is not None: iCalEvent.add('rrule').value = self.recurrence if self.startTime is not None: iCalEvent.add('dtstart').value = self.startTime if self.endTime is not None: iCalEvent.add('dtend').value = self.endTime returnStr = iCalEvent.serialize() log.debug("Created ICal Format :\n"+returnStr) return returnStr class GoogleCalendarTwoWay(_GoogleBase, DataProvider.TwoWay): _name_ = _("Google Calendar") _description_ = _("Synchronize your Google Calendar") _category_ = conduit.dataproviders.CATEGORY_OFFICE _module_type_ = "twoway" _in_type_ = "event" _out_type_ = "event" _icon_ = "appointment-new" def __init__(self): DataProvider.TwoWay.__init__(self) _GoogleBase.__init__(self,gdata.calendar.service.CalendarService()) self.update_configuration( selectedCalendar = (None, _set_calendar, _get_calendar), ) self.events = {} def _get_calendar(self): return (self.selectedCalendar.get_name(), self.selectedCalendar.get_uri()) def _set_calendar(self, value): try: if len(value) == 2: self.selectedCalendar = _GoogleCalendar(*value) else: raise TypeError except TypeError: log.error("Unknown calendar information") def _get_all_events(self): self._login() calQuery = gdata.calendar.service.CalendarEventQuery(user = self.selectedCalendar.get_uri()) eventFeed = self.service.CalendarQuery(calQuery) for event in eventFeed.entry: yield _GoogleEvent.from_google_format(event) def _get_all_calendars(self): self._login() allCalendarsFeed = self.service.GetCalendarListFeed().entry for calendarFeed in allCalendarsFeed: yield _GoogleCalendar.from_google_format(calendarFeed) def _load_calendars(self, widget, tree): import gtk, gtk.gdk dlg = tree.get_widget("GoogleCalendarConfigDialog") oldCursor = dlg.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) gtk.gdk.flush() sourceComboBox = tree.get_widget("sourceComboBox") store = sourceComboBox.get_model() store.clear() self._set_username(tree.get_widget("username").get_text()) self._set_password(tree.get_widget("password").get_text()) try: for calendar in self._get_all_calendars(): rowref = store.append( (calendar.get_name(), calendar) ) if calendar == self.selectedCalendar: sourceComboBox.set_active_iter(rowref) except gdata.service.BadAuthentication: errorMsg = "Login Failed" errorDlg = gtk.MessageDialog(type=gtk.MESSAGE_ERROR, message_format=errorMsg, buttons=gtk.BUTTONS_OK) errorDlg.run() errorDlg.destroy() dlg.window.set_cursor(oldCursor) return sourceComboBox.set_sensitive(True) tree.get_widget("calendarLbl").set_sensitive(True) tree.get_widget("okBtn").set_sensitive(True) dlg.window.set_cursor(oldCursor) #TODO: Convert Calendar to new config def configure(self, window): import gtk tree = Utils.dataprovider_glade_get_widget( __file__, "calendar-config.glade", "GoogleCalendarConfigDialog" ) tree.get_widget("username").set_text(self.username) tree.get_widget("password").set_text(self.password) sourceComboBox = tree.get_widget("sourceComboBox") store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_PYOBJECT) sourceComboBox.set_model(store) cell = gtk.CellRendererText() sourceComboBox.pack_start(cell, True) sourceComboBox.add_attribute(cell, 'text', 0) sourceComboBox.set_active(0) if self.selectedCalendar is not None: rowref = store.append( (self.selectedCalendar.get_name(), self.selectedCalendar) ) sourceComboBox.set_active_iter(rowref) signalConnections = { "on_loadCalendarsBtn_clicked" : (self._load_calendars, tree) } tree.signal_autoconnect( signalConnections ) dlg = tree.get_widget("GoogleCalendarConfigDialog") response = Utils.run_dialog(dlg, window) if response == True: self.selectedCalendar = store.get_value(sourceComboBox.get_active_iter(),1) dlg.destroy() def refresh(self): DataProvider.TwoWay.refresh(self) self.events = {} for event in self._get_all_events(): self.events[event.get_uid()] = event def finish(self, aborted, error, conflict): self.events = {} def get_all(self): return self.events.keys() def get_num_items(self): DataProvider.TwoWay.get_num_items(self) return len(self.events) def get(self, LUID): DataProvider.TwoWay.get(self, LUID) event = self.events[LUID] conduitEvent = Event.Event() conduitEvent.set_from_ical_string(event.get_ical_format()) conduitEvent.set_open_URI(LUID) conduitEvent.set_mtime(event.get_mtime()) conduitEvent.set_UID(event.get_uid()) return conduitEvent def _create_event(self, conduitEvent): googleEvent = _GoogleEvent.from_ical_format( conduitEvent.get_ical_string() ) newEvent = self.service.InsertEvent( googleEvent.get_google_format(), self.selectedCalendar.get_feed_link()) newEvent = _GoogleEvent.from_google_format(newEvent) return Rid(uid=newEvent.get_uid(), mtime=None, hash=None) def _delete_event(self, LUID): googleEvent = self.events[LUID] self.service.DeleteEvent(googleEvent.get_edit_link()) def _update_event(self, LUID, conduitEvent): self._delete_event(LUID) rid = self._create_event(conduitEvent) return rid def delete(self, LUID): self._delete_event(LUID) def put(self, obj, overwrite, LUID=None): #Following taken from EvolutionModule DataProvider.TwoWay.put(self, obj, overwrite, LUID) if LUID != None: existing = self.events.get(LUID, None) if existing != None: if overwrite == True: rid = self._update_event(LUID, obj) return rid else: comp = obj.compare(existing) # only update if newer if comp != conduit.datatypes.COMPARISON_NEWER: raise Exceptions.SynchronizeConflictError(comp, existing, obj) else: # overwrite and return new ID rid = self._update_event(LUID, obj) return rid # if we get here then it is new... log.info("Creating new object") rid = self._create_event(obj) return rid def is_configured (self, isSource, isTwoWay): if not _GoogleBase.is_configured(self, isSource, isTwoWay): return False return (self.selectedCalendar != None) class PicasaTwoWay(_GoogleBase, Image.ImageTwoWay): _name_ = _("Picasa") _description_ = _("Synchronize your Google Picasa photos") _icon_ = "picasa" def __init__(self, *args): Image.ImageTwoWay.__init__(self) _GoogleBase.__init__(self, gdata.photos.service.PhotosService()) self.update_configuration( albumName = "", imageSize = "None", ) self.galbum = None self.gphoto_dict = {} def _get_raw_photo_url(self, photoInfo): return photoInfo.GetMediaURL() def _get_photo_info (self, id): if self.gphoto_dict.has_key(id): return self.gphoto_dict[id] else: return None def _get_photo_formats (self): return ("image/jpeg",) def _get_photo_size(self): return self.imageSize def _upload_photo (self, uploadInfo): try: gphoto = self.service.InsertPhotoSimple( self.galbum, uploadInfo.name, uploadInfo.caption, uploadInfo.url) for tag in uploadInfo.tags: self.service.InsertTag(gphoto, str(tag)) return Rid(uid=gphoto.gphoto_id.text) except Exception, e: raise Exceptions.SyncronizeError("Picasa Upload Error:\n%s" % e) def _replace_photo(self, id, uploadInfo): try: gphoto = self.gphoto_dict[id] gphoto.title = atom.Title(text=uploadInfo.name) gphoto.summary = atom.Summary(text=uploadInfo.caption) gphoto.media = gdata.media.Group() gphoto.media.keywords = gdata.media.Keywords() if uploadInfo.tags: gphoto.media.keywords.text = ",".join("%s" % (str(t)) for t in uploadInfo.tags) gphoto = self.service.UpdatePhotoMetadata(gphoto) # This should be done just only the photo itself has changed gphoto = self.service.UpdatePhotoBlob(gphoto, uploadInfo.url) return Rid(uid=gphoto.gphoto_id.text) except Exception, e: raise Exceptions.SyncronizeError("Picasa Update Error:\n%s" % e) def _find_album(self): for name,album in self._get_albums(): if name == self.albumName: log.debug("Found album %s" % self.albumName) return album return None def _get_album(self): self.galbum = self._find_album() if not self.galbum: log.debug("Creating new album %s." % self.albumName) self._create_album(self.albumName) self.galbum = self._find_album() def _get_albums(self): albums = [] for album in self.service.GetUserFeed().entry: albums.append( (album.title.text, #album name album)) #album return albums def _get_photos(self): self.gphoto_dict = {} for photo in self.service.GetFeed(self.galbum.GetPhotosUri()).entry: self.gphoto_dict[photo.gphoto_id.text] = photo def _get_photo_timestamp(self, gphoto): from datetime import datetime timestamp = gphoto.updated.text[0:-5] try: return datetime.strptime(timestamp, FORMAT_STRING) except AttributeError: import time return datetime(*(time.strptime(timestamp, FORMAT_STRING)[0:6])) def _create_album(self, album_name): self.service.InsertAlbum(album_name, '', access='private') def refresh(self): Image.ImageTwoWay.refresh(self) self._login() if not self.loggedIn: raise Exceptions.RefreshError("Could not log in") self._get_album() if self.galbum: self._get_photos() def get_all (self): Image.ImageTwoWay.get_all(self) self._get_photos() return self.gphoto_dict.keys() def get (self, LUID): Image.ImageTwoWay.get (self, LUID) gphoto = self.gphoto_dict[LUID] url = gphoto.GetMediaURL() tags = (tag.title.text for tag in self.service.GetFeed(gphoto.GetTagsUri()).entry) f = Photo.Photo (URI=url) f.force_new_mtime(self._get_photo_timestamp(gphoto)) f.set_open_URI(url) f.set_UID(LUID) f.set_tags(tags) f.set_caption(gphoto.summary.text) return f def delete(self, LUID): if not self.gphoto_dict.has_key(LUID): log.warn("Photo does not exit") return self.service.Delete(self.gphoto_dict[LUID]) del self.gphoto_dict[LUID] def _login_finished(self): if self.albums_config: self.albums_config.choices = [album_name for album_name, album in self._get_albums()] def config_setup(self, config): username_config, password_config = _GoogleBase.config_setup(self, config) config.add_section("Saved photo settings") self.albums_config = config.add_item("Album", "combotext", config_name = "albumName") config.add_item("Resize photos", "combo", config_name = "imageSize", choices = [self.NO_RESIZE] + self.IMAGE_SIZES) def is_configured (self, isSource, isTwoWay): if not _GoogleBase.is_configured(self, isSource, isTwoWay): return False if len(self.albumName) < 1: return False return True class ContactsTwoWay(_GoogleBase, DataProvider.TwoWay): """ Contacts GData provider """ _name_ = _("Google Contacts") _description_ = _("Synchronize your Google Mail contacts") _category_ = conduit.dataproviders.CATEGORY_OFFICE _module_type_ = "twoway" _in_type_ = "contact" _out_type_ = "contact" _icon_ = "contact-new" def __init__(self, *args): DataProvider.TwoWay.__init__(self) _GoogleBase.__init__(self,gdata.contacts.service.ContactsService()) self.update_configuration( selectedGroup = (None, self._set_contact_group, self._get_contact_group), ) self.group_config = None def _get_contact_group(self): if not self.selectedGroup: return None return (self.selectedGroup.get_name(), self.selectedGroup.get_uri()) def _set_contact_group(self, value): if not value: return try: if isinstance(value, _GoogleContactGroup): self.selectedGroup = value return if len(value) != 2: raise TypeError self.selectedGroup = _GoogleContactGroup(*value) except TypeError: log.error("Unknown group information: %s" % str(value)) def _google_contact_from_conduit_contact(self, contact, gc=None): """ Fills the apropriate fields in the google gdata contact type based on those in the conduit contact type """ name = contact.get_name() emails = contact.get_emails() #Google contacts must feature at least a name and an email address if not (name or emails): return None #can also edit existing contacts if not gc: gc = gdata.contacts.ContactEntry() gc.title = atom.Title(text=name) #Create all emails, make first one primary, if the contact doesnt #already have a primary email address primary = 'false' existing = [] for ex in gc.email: if ex.primary and ex.primary == 'true': primary = 'true' existing.append(ex) for email in emails: if email not in existing: log.debug("Adding new email address %s %s" % (email, existing)) gc.email.append(gdata.contacts.Email( address=email, primary=primary))#,rel=gdata.contacts.REL_WORK)) primary = 'false' #notes = contact.get_notes() #if notes: gc.content = atom.Content(text=notes) return gc def _conduit_contact_from_google_contact(self, gc): """ Extracts available and interesting fields from the google contact and stored them in the conduit contact type """ c = Contact.Contact(formattedName=str(gc.title.text)) emails = [str(e.address) for e in gc.email] c.set_emails(*emails) #ee_names = map(operator.attrgetter('tag'),gc.extension_elements) #if len(gc.extension_elements) >0: # for e in [e for e in ee_names if e == 'phoneNumber']: # c.vcard.add('tel') # c.vcard.tel.value = gc.extension_elements[ee_names.index('phoneNumber')].text # c.vcard.tel.type_param = gc.extension_elements[ee_names.index('phoneNumber')].attributes['rel'].split('#')[1] # for e in [e for e in ee_names if e == 'postalAddress']: # c.vcard.add('adr') # c.vcard.adr.value = vobject.vcard.Address(gc.extension_elements[ee_names.index('postalAddress')].text) # c.vcard.adr.type_param = gc.extension_elements[ee_names.index('postalAddress')].attributes['rel'].split('#')[1] return c def _create_contact(self, contact): gc = self._google_contact_from_conduit_contact(contact) if not gc: log.info("Could not create google contact from conduit contact") return None try: entry = self.service.CreateContact(gc) except gdata.service.RequestError, e: #If the response dict reson is 'Conflict' then we are trying to #store a contact with the same email as one which already exists if e.message.get("reason","") == "Conflict": log.warn("FIXME: FIND THE OLD CONTACT BY EMAIL, GET IT, AND RAISE A CONFLICT EXCEPTION") raise Exceptions.SynchronizeConflictError("FIXME", "FIXME", "FIXME") except Exception, e: log.warn("Error creating contact: %s" % e) return None if entry: log.debug("Created contact: %s" % entry.id.text) return entry.id.text else: log.debug("Create contact error") return None def _update_contact(self, LUID, contact): #get the gdata contact from google try: oldgc = self.service.Get(LUID, converter=gdata.contacts.ContactEntryFromString) except gdata.service.RequestError: return None #update the contact gc = self._google_contact_from_conduit_contact(contact, oldgc) self.service.UpdateContact(oldgc.GetEditLink().href, gc) #fixme, we should really just return the RID here, but its safer #to use the same code path as get, because I am not sure if/how google #changes the mtime return LUID def _get_contact(self, LUID): if not LUID: return None #get the gdata contact from google try: gc = self.service.Get(LUID, converter=gdata.contacts.ContactEntryFromString) except gdata.service.RequestError: return None c = self._conduit_contact_from_google_contact(gc) c.set_UID(LUID) c.set_mtime(convert_madness_to_datetime(gc.updated.text)) return c def _get_all_contacts(self): if self.selectedGroup: query=gdata.contacts.service.ContactsQuery(group=self.selectedGroup.get_feed_link()) log.debug("Group query uri = %s" % query.ToUri()) feed = self.service.GetContactsFeed(query.ToUri()) else: feed = self.service.GetContactsFeed() res = [] while True: for contact in feed.entry: res.append(str(contact.id.text)) nextLink = feed.GetNextLink() if nextLink == None: break feed = self.service.GetContactsFeed(uri=nextLink.href) return res def refresh(self): DataProvider.TwoWay.refresh(self) self._login() if not self.loggedIn: raise Exceptions.RefreshError("Could not log in") def get_all(self): DataProvider.TwoWay.get_all(self) self._login() return self._get_all_contacts() def get(self, LUID): DataProvider.TwoWay.get(self, LUID) self._login() c = self._get_contact(LUID) if c == None: log.warn("Error getting/parsing gdata contact") return c def put(self, data, overwrite, LUID=None): #http://www.conduit-project.org/wiki/WritingADataProvider/GeneralPutInstructions DataProvider.TwoWay.put(self, data, overwrite, LUID) if overwrite and LUID: LUID = self._update_contact(LUID, data) else: oldData = self._get_contact(LUID) if LUID and oldData: comp = data.compare(oldData) #Possibility 1: If LUID != None (i.e this is a modification/update of a #previous sync, and we are newer, the go ahead an put the data if LUID != None and comp == conduit.datatypes.COMPARISON_NEWER: LUID = self._update_contact(LUID, data) #Possibility 3: We are the same, so return either rid elif comp == conduit.datatypes.COMPARISON_EQUAL: return oldData.get_rid() #Possibility 2, 4: All that remains are conflicts else: raise Exceptions.SynchronizeConflictError(comp, data, oldData) else: #Possibility 5: LUID = self._create_contact(data) #now return the rid if not LUID: raise Exceptions.SyncronizeError("Google contacts upload error.") else: return self._get_contact(LUID).get_rid() def delete(self, LUID): DataProvider.TwoWay.delete(self, LUID) self._login() #get the gdata contact from google try: gc = self.service.Get(LUID, converter=gdata.contacts.ContactEntryFromString) self.service.DeleteContact(gc.GetEditLink().href) except gdata.service.RequestError, e: log.warn("Error deleting: %s" % e) def finish(self, aborted, error, conflict): DataProvider.TwoWay.finish(self) def _get_all_groups(self): '''Get a list of addressbook groups''' self._login() #System Groups are only returned in version 2 of the API query=gdata.contacts.service.GroupsQuery() query['v']='2' feed = self.service.GetContactsFeed(query.ToUri()) for entry in feed.entry: yield _GoogleContactGroup.from_google_format(entry) def _login_finished(self): if self.group_config: groups = self._get_all_groups() self.group_config.choices = [(group, group.get_name()) for group in groups] def config_setup(self, config): username_config, password_config = _GoogleBase.config_setup(self, config) config.add_section("Contacts group") if self.selectedGroup: choices = [(self.selectedGroup, self.selectedGroup.get_name())] else: choices = [] self.group_config = config.add_item("Group", "combo", config_name = "selectedGroup", initial_value_callback = lambda item: self.selectedGroup, choices = choices, ) def is_configured (self, isSource, isTwoWay): if not _GoogleBase.is_configured(self, isSource, isTwoWay): return False if self.selectedGroup == None: return False return True class _GoogleContactGroup: def __init__(self, name, uri): self.uri = uri self.name = name @classmethod def from_google_format(cls, group): uri = group.id.text name = group.title.text return cls(name, uri) def __eq__(self, other): if not isinstance(other, _GoogleContactGroup): return False if other is None: return False else: return self.get_uri() == other.get_uri() def get_uri(self): return self.uri def get_name(self): return self.name def get_feed_link(self): return self.get_uri() class _GoogleDocument: def __init__(self, doc): self.id = doc.GetSelfLink().href #raw text version link self.raw = doc.content.src #edit link self.link = doc.GetAlternateLink().href self.title = doc.title.text.encode('UTF-8') self.authorName = doc.author[0].name.text self.authorEmail = doc.author[0].email.text self.type = doc.category[0].label self.editLink = doc.GetEditLink().href self.updated = convert_madness_to_datetime(doc.updated.text) self.docid = self.get_document_id(self.link) # Parses the document id out of the alternate link url, the atom feed # doesn't actually provide the document id. Need it for downloading in # different formats @staticmethod def get_document_id(LUID): parsed_url = urlparse.urlparse(LUID) url_params = parsed_url[4] document_id = url_params.split('=')[1] return document_id def __str__(self): return "%s:%s by %s (modified:%s) (id:%s)" % (self.type,self.title,self.authorName,self.updated,self.docid) class DocumentsSink(_GoogleBase, DataProvider.DataSink): """ Contacts GData provider See: http://code.google.com/p/gdatacopier/source/browse/trunk/python/gdatacopier.py """ _name_ = _("Google Documents") _description_ = _("Synchronize your Google Documents") _category_ = conduit.dataproviders.CATEGORY_OFFICE _module_type_ = "sink" _out_type_ = "contact" _icon_ = "applications-office" SUPPORTED_DOCUMENTS = ('DOC','ODT','SWX','TXT','RTF','HTM','HTML') SUPPORTED_SPREADSHEETS = ('ODS','XLS','CSV','TSV') SUPPORTED_PRESENTATIONS = ('PPT','PPS') TYPE_DOCUMENT = 'document' TYPE_SPREADSHEET = 'spreadsheet' TYPE_PRESENTATION = 'presentation' def __init__(self, *args): DataProvider.DataSink.__init__(self) _GoogleBase.__init__(self,gdata.docs.service.DocsService()) self.update_configuration( documentFormat = 'ODT', spreadsheetFormat = 'ODS', presentationFormat = 'PPT', ) self._docs = {} def _upload_document(self, f): name,ext = f.get_filename_and_extension() ext = ext[1:].upper() ms = gdata.MediaSource( file_path=f.get_local_uri(), content_type=gdata.docs.service.SUPPORTED_FILETYPES[ext]) #upload using the appropriate service if ext in self.SUPPORTED_DOCUMENTS: entry = self.service.UploadDocument(ms,name) elif ext in self.SUPPORTED_SPREADSHEETS: entry = self.service.UploadSpreadsheet(ms,name) elif ext in self.SUPPORTED_PRESENTATIONS: entry = self.service.UploadPresentation(ms,name) else: log.info("Unknown document format") return None return entry.GetSelfLink().href def _replace_document(self, LUID, f): # Doesnt support updating easily, trash the old one, and make a new one # http://code.google.com/p/gdata-issues/issues/detail?id=277 #self.delete(LUID) #upload the file #pf = self._get_proxyfile( # self._upload_document(f)) #if pf: # return pf.get_rid() #raise Exceptions.SynchronizeError("Error Uploading") # The follwing says one can replace like this # http://code.google.com/p/goofs/source/browse/trunk/goofs/src/goofs/backend.py#197 name,ext = f.get_filename_and_extension() ext = ext[1:].upper() ms = gdata.MediaSource( file_path=f.get_local_uri(), content_type=gdata.docs.service.SUPPORTED_FILETYPES[ext]) doc = self.service.Get(LUID) doc = self.service.Put( doc, doc.GetEditLink().href, media_source=ms, extra_headers = {'Slug':name}) pf = self._get_proxyfile(doc.GetSelfLink().href) if pf: return pf.get_rid() raise Exceptions.SynchronizeError("Error Replacing") def _get_all_documents(self): docs = {} feed = self.service.GetDocumentListFeed() if feed.entry: for xmldoc in feed.entry: docs[xmldoc.GetSelfLink().href] = _GoogleDocument(xmldoc) return docs def _get_document(self, LUID): if not LUID: return None #try cached doc first if LUID in self._docs: return self._docs[LUID] #get the gdata contact from google try: xmldoc = self.service.GetDocumentListEntry(LUID) except gdata.service.RequestError: return None return _GoogleDocument(xmldoc) def _get_proxyfile(self, LUID): if LUID: gdoc = self._get_document(LUID) if gdoc: f = File.ProxyFile( URI=gdoc.raw, name=gdoc.title, modified=gdoc.updated, size=None) f.set_UID(LUID) return f return None def _download_doc(self, googleDoc): docid = googleDoc.docid #print self.service.server #return self.service.debug = True if googleDoc.type in ("document","presentation"): format = "pdf" #https://docs.google.com/MiscCommands?command=saveasdoc&exportformat=%s&docID=%s resp = atom.service.HttpRequest( service=self.service, operation='GET', data=None, uri='/MiscCommands', extra_headers={'Authorization':self.service._GetAuthToken()}, url_params={'command':'saveasdoc','exportformat':format,'docID':docid}, escape_params=True, content_type='application/atom+xml') elif False:#NOT WORKING googleDoc.type == "spreadsheet": format = "xls" #https://spreadsheets.google.com/ccc?output=%s&key=%s #http://spreadsheets.google.com/fm?key=%s&fmcmd=4&hl=en #self.service.server = "spreadsheets.google.com" resp = atom.service.HttpRequest( service=self.service, operation='GET', data=None, uri='/ccc', extra_headers={'Authorization':self.service._GetAuthToken()}, url_params={'output':format,'key':docid}, escape_params=True, content_type='application/atom+xml') else: log.warn("Unknown format") return None path = "/home/john/Desktop/%s.%s" % (docid, format) file_handle = open(path, 'wb') file_handle.write(resp.read()) file_handle.close() return path def refresh(self): DataProvider.DataSink.refresh(self) self._login() if not self.loggedIn: raise Exceptions.RefreshError("Could not log in") def get_all(self): self._docs = self._get_all_documents() return self._docs.keys() def get(self, LUID): pass def put(self, f, overwrite, LUID=None): DataProvider.DataSink.put(self, f, overwrite, LUID) #Check if we have already uploaded the document if LUID != None: gdoc = self._get_document(LUID) #check if a doc exists at that UID if gdoc != None: if overwrite == True: #replace the document return self._replace_document(LUID, f) else: #Only upload the doc if it is newer than the Remote one remoteFile = self._get_proxyfile(LUID) #compare based on mtime comp = f.compare(remoteFile) log.debug("Compared %s with %s to check if they are the same (mtime). Result = %s" % (f.get_filename(),remoteFile.get_filename(),comp)) if comp != conduit.datatypes.COMPARISON_EQUAL: raise Exceptions.SynchronizeConflictError(comp, photo, remoteFile) else: return conduit.datatypes.Rid(uid=LUID) log.debug("Uploading Document") #upload the file pf = self._get_proxyfile( self._upload_document(f)) if pf: return pf.get_rid() raise Exceptions.SynchronizeError("Error Uploading") def delete(self, LUID): DataProvider.DataSink.delete(self, LUID) gdoc = self._get_document(LUID) if gdoc: self.service.Delete(gdoc.editLink) return True return False def config_setup(self, config): username_config, password_config = _GoogleBase.config_setup(self, config) #FIXME: It seems this is disabled in the old code #config.add_section("Downloaded document format") #config.add_item("Documents", "combo", config_name = "documentFormat", # choices = self.SUPPORTED_DOCUMENTS) #config.add_item("Spreadsheets", "combo", config_name = "spreadsheetFormat", # choices = self.SUPPORTED_SPREADSHEETS) #config.add_item("Presentations", "combo", config_name = "presentationFormat", # choices = self.SUPPORTED_PRESENTATIONS) class VideoUploadInfo: """ Upload information container, this way we can add info and keep the _upload_info method on the VideoSink retain its API Default category for videos is People/Blogs (for lack of a better general category). Default name and description are placeholders, or the generated XML is invalid as the corresponding elements automatically self-close. Default keyword is "miscellaneous" as the upload fails if no keywords are specified. """ def __init__ (self, url, mimeType, name=None, keywords=None, description=None, category=None): self.url = url self.mimeType = mimeType self.name = name or _("Unknown") self.keywords = keywords or (_("miscellaneous"),) self.description = description or _("No description.") self.category = category or "People" # Note: don't translate this; it's an identifier class YouTubeTwoWay(_GoogleBase, DataProvider.TwoWay): """ Downloads YouTube videos using the gdata API. Based on youtube client from : Philippe Normand (phil at base-art dot net) http://base-art.net/Articles/87/ """ _name_ = _("YouTube") _description_ = _("Synchronize data from YouTube") _category_ = conduit.dataproviders.CATEGORY_MEDIA _module_type_ = "twoway" _in_type_ = "file/video" _out_type_ = "file/video" _icon_ = "youtube" USERS_FEED = "http://gdata.youtube.com/feeds/users" STD_FEEDS = "http://gdata.youtube.com/feeds/standardfeeds" VIDEO_NAME_RE = re.compile(r', "t": "([^"]+)"') #From: http://code.google.com/apis/youtube/dashboard/ UPLOAD_CLIENT_ID="ytapi-ConduitProject-Conduit-e14hdhdm-0" UPLOAD_DEVELOPER_KEY="AI39si6wJ3VA_UWZCWeuA-wmJEpEhGbE3ZxCOZq89JJFy5CpSkFOq8gdZluNvBAM6DW8m7AhliSYPLyfEPJx6XphBq3vOBHuzQ" UPLOAD_URL="http://uploads.gdata.youtube.com/feeds/api/users/%(username)s/uploads" def __init__(self, *args): youtube_service = gdata.youtube.service.YouTubeService() youtube_service.client_id = self.UPLOAD_CLIENT_ID youtube_service.developer_key = self.UPLOAD_DEVELOPER_KEY DataProvider.TwoWay.__init__(self) _GoogleBase.__init__(self,youtube_service) self.entries = None self.update_configuration( max_downloads = 0, filter_type = 0, #(0 = mostviewed, 1 = toprated, 2 = user upload, 3 = user favorites) ) def config_setup(self, config): username_config, password_config = _GoogleBase.config_setup(self, config) config.add_section("Download videos") config.add_item(None, "radio", config_name = "filter_type", choices = ((0, "Most viewed"), (1, "Top rated"), (2, "User uploaded"), (3, "User favorites"))) config.add_item("Limit downloads", "spin", config_name = "max_downloads", minimum = 1, disable_check = True, disabled_value = 0, enabled = self.max_downloads > 0) def config_cancel(self, config): config['max_downloads'].enabled = (self.max_downloads > 0) def _get_video_info (self, id): if self.entries.has_key(id): return self.entries[id] else: return None def _extract_video_id (self, uri): return uri.split ("/").pop () def _do_login(self): # The YouTube login URL is slightly different to the normal Google one self.service.ClientLogin(self.username, self.password, auth_service_url="https://www.google.com/youtube/accounts/ClientLogin") def _upload_video (self, uploadInfo): try: self.gvideo = gdata.youtube.YouTubeVideoEntry() self.gvideo.media = gdata.media.Group( title = gdata.media.Title(text=uploadInfo.name), description = gdata.media.Description(text=uploadInfo.description), category = gdata.media.Category(text=uploadInfo.category), keywords = gdata.media.Keywords(text=','.join(uploadInfo.keywords))) gvideo = self.service.InsertVideoEntry( self.gvideo, uploadInfo.url) return Rid(uid=self._extract_video_id(gvideo.id.text)) except Exception, e: raise Exceptions.SyncronizeError("YouTube Upload Error.") def _replace_video (self, LUID, uploadInfo): try: self.gvideo = self.service.GetYouTubeVideoEntry(video_id=LUID) self.gvideo.media = gdata.media.Group( title = gdata.media.Title(text=uploadInfo.name), description = gdata.media.Description(text=uploadInfo.description), category = gdata.media.Category(text=uploadInfo.category), keywords = gdata.media.Keywords(text=','.join(uploadInfo.keywords))) gvideo = self.service.UpdateVideoEntry(self.gvideo) return Rid(uid=self._extract_video_id(gvideo.id.text)) except Exception, e: raise Exceptions.SyncronizeError("YouTube Update Error.") def refresh(self): DataProvider.TwoWay.refresh(self) self.entries = {} try: if self.filter_type == 0: videos = self._most_viewed () elif self.filter_type == 1: videos = self._top_rated () elif self.filter_type == 2: videos = self._videos_upload_by (self.username) else: videos = self._favorite_videos (self.username) for video in videos: self.entries[self._extract_video_id(video.id.text)] = video.link[0].href except Exception, err: log.debug("Error getting/parsing feed (%s)" % err) raise Exceptions.RefreshError def get_all(self): return self.entries.keys() def get(self, LUID): DataProvider.TwoWay.get(self, LUID) url = self._get_flv_video_url(self.entries[LUID]) log.debug("Title: '%s', Url: '%s'"%(LUID, url)) f = Video.Video(URI=url) f.set_open_URI(url) f.set_UID(LUID) f.force_new_filename (str(LUID) + ".flv") return f def put(self, video, overwrite, LUID=None): """ Based off the ImageTwoWay put method. Accepts a VFS file. Must be made local. I also store a MD5 of the video's URI to check for duplicates """ DataProvider.TwoWay.put(self, video, overwrite, LUID) self._login() originalName = video.get_filename() #Gets the local URI (/foo/bar). If this is a remote file then #it is first transferred to the local filesystem videoURI = video.get_local_uri() mimeType = video.get_mimetype() keywords = video.get_tags () description = video.get_description() uploadInfo = VideoUploadInfo(videoURI, mimeType, originalName, keywords, description) #Check if we have already uploaded the video if LUID != None: url = self._get_video_info(LUID) #Check if a video exists at that UID if url != None: if overwrite == True: #Replace the video return self._replace_video(LUID, uploadInfo) else: #We can't do an equality test by size, since YouTube reencodes videos #on upload, so we'll just do nothing. return conduit.datatypes.Rid(uid=LUID) log.debug("Uploading video URI = %s, Mimetype = %s, Original Name = %s" % (videoURI, mimeType, originalName)) #Upload the file return self._upload_video (uploadInfo) def finish(self, aborted, error, conflict): DataProvider.TwoWay.finish(self) self.entries = None def get_UID(self): return Utils.get_user_string() def _format_url (self, url): if self.max_downloads > 0: url = ("%s?max-results=%d" % (url, self.max_downloads)) return url def _request(self, feed, *params): service = gdata.service.GDataService(server="gdata.youtube.com") return service.Get(feed % params) def _top_rated(self): url = self._format_url ("%s/top_rated" % YouTubeTwoWay.STD_FEEDS) return self._request(url).entry def _most_viewed(self): url = self._format_url ("%s/most_viewed" % YouTubeTwoWay.STD_FEEDS) return self._request(url).entry def _videos_upload_by(self, username): url = self._format_url ("%s/%s/uploads" % (YouTubeTwoWay.USERS_FEED, username)) return self._request(url).entry def _favorite_videos(self, username): url = self._format_url ("%s/%s/favorites" % (YouTubeTwoWay.USERS_FEED, username)) return self._request(url).entry # Generic extract step def _get_flv_video_url (self, url): import urllib2 flv_url = '' doc = urllib2.urlopen(url) data = doc.read() # extract video name match = YouTubeTwoWay.VIDEO_NAME_RE.search(data) if match is not None: video_name = match.group(1) # extract video id url_splited = url.split("watch?v=") video_id = url_splited[1] flv_url = "http://www.youtube.com/get_video?video_id=%s&t=%s" flv_url = flv_url % (video_id, video_name) log.debug ("FLV URL %s" % flv_url) return flv_url conduit-0.3.17/conduit/modules/GoogleModule/Makefile.am0000644000175000017500000000022511321742704017723 00000000000000conduit_handlersdir = $(libdir)/conduit/modules/GoogleModule conduit_handlers_PYTHON = __init__.py GoogleModule.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/modules/GoogleModule/Makefile.in0000644000175000017500000003246211326116727017751 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/modules/GoogleModule DIST_COMMON = $(conduit_handlers_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduit_handlersdir)" py_compile = $(top_srcdir)/py-compile DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ conduit_handlersdir = $(libdir)/conduit/modules/GoogleModule conduit_handlers_PYTHON = __init__.py GoogleModule.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/modules/GoogleModule/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/modules/GoogleModule/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduit_handlersPYTHON: $(conduit_handlers_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduit_handlersdir)" || $(MKDIR_P) "$(DESTDIR)$(conduit_handlersdir)" @list='$(conduit_handlers_PYTHON)'; dlist=; list2=; test -n "$(conduit_handlersdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduit_handlersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduit_handlersdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduit_handlersdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduit_handlersdir)" $$dlist; \ fi; \ else :; fi uninstall-conduit_handlersPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_handlers_PYTHON)'; test -n "$(conduit_handlersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$fileso tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(conduit_handlersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-conduit_handlersPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-conduit_handlersPYTHON .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-conduit_handlersPYTHON \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am \ uninstall-conduit_handlersPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/modules/GoogleModule/__init__.py0000644000175000017500000000000011214122722017760 00000000000000conduit-0.3.17/conduit/modules/ShutterflyModule/0000777000175000017500000000000011326117103016703 500000000000000conduit-0.3.17/conduit/modules/ShutterflyModule/ShutterflyModule.py0000644000175000017500000000571311214122722022515 00000000000000""" Shutterfly Data Sink """ import logging log = logging.getLogger("modules.Shutterfly") import conduit import conduit.utils as Utils from conduit.datatypes import Rid import conduit.dataproviders.Image as Image import conduit.Exceptions as Exceptions import conduit.datatypes.Photo as Photo Utils.dataprovider_add_dir_to_path(__file__, "shutterfly") from shutterfly import Shutterfly from gettext import gettext as _ MODULES = { "ShutterflySink" : {"type" : "dataprovider"}, } class ShutterflySink(Image.ImageSink): _name_ = _("Shutterfly") _description_ = _("Synchronize your Shutterfly photos") _module_type_ = "sink" _icon_ = "shutterfly" _configurable_ = True def __init__(self, *args): Image.ImageSink.__init__(self) self.update_configuration( username = "", password = "", album = "" ) self.sapi = None self.salbum = None self.sphotos = None def _get_raw_photo_url(self, photoInfo): return photoInfo.url def _get_photo_info(self, id): if self.sphotos.has_key(id): return self.sphotos[id] else: return None def _get_photo_formats(self): return ("image/jpeg", ) def refresh(self): Image.ImageSink.refresh(self) self.sapi = Shutterfly(self.username, self.password) albums = self.sapi.getAlbums() if not albums.has_key(self.album): self.salbum = self.sapi.createAlbum(self.album) else: self.salbum = albums[self.album] self.sphotos = self.salbum.getPhotos() def get_all(self): return self.sphotos.keys() def get(self, LUID): #Image.ImageSink.get(self, LUID) sphoto = self.sphotos[LUID] f = Photo.Photo(URI=sphoto.url) f.set_open_URI(sphoto.url) f.set_UID(LUID) return f def delete(self, LUID): """ Delete a photo by ID Deleting a photo invalidates album length and photo index values. We must reload the photos (or do something else...) """ if not self.sphotos.has_key(LUID): log.warn("Photo does not exist") return try: self.salbum.deletePhoto(self.sphotos[LUID]) except Exception, e: raise Exceptions.SyncronizeError("Shutterfly Delete Error - Try Again.") self.sphotos = self.salbum.getPhotos() def _upload_photo(self, uploadInfo): """ Upload to album """ try: ret = self.salbum.uploadPhoto(uploadInfo.url, uploadInfo.mimeType, uploadInfo.name) return Rid(ret.id) except Exception, e: raise Exceptions.SyncronizeError("Shutterfly Upload Error.") def config_setup(self, config): config.add_section('Account details') config.add_item('Username', 'text', config_name = 'username', ) config.add_item('Password', 'text', config_name = 'password', password = True ) config.add_section('Saved photo settings') config.add_item('Album', 'text', config_name = 'album', ) def is_configured(self, isSource, isTwoWay): if len(self.username) < 1: return False if len(self.password) < 1: return False if len(self.album) < 1: return False return True def get_UID(self): return self.username+":"+self.album conduit-0.3.17/conduit/modules/ShutterflyModule/shutterfly/0000777000175000017500000000000011326117103021114 500000000000000conduit-0.3.17/conduit/modules/ShutterflyModule/shutterfly/shutterfly.py0000644000175000017500000003600311172176633023631 00000000000000## Lots of code based on code of Pycasaweb by: ## Copyright (C) 2006 manatlan manatlan[at]gmail(dot)com ## ## Changes to use new gdata api by: ## Copyright (C) 2007 thomas.vanmachelen@gmail.com ## ## Changes to implement api interface to Shutterfly by: ## Copyright (C) 2007 jasl8r@gmail.com ## ## 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; version 2 only. ## ## 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. ## """ Shutterfly data API """ import urllib, urllib2 import cookielib from urlparse import urlparse from cgi import parse_qs import re import time import os from gettext import gettext as _ FORMAT_STRING = _("%Y-%m-%d %H:%M:%S") PERPAGE = 80 # Shutterfly shows 80 pics per small page ############################################################################### # Helper functions ############################################################################### def utf8(v): """ ensure to get 'v' in an UTF8 encoding (respect None) """ if v != None: if type(v) != unicode: v = unicode(v, "utf_8", "replace") v = v.encode("utf_8") return v def mkRequest(url, data=None, headers={}): """ create a urllib2.Request """ if data: data = urllib.urlencode(data) return urllib2.Request(url, data, headers) def sflyCookie(name, data): if type(data) == dict: value = '' for item in data: value += item + ':' + str(data[item]) + '&' value = value[:-1] else: value = data return cookielib.Cookie(version=0, name=name, value=value, port=None, port_specified=False, domain='.shutterfly.com', domain_specified=True, domain_initial_dot=True, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={}, rfc2109=False) ############################################################################### # Shutterfly exception processor ############################################################################### class ShutterflyException(Exception): """ Web exception """ pass def encode_multipart_formdata(fields, files): """ fields is a sequence of (name, value) elements for regular form fields. files is a sequence of (name, filename, value) elements for data to be uploaded as files Return (content_type, body) ready for httplib.HTTP instance """ #mimetools._prefix = "some-random-string-you-like" # vincent patch : http://mail.python.org/pipermail/python-list/2006-December/420360.html BOUNDARY = "END_OF_PART" #mimetools.choose_boundary() CRLF = '\r\n' L = [] for (key, value) in fields: L.append('--' + BOUNDARY) L.append('Content-Disposition: form-data; name="%s"' % key) L.append('') L.append(value) for (filename, mimeType, value) in files: L.append('--' + BOUNDARY) L.append('Content-Disposition: form-data; name="Image.Data"; filename="%s"' % (filename)) L.append('Content-Type: %s' % mimeType) L.append('') L.append(value) L.append('--' + BOUNDARY + '--') L.append('') body = CRLF.join(L) content_type = 'multipart/form-data; boundary="%s"' % BOUNDARY return content_type, body ############################################################################### # Shutterfly error processor ############################################################################### class ShutterflyHTTPErrorProcessor(urllib2.HTTPErrorProcessor): def http_response(self, request, response): return urllib2.HTTPErrorProcessor.http_response(self, request, response) https_response = http_response ############################################################################### # Shutterfly api (URL encoder) ############################################################################### class SFApi: accounturl = "http://www.shutterfly.com/account/acc_info.jsp" entryurl = "http://www.shutterfly.com/signin/viewSignin.sfly" loginurl = "https://www.shutterfly.com/signin/signin.sfly" albumurl = "http://www.shutterfly.com/action/lightbox/server?action=aCount,aPage&pageNumber=%(page)s&activeAlbumIdx=0&ft=1&mode=albums&view=albums&singleSelect=false&ts=0&sscf=1" addalbumurl = "http://www.shutterfly.com/view/album_create.jsp" photourl = "http://www.shutterfly.com/action/lightbox/server?action=pFrame,pView,pCount,pPage&albumId=%(albumid)s&pageNumber=%(page)s&pictureSrc=A&ft=1&mode=pictures&view=small&singleSelect=false&ts=0&sscf=1" delphotourl = "http://www.shutterfly.com/action/lightbox/server?action=deletePictures,pCount,pPage&albumId=%(albumid)s&pageNumber=%(page)s&pictureSrc=A&ft=1&mode=pictures&view=small&singleSelect=false&ts=0&sscf=1" uploadurl = "http://www.shutterfly.com/add/upload_browse.jsp" uploadimageurl = "http://up1.shutterfly.com/UploadImage" def _getaccounturl(): return SFApi.accounturl def _getentryurl(): return SFApi.entryurl def _getloginurl(): return SFApi.loginurl def _getalbumurlbypage(page): return SFApi.albumurl % {"page" : page} def _getaddalbumurl(): return SFApi.addalbumurl def _getphotourlbyid(aid, page): return SFApi.photourl % {"albumid" : aid, "page" : page} def _getdelphotourlbyid(aid, page): return SFApi.delphotourl % {"albumid" : aid, "page" : page} def _getuploadurl(): return SFApi.uploadurl def _getuploadimageurl(): return SFApi.uploadimageurl getaccounturl = staticmethod(_getaccounturl) getentryurl = staticmethod(_getentryurl) getloginurl = staticmethod(_getloginurl) getalbumurlbypage = staticmethod(_getalbumurlbypage) getaddalbumurl = staticmethod(_getaddalbumurl) getphotourlbyid = staticmethod(_getphotourlbyid) getdelphotourlbyid = staticmethod(_getdelphotourlbyid) getuploadurl = staticmethod(_getuploadurl) getuploadimageurl = staticmethod(_getuploadimageurl) ############################################################################### # Shutterfly Response Handler ############################################################################### class ShutterflyCookieProcessor(urllib2.HTTPCookieProcessor, urllib2.HTTPRedirectHandler): """ Kill form header stuff on a 302 redirect, getting rid of just content-length does not appear to help. Maybe just need to delete content-type but for now I delete the whole header, meh. Bug: 1401 - http://bugs.python.org/issue1401 """ def http_error_302(self, req, fp, code, msg, headers): for key in req.headers.keys(): if key.lower() == 'content-length': req.headers = {} result = urllib2.HTTPRedirectHandler.http_error_301( self, req, fp, code, msg, headers) return result ############################################################################### # Shutterfly connection object class ############################################################################### class ShutterflyConnection(object): __user = None __fid = None __cj = None __opener = None user = property(lambda s: s.__user) fid = property(lambda s: s.__fid) opener = property(lambda s: s.__opener) def __init__(self, user, password): """ Check if the user is already connected Connect to the shutterly entrance page to aquire a FID from the response url Login using credentials and aquired FID """ self.__cj = cookielib.CookieJar() self.__opener = urllib2.build_opener(ShutterflyCookieProcessor(self.__cj)) urllib2.install_opener(self.opener) user = utf8(user) password = utf8(password) self.__user = user request = mkRequest(SFApi.getaccounturl()) response = self.opener.open(request) buf = response.read() response.close() if buf.find(user) > 0: # Found the specified user logged in. return request = mkRequest(SFApi.getentryurl()) response = self.opener.open(request) self.__fid = parse_qs(urlparse(response.geturl())[4])['fid'][0] headers = {"Content-type" : "application/x-www-form-urlencoded", } data = {"userName" : user, "password" : password, "_rememberUserName" : "off", "fid" : self.__fid, } request = mkRequest(SFApi.getloginurl(), data, headers) response = self.opener.open(request) buf = response.read() response.close() if buf.find("return.sfly") == -1: raise ShutterflyException("Unable to connect (wrong credentials?)") def getfid(self): return self.fid def setCookie(self, cookie): self.__cj.set_cookie(cookie) ############################################################################### # Shutterfly api ############################################################################### class Shutterfly: def __init__(self, user, password): """ Create a Shutterfly instance """ self.__sc = ShutterflyConnection(user, password) def getAlbums(self): """ Get a dictionary of available Shutterfly albums on this account """ request = mkRequest(SFApi.getalbumurlbypage(1)) response = self.__sc.opener.open(request) buf = response.read() response.close() if buf.find("var status='failure'") > -1: raise ShutterflyException("Find albums page not retrieved (url changed?)") if buf.find("var status='notLoggedIn'") > -1: raise ShutterflyException("No longer logged in (timeout, logged in elsewhere?)") page = 1 count = int(re.search("totalPics\s*=\s*(\d+)", buf).group(1)) perpage = int(re.search("picsThisPage\s*=\s*(\d+)", buf).group(1)) l = {} while count > 0: details = re.findall("aList\[(\d+)\]='(.*)';\ntList\[\d+\]='(.*)';\ncList\[\d+\]='(.*)';", buf) for items in details: alb = ShutterflyAlbum(self.__sc, int(items[0]), items[1], items[2], int(items[3])) l[alb.name] = alb count -= perpage page += 1 if count > 0: request = mkRequest(SFApi.getalbumurlbypage(page)) response = self.__sc.opener.open(request) buf = response.read() response.close() return l def createAlbum(self, name, description=""): """ Create an album on Shutterfly and return the ShutterflyAlbum instance Need to retrieve AuthID before uploading (adding albums) """ name = utf8(name) headers = {"Content-type" : "application/x-www-form-urlencoded", } data = {"albumTitle" : name, "albumDesc" : description, "createAlbum" : "1", } request = mkRequest(SFApi.getaddalbumurl(), data, headers) response = self.__sc.opener.open(request) buf = response.read() response.close() albums = self.getAlbums() return albums[name] ############################################################################### # Shutterfly album object ############################################################################### class ShutterflyAlbum(object): __sc = None __index = None __id = None __name = None __length = None index = property(lambda s: s.__index) id = property(lambda s: s.__id) name = property(lambda s: s.__name) length = property(lambda s: s.__length) def __init__(self, sc, index, id, name, length): """ Should only be called by Shutterfly """ self.__sc = sc self.__index = index self.__id = utf8(id) self.__name = name self.__length = length def getPhotos(self): """ Get a dictionary of available photos in this album """ request = mkRequest(SFApi.getphotourlbyid(self.__id, 1)) response = self.__sc.opener.open(request) buf = response.read() response.close() if buf.find("var status='failure'") > -1: raise ShutterflyException("List photos page not retrieved (url changed?)") if buf.find("var status='notLoggedIn'") > -1: raise ShutterflyException("No longer logged in (timeout, logged in elsewhere?)") page = 1 count = int(re.search("totalPics\s*=\s*(\d+)", buf).group(1)) perpage = int(re.search("picsThisPage\s*=\s*(\d+)", buf).group(1)) l = {} while count > 0: details = re.findall("pList\[(\d+)\]='(.*)';\ntList\[\d+\]='(.*)';", buf) for items in details: photo = ShutterflyPhoto(int(items[0]), page-1, items[1], items[2]) l[photo.id] = photo count -= perpage page += 1 if count > 0: request = mkRequest(SFApi.getphotourlbyid(self.__id, page)) response = self.__sc.opener.open(request) buf = response.read() response.close() return l def uploadPhoto(self, filename, mimeType, name, description = ""): """ Upload a photo to this album """ filename = utf8(filename) if os.path.isfile(filename): request = mkRequest(SFApi.getuploadurl()) response = self.__sc.opener.open(request) buf = response.read() response.close() data = [] for item in ['ProtocolVersion', 'RequestType', 'AuthenticationID', 'PartnerID', 'PartnerSubID', 'previewURL', 'redirect', 'doNotDisplayFormAfterUpload']: data.append((item, re.search('name="'+item+'" value="(.*)"', buf).group(1))) data.append(('Image.AlbumID', self.__id)) data.append(('Image.AlbumName', self.__name)) data.append(('Image.UploadTime', time.strftime(FORMAT_STRING))) content_type, body = encode_multipart_formdata(data, [(name, mimeType, open(filename, "rb").read())]) headers = {"Content-Type" : content_type, "Content-Length" : str(len(body)), } request = urllib2.Request(SFApi.getuploadimageurl(), body, headers) response = self.__sc.opener.open(request) buf = response.read() response.close() if response.geturl().find("Success=1") == -1: raise ShutterflyException("Could not add photo") photoid = re.search('name="vcidList" value="(.*)"', buf).group(1) # Shutterfly started lying about the photo id. Need to watch this value # Maybe just find the new photo by running another get_all ? photoid = photoid[:34] + '2' + photoid[35:] self.__length += 1 return ShutterflyPhoto(self.length, 0, photoid, name) else: raise ShutterflyException("File does not exist") def deletePhoto(self, photo): cdata = {'mode' : 'pictures', 'album' : self.index, 'view' : 'small', 'name' : self.id, 'selected' : photo.index + PERPAGE * photo.page, 'albPg' : 0, 'qty' : self.length, 'fso' : 201, 'pView' : 'small', 'pg' : photo.page, 'selSet' : '1'} cookie = sflyCookie('sflyImg', cdata) self.__sc.setCookie(cookie) request = urllib2.Request(SFApi.getdelphotourlbyid(self.id, 1)) response = self.__sc.opener.open(request) buf = response.read() response.close() if buf.find("failure") > -1: raise ShutterflyException("Did not successfully delete photo") def __repr__(self): return "" % (self.__id, self.__name) class ShutterflyPhoto(object): __index = None __page = None __id = None __url = None __title = None index = property(lambda s: s.__index) page = property(lambda s: s.__page) id = property(lambda s: s.__id) url = property(lambda s: s.__url) title = property(lambda s: s.__title) def __init__(self, index, page, id, title): self.__index = index # monotonically incrementing index (unique to page) self.__page = page # album page for photo self.__id = utf8(id) # unique photo id self.__url = "http://im1.shutterfly.com/procserv/" + id[:35] + '7' + id[36:] self.__title = title # photo title conduit-0.3.17/conduit/modules/ShutterflyModule/shutterfly/Makefile.am0000644000175000017500000000022611172176633023100 00000000000000conduit_handlersdir = $(libdir)/conduit/modules/ShutterflyModule/shutterfly conduit_handlers_PYTHON = shutterfly.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/modules/ShutterflyModule/shutterfly/Makefile.in0000644000175000017500000003254011326116727023114 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/modules/ShutterflyModule/shutterfly DIST_COMMON = $(conduit_handlers_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduit_handlersdir)" py_compile = $(top_srcdir)/py-compile DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ conduit_handlersdir = $(libdir)/conduit/modules/ShutterflyModule/shutterfly conduit_handlers_PYTHON = shutterfly.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/modules/ShutterflyModule/shutterfly/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/modules/ShutterflyModule/shutterfly/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduit_handlersPYTHON: $(conduit_handlers_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduit_handlersdir)" || $(MKDIR_P) "$(DESTDIR)$(conduit_handlersdir)" @list='$(conduit_handlers_PYTHON)'; dlist=; list2=; test -n "$(conduit_handlersdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduit_handlersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduit_handlersdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduit_handlersdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduit_handlersdir)" $$dlist; \ fi; \ else :; fi uninstall-conduit_handlersPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_handlers_PYTHON)'; test -n "$(conduit_handlersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$fileso tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(conduit_handlersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-conduit_handlersPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-conduit_handlersPYTHON .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-conduit_handlersPYTHON \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am \ uninstall-conduit_handlersPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/modules/ShutterflyModule/Makefile.am0000644000175000017500000000024711214122722020655 00000000000000SUBDIRS = shutterfly conduit_handlersdir = $(libdir)/conduit/modules/ShutterflyModule conduit_handlers_PYTHON = ShutterflyModule.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/modules/ShutterflyModule/Makefile.in0000644000175000017500000005061611326116727020707 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/modules/ShutterflyModule DIST_COMMON = $(conduit_handlers_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduit_handlersdir)" py_compile = $(top_srcdir)/py-compile RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = shutterfly conduit_handlersdir = $(libdir)/conduit/modules/ShutterflyModule conduit_handlers_PYTHON = ShutterflyModule.py all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/modules/ShutterflyModule/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/modules/ShutterflyModule/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduit_handlersPYTHON: $(conduit_handlers_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduit_handlersdir)" || $(MKDIR_P) "$(DESTDIR)$(conduit_handlersdir)" @list='$(conduit_handlers_PYTHON)'; dlist=; list2=; test -n "$(conduit_handlersdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduit_handlersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduit_handlersdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduit_handlersdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduit_handlersdir)" $$dlist; \ fi; \ else :; fi uninstall-conduit_handlersPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_handlers_PYTHON)'; test -n "$(conduit_handlersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$fileso # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(conduit_handlersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-conduit_handlersPYTHON install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-conduit_handlersPYTHON .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-local \ ctags ctags-recursive distclean distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-conduit_handlersPYTHON install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-conduit_handlersPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/modules/PhotoConverterModule.py0000644000175000017500000001005211172176633020013 00000000000000import logging log = logging.getLogger("modules.PhotoConverter") import conduit import conduit.utils as Utils import conduit.TypeConverter as TypeConverter import conduit.datatypes.File as File import conduit.datatypes.Photo as Photo MODULES = { "PixbufPhotoConverter" : { "type": "converter" } } NO_RESIZE = "None" class PixbufPhotoConverter(TypeConverter.Converter): def __init__(self): self.conversions = { "file/photo,file/photo" : self.transcode, "file,file/photo" : self.file_to_photo } self._image_types = None def _get_pixbuf_capabilities(self): """ Returns a dict mapping image mimetypes to extensions to be used when converting image formats """ if self._image_types == None: import gtk.gdk types = {} for f in gtk.gdk.pixbuf_get_formats(): for t in f["mime_types"]: if f["is_writable"] == True: types[t] = f["extensions"][0] else: types[t] = None self._image_types = types return self._image_types def _convert(self, photo, format, width, height, doResize, doReformat): """ Basically we defer the conversion until as late as possible, or not at all. """ import gtk.gdk pb = photo.get_photo_pixbuf() out_file = photo.to_tempfile() if doResize: try: log.debug("Photo: Scaling to %sx%s" % (width,height)) pb = pb.scale_simple(width,height,gtk.gdk.INTERP_HYPER) except Exception, err: log.debug("Photo: Error scaling photo\n%s" % err) #save to new format. gdk.Pixbuf needs the type argument if doResize or doReformat: log.debug("Photo: Saving photo:%s Format:%s" % (out_file,format)) pb.save(out_file, format) #can safely rename the file here because its defintately a tempfile photo.force_new_file_extension(".%s" % format) def transcode(self, photo, **kwargs): log.info("Transcode Photo: %s" % kwargs) #default format is the current format, and default is no resize formats = kwargs.get("formats",photo.get_mimetype()).split(',') newSize = kwargs.get("size",NO_RESIZE) #resize if necessary if newSize != NO_RESIZE: w,h = photo.get_photo_size() width,height = Utils.get_proportional_resize( desiredW=int(newSize.split('x')[0]), desiredH=int(newSize.split('x')[1]), currentW=int(w), currentH=int(h) ) doResize = True else: width = None height = None doResize = False #check if the photo is in the allowed format, otherwise we must convert it mimeType = photo.get_mimetype() doReformat = False if mimeType not in formats: #convert photo to default format mimeType = kwargs.get("default-format","image/jpeg") doReformat = True #convert the mimetype to the image type for gdk pixbuf save method format = self._get_pixbuf_capabilities()[mimeType] self._convert( photo, format, width, height, doResize, doReformat ) return photo def file_to_photo(self, f, **kwargs): t = f.get_mimetype() if t in self._get_pixbuf_capabilities().keys(): p = Photo.Photo( URI=f._get_text_uri() ) p.set_from_instance(f) return self.transcode(p,**kwargs) else: return None conduit-0.3.17/conduit/modules/FeedModule/0000777000175000017500000000000011326117102015374 500000000000000conduit-0.3.17/conduit/modules/FeedModule/Makefile.am0000644000175000017500000000022111214122722017337 00000000000000conduit_handlersdir = $(libdir)/conduit/modules/FeedModule conduit_handlers_PYTHON = __init__.py FeedModule.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/modules/FeedModule/FeedModule.py0000644000175000017500000001562211321403566017710 00000000000000import random import logging log = logging.getLogger("modules.Feed") import conduit import conduit.utils as Utils import conduit.dataproviders.DataProvider as DataProvider import conduit.Exceptions as Exceptions import conduit.datatypes.File as File import conduit.datatypes.Audio as Audio import conduit.datatypes.Video as Video import conduit.datatypes.Photo as Photo from gettext import gettext as _ try: import feedparser MODULES = { "RSSSource" : { "type": "dataprovider" } } log.info("Module Information: %s" % Utils.get_module_information(feedparser, "__version__")) #work around a bug in feedparser where it incorrectly detects #media enclosures #http://code.google.com/p/feedparser/issues/detail?id=100 if feedparser.__version__ <= '4.1': log.info("Patching feedparser issue #100") def _start_media_content(self, attrsD): context = self._getContext() context.setdefault('media_content', []) context['media_content'].append(attrsD) def _start_media_thumbnail(self, attrsD): context = self._getContext() context.setdefault('media_thumbnail', []) self.push('url', 1) # new context['media_thumbnail'].append(attrsD) def _end_media_thumbnail(self): url = self.pop('url') context = self._getContext() if url != None and len(url.strip()) != 0: if not context['media_thumbnail'][-1].has_key('url'): context['media_thumbnail'][-1]['url'] = url feedparser._FeedParserMixin._start_media_content = _start_media_content feedparser._FeedParserMixin._start_media_thumbnail = _start_media_thumbnail feedparser._FeedParserMixin._end_media_thumbnail = _end_media_thumbnail except ImportError: MODULES = {} log.info("RSS Feed support disabled") class RSSSource(DataProvider.DataSource): _name_ = _("RSS Feed") _description_ = _("Synchronize data from RSS enclosures") _category_ = conduit.dataproviders.CATEGORY_MISC _module_type_ = "source" _in_type_ = "" _out_type_ = "file" _icon_ = "feed" _configurable_ = True def __init__(self, *args): DataProvider.DataSource.__init__(self) self.update_configuration( feedUrl = "", limitNum = 1, limit = False, randomize = False, downloadPhotos = True, downloadAudio = True, downloadVideo = True, ) self._files = {} self._count = 0 def _is_allowed_type(self, mimetype): ok = False if not ok and self.downloadPhotos: ok = Photo.mimetype_is_photo(mimetype) if not ok and self.downloadAudio: ok = Audio.mimetype_is_audio(mimetype) if not ok and self.downloadVideo: ok = Video.mimetype_is_video(mimetype) return ok def _add_file(self, url, title, t): log.debug("Got enclosure %s %s (%s)" % (title,url,t)) if self._is_allowed_type(t): if url not in self._files: self._files[url] = (title,t,self._count) self._count += 1 else: log.debug("Enclosure %s is an illegal type (%s)" % (title,t)) def _get_all_files(self): """ Returns all files in the correct order """ files = self._files.keys() for url, (title,t,count) in self._files.iteritems(): files[count] = url return files def initialize(self): return True def config_setup(self, config): #FIXME: Add Randomize config.add_section(_("Feed details")) config.add_item(_("Feed address"), "text", config_name = 'feedUrl', ) config.add_section(_("Enclosure settings")) limit_config = config.add_item(_("Limit downloaded enclosures"), "check", config_name = 'limit' ) limit_config.connect("value-changed", lambda item, changed, value: limit_spin_config.set_enabled(value) ) limit_spin_config = config.add_item(_("Limit to"), "spin", config_name = 'limitNum', enabled = self.limit, ) random_config = config.add_item(_("Randomize enclosures"), "check", config_name = 'randomize' ) config.add_section(_("Download types")) config.add_item(_("Download audio files"), "check", config_name = "downloadAudio") config.add_item(_("Download video files"), "check", config_name = "downloadVideo") config.add_item(_("Download photo files"), "check", config_name = "downloadPhotos") def refresh(self): DataProvider.DataSource.refresh(self) #url : (title, mimetype, idx) self._files = {} self._count = 0 d = feedparser.parse(self.feedUrl) for entry in d.entries: #check for enclosures first (i.e. podcasts) for enclosure in entry.get('enclosures', ()): self._add_file(enclosure['href'], entry.title, enclosure['type']) #also check for media_content (like flickr) for media in entry.get('media_content', ()): self._add_file(media['url'], entry.title, media['type']) def get_all(self): DataProvider.DataSource.get_all(self) all_files = self._get_all_files() num_files = len(all_files) if self.limit: log.debug("Getting %s/%s files (random: %s)" % (self.limitNum, num_files, self.randomize)) else: log.debug("Getting %s files (random: %s)" % (self.limitNum, self.randomize)) if self.randomize: if self.limit and self.limitNum > 0: lim = self.limitNum files = [] while lim > 0: files.append(all_files.pop(random.randint(0,num_files-1))) lim -= 1 return files else: return all_files else: if self.limit and self.limitNum > 0: return all_files[0:min(self.limitNum, num_files-1)] else: return all_files def get(self, url): DataProvider.DataSource.get(self, url) #Make a file f = File.File(URI=url) f.set_UID(url) f.set_open_URI(url) name, ext = f.get_filename_and_extension() #create the correct filename and retain the original extension try: title,t,idx = self._files[url] f.force_new_filename(title) f.force_new_file_extension(ext) except: log.warn("Error setting filename\n%s" % traceback.format_exc()) return f def finish(self, aborted, error, conflict): DataProvider.DataSource.finish(self) self._files = {} self._count = 0 def get_UID(self): return self.feedUrl conduit-0.3.17/conduit/modules/FeedModule/Makefile.in0000644000175000017500000003245011326116727017375 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/modules/FeedModule DIST_COMMON = $(conduit_handlers_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduit_handlersdir)" py_compile = $(top_srcdir)/py-compile DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ conduit_handlersdir = $(libdir)/conduit/modules/FeedModule conduit_handlers_PYTHON = __init__.py FeedModule.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/modules/FeedModule/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/modules/FeedModule/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduit_handlersPYTHON: $(conduit_handlers_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduit_handlersdir)" || $(MKDIR_P) "$(DESTDIR)$(conduit_handlersdir)" @list='$(conduit_handlers_PYTHON)'; dlist=; list2=; test -n "$(conduit_handlersdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduit_handlersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduit_handlersdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduit_handlersdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduit_handlersdir)" $$dlist; \ fi; \ else :; fi uninstall-conduit_handlersPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_handlers_PYTHON)'; test -n "$(conduit_handlersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$fileso tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(conduit_handlersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-conduit_handlersPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-conduit_handlersPYTHON .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-conduit_handlersPYTHON \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am \ uninstall-conduit_handlersPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/modules/FeedModule/__init__.py0000644000175000017500000000000011214122722017407 00000000000000conduit-0.3.17/conduit/modules/Makefile.am0000644000175000017500000000117311172176633015352 00000000000000SUBDIRS = \ BackpackModule \ BansheeModule \ BoxDotNetModule \ FacebookModule \ FileModule \ FeedModule \ FlickrModule \ FspotModule \ iPodModule \ SmugMugModule \ EvolutionModule \ GoogleModule \ ShutterflyModule \ RhythmboxModule \ N800Module \ NetworkModule \ GConfModule \ ZotoModule \ Firefox3Module conduit_handlersdir = $(libdir)/conduit/modules conduit_handlers_PYTHON = \ __init__.py \ TomboyModule.py \ ConverterModule.py \ PhotoConverterModule.py \ AudioVideoConverterModule.py \ GoogleBookmarksModule.py \ NautilusBookmarksModule.py \ DesktopWallpaperModule.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/modules/SmugMugModule/0000777000175000017500000000000011326117103016116 500000000000000conduit-0.3.17/conduit/modules/SmugMugModule/SmugMugAPI/0000777000175000017500000000000011326117103020034 500000000000000conduit-0.3.17/conduit/modules/SmugMugModule/SmugMugAPI/Makefile.am0000644000175000017500000000022011172176633022012 00000000000000conduit_handlersdir = $(libdir)/conduit/modules/SmugMugModule/SmugMugAPI conduit_handlers_PYTHON = smugmug.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/modules/SmugMugModule/SmugMugAPI/smugmug.py0000644000175000017500000001555711172176633022037 00000000000000# Upload code comes from: # # Copyright (C) 2004 John C. Ruttenberg # # All other calls re-implemented to use REST api # # Copyright (C) 2007 Thomas Van Machelen # # 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. # # A copy of the GNU General Public License should be included at the bottom of # this program text; if not, write to the Free Software Foundation, Inc., 59 # Temple Place, Suite 330, Boston, MA 02111-1307 USA import httplib, mimetypes import urllib, urllib2 from xml.dom.minidom import parseString import os from os import path # conduit's api key API_KEY = "8Od9l5euu0srE81aM0vZlsEHmEFBB9vP" def get_text(x): """ get textual content of the node 'x' """ r="" for i in x.childNodes: if i.nodeType == x.TEXT_NODE: r+=str(i.nodeValue) return r def get_child(element, name): nodes = element.getElementsByTagName(name) if len(nodes) > 0: return element.getElementsByTagName(name)[0] else: return None def get_child_text(element, name): return get_text(get_child(element, name)) def get_attribute(element, name): if element.hasAttribute(name): return str(element.getAttribute(name)) else: return None def filename_get_data(name): f = file(name,"rb") d = f.read() f.close() return d def get_content_type(filename): return mimetypes.guess_type(filename)[0] or 'application/octet-stream' class SmugMugException (Exception): def __init__ (self, code, message): self.code = code self.message = message def get_printable_error (self): return 'Code: %s; Message: %s' % (self.code, self.message) class SmugMug: END_POINT = 'https://api.smugmug.com/hack/rest/1.1.1/?' def __init__(self,account,passwd): self.account = account self.password = passwd self.categories = None self.subcategories = None self.albums = None self.login() def login(self): rsp = self._call_method(method='smugmug.login.withPassword', EmailAddress=self.account, Password=self.password, APIKey=API_KEY) self.session = get_child_text(rsp, 'SessionID') def logout(self): self._call_method(method='smugmug.logout', SessionID=self.session) def get_categories(self): rsp = self._call_method(method='smugmug.categories.get', SessionID=self.session) self.categories = {} for cat in rsp.getElementsByTagName('Category'): self.categories[get_child_text(cat, 'Title')] = get_attribute(cat, 'id') return self.categories def create_album(self, name, category=0, is_public=False): rsp = self._call_method (method='smugmug.albums.create', SessionID=self.session, Title=name, CategoryID=category, Public=int(is_public)) return get_attribute(get_child(rsp, 'Album'), 'id') def get_albums (self): rsp = self._call_method(method='smugmug.albums.get', SessionID=self.session) self.albums = {} # make an album name: id dict for album in rsp.getElementsByTagName('Album'): self.albums[get_child_text(album, 'Title')] = get_attribute(album, 'id') return self.albums def get_images (self, albumID): rsp = self._call_method (method='smugmug.images.get', SessionID=self.session, AlbumID=albumID) images = [] # create an image id list for image in rsp.getElementsByTagName ('Image'): images.append (get_attribute(image, 'id')) return images def get_image_info (self, imageID): rsp = self._call_method (method='smugmug.images.getInfo', SessionID=self.session, ImageID=imageID) return self._make_dict (rsp.getElementsByTagName('Image')[0]) def delete_image (self, imageID): self._call_method(method='smugmug.images.delete', SessionID=self.session, ImageID=imageID) def upload_file(self,albumid,filename,caption=None): fields = [] fields.append(['AlbumID',str(albumid)]) fields.append(['SessionID',self.session]) if caption: fields.append(['Caption',caption]) data = filename_get_data(filename) fields.append(['ByteCount',str(len(data))]) fields.append(['ResponseType', 'REST']) file = ['Image',filename,data] rsp = self.post_multipart("upload.smugmug.com","/photos/xmladd.mg",fields,[file]) try: tree = parseString(rsp).documentElement return get_child_text(tree, 'ImageID') except: return None def post_multipart(self,host,selector,fields,files): """ Post fields and files to an http host as multipart/form-data. fields is a sequence of (name, value) elements for regular form fields. files is a sequence of (name, filename, value) elements for data to be uploaded as files Return the server's response page. """ content_type, body = self.encode_multipart_formdata(fields,files) h = httplib.HTTP(host) h.putrequest('POST', selector) h.putheader('content-type', content_type) h.putheader('content-length', str(len(body))) h.endheaders() h.send(body) errcode, errmsg, headers = h.getreply() #print errcode #print errmsg #print headers result = h.file.read() #print result h.close() return result def encode_multipart_formdata(self,fields,files): """ fields is a sequence of (name, value) elements for regular form fields. files is a sequence of (name, filename, value) elements for data to be uploaded as files Return (content_type, body) ready for httplib.HTTP instance """ #print fields BOUNDARY = '----------ThIs_Is_tHe_bouNdaRY_$' CRLF = '\r\n' L = [] for (key, value) in fields: L.append('--' + BOUNDARY) L.append('Content-Disposition: form-data; name="%s"' % key) L.append('') L.append(value) for (key, filename, value) in files: L.append('--' + BOUNDARY) L.append('Content-Disposition: form-data; name="%s"; filename="%s"' % (key, filename)) L.append('Content-Type: %s' % get_content_type(filename)) L.append("content-length: %d" % (len(value))) L.append('') L.append(value) L.append('--' + BOUNDARY + '--') L.append('') body = CRLF.join(L) content_type = 'multipart/form-data; boundary=%s' % BOUNDARY return content_type, body def _call_method (self, **args): data = urllib.urlencode(args) f = urllib2.urlopen(self.END_POINT + data) xml = f.read() f.close () rsp = parseString(xml).documentElement self._check_error(rsp) return rsp @classmethod def _check_error(cls, element): if get_attribute(element, 'stat') != 'fail': return err = get_child (element, 'err') raise SmugMugException (get_attribute(err, 'code'), get_attribute(err, 'msg')) @classmethod def _make_dict (cls, element): result = {} for child in element.childNodes: if not child.nodeName: continue value = get_text(child) if not value: continue result[child.nodeName] = value return result conduit-0.3.17/conduit/modules/SmugMugModule/SmugMugAPI/Makefile.in0000644000175000017500000003252111326116730022025 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/modules/SmugMugModule/SmugMugAPI DIST_COMMON = $(conduit_handlers_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduit_handlersdir)" py_compile = $(top_srcdir)/py-compile DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ conduit_handlersdir = $(libdir)/conduit/modules/SmugMugModule/SmugMugAPI conduit_handlers_PYTHON = smugmug.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/modules/SmugMugModule/SmugMugAPI/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/modules/SmugMugModule/SmugMugAPI/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduit_handlersPYTHON: $(conduit_handlers_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduit_handlersdir)" || $(MKDIR_P) "$(DESTDIR)$(conduit_handlersdir)" @list='$(conduit_handlers_PYTHON)'; dlist=; list2=; test -n "$(conduit_handlersdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduit_handlersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduit_handlersdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduit_handlersdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduit_handlersdir)" $$dlist; \ fi; \ else :; fi uninstall-conduit_handlersPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_handlers_PYTHON)'; test -n "$(conduit_handlersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$fileso tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(conduit_handlersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-conduit_handlersPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-conduit_handlersPYTHON .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-conduit_handlersPYTHON \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am \ uninstall-conduit_handlersPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/modules/SmugMugModule/Makefile.am0000644000175000017500000000024111214122722020062 00000000000000SUBDIRS = SmugMugAPI conduit_handlersdir = $(libdir)/conduit/modules/SmugMugModule conduit_handlers_PYTHON = SmugMugModule.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/modules/SmugMugModule/SmugMugModule.py0000644000175000017500000001027411214122722021141 00000000000000""" SmugMug Uploader. """ import os, sys import traceback import md5 import logging log = logging.getLogger("modules.SmugMug") import conduit import conduit.utils as Utils import conduit.dataproviders.Image as Image import conduit.Exceptions as Exceptions from conduit.datatypes import Rid import conduit.datatypes.Photo as Photo Utils.dataprovider_add_dir_to_path(__file__, "SmugMugAPI") from smugmug import SmugMug, SmugMugException from gettext import gettext as _ MODULES = { "SmugMugTwoWay" : { "type": "dataprovider" } } class SmugMugTwoWay(Image.ImageTwoWay): _name_ = _("SmugMug") _description_ = _("Synchronize your SmugMug.com photos") _module_type_ = "twoway" _icon_ = "smugmug" _configurable_ = True def __init__(self, *args): Image.ImageTwoWay.__init__(self) self.update_configuration( username = "", password = "", album = "", imageSize = "None", ) self.sapi = None def _get_photo_info (self, photoId): try: return self.sapi.get_image_info (photoId) except SmugMugException, e: log.warn ("Get info error: %s" % e.get_printable_error()) return None def _get_raw_photo_url(self, photoInfo): return photoInfo['OriginalURL'] def _upload_photo (self, uploadInfo): """ Upload to album; and return image id here """ try: albumID = self._get_album_id () uid = self.sapi.upload_file( albumID, uploadInfo.url, uploadInfo.name) return Rid(uid=uid) except: raise Exceptions.SyncronizeError("SmugMug Upload Error.") def refresh(self): Image.ImageTwoWay.refresh(self) # make sure we logout from previous logins if self.sapi: self.sapi.logout() # login to smugmug try: self.sapi = SmugMug(self.username, self.password) except SmugMugException, e: raise Exceptions.RefreshError (e.get_printable_error()) def get_all (self): return self.sapi.get_images (self._get_album_id()) def get (self, LUID): simage = self.sapi.get_image_info(LUID) url = simage['OriginalURL'] f = Photo.Photo(URI=url) f.force_new_filename(simage['FileName']) f.set_open_URI(url) f.set_UID(LUID) return f def delete(self, LUID): """ Use LUID to delete from smugmug album """ try: self.sapi.delete_image(LUID) except SmugMugException, e: log.warn('Delete error: %s' % e.get_printable_error()) def _get_photo_size (self): return self.imageSize def config_setup(self, config): config.add_section("Account details") config.add_item("Username", "text", config_name = "username" ) config.add_item("Password", "text", config_name = "password", password = True ) config.add_section("Saved photos settings") config.add_item("Album", "text", config_name = "album", ) config.add_item("Resize photos", "combo", choices = [("None", "No resize"), ("640x480", "640x480"), ("800x600", "800x600"), ("1024x768", "1024x768")], config_name = "imageSize" ) def is_configured (self, isSource, isTwoWay): if len(self.username) < 1: return False if len(self.password) < 1: return False if len(self.album) < 1: return False return True def _get_album_id (self): """ Tries to retrieve a valid album id, and creates a new one if it does not exist yet """ id = 0 # see if album already exists albums = self.sapi.get_albums() if albums.has_key (self.album): id = albums[self.album] # return if it does if id != 0: return id # create otherwise else: return self.sapi.create_album (self.album) def get_UID(self): return self.username conduit-0.3.17/conduit/modules/SmugMugModule/Makefile.in0000644000175000017500000005057711326116730020122 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/modules/SmugMugModule DIST_COMMON = $(conduit_handlers_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduit_handlersdir)" py_compile = $(top_srcdir)/py-compile RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = SmugMugAPI conduit_handlersdir = $(libdir)/conduit/modules/SmugMugModule conduit_handlers_PYTHON = SmugMugModule.py all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/modules/SmugMugModule/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/modules/SmugMugModule/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduit_handlersPYTHON: $(conduit_handlers_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduit_handlersdir)" || $(MKDIR_P) "$(DESTDIR)$(conduit_handlersdir)" @list='$(conduit_handlers_PYTHON)'; dlist=; list2=; test -n "$(conduit_handlersdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduit_handlersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduit_handlersdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduit_handlersdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduit_handlersdir)" $$dlist; \ fi; \ else :; fi uninstall-conduit_handlersPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_handlers_PYTHON)'; test -n "$(conduit_handlersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$fileso # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(conduit_handlersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-conduit_handlersPYTHON install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-conduit_handlersPYTHON .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-local \ ctags ctags-recursive distclean distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-conduit_handlersPYTHON install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-conduit_handlersPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/modules/DesktopWallpaperModule.py0000644000175000017500000000521511321403566020312 00000000000000import logging log = logging.getLogger( "modules.DesktopWallpaper") import conduit import conduit.utils as Utils import conduit.dataproviders.File as FileDataProvider import conduit.dataproviders.DataProvider as DataProvider from gettext import gettext as _ (WPNONE,WPGNOME,WPMAC) = range(3) WPTYPE = WPNONE import sys if sys.platform == 'darwin': try: from appscript import app, mactypes WPTYPE = WPMAC except ImportError: log.warn("Wallpaper syncing disabled, install py25-appscript") else: try: import gconf WPTYPE = WPGNOME except ImportError: log.warn("Wallpaper syncing disabled, install python-gconf") if WPTYPE: MODULES = { "DesktopWallpaperDataProvider" : { "type": "dataprovider" } } else: MODULES = {} class DesktopWallpaperDataProvider(FileDataProvider.FolderTwoWay): _name_ = _("Wallpaper") _description_ = _("Changes your Desktop Wallpaper") _category_ = conduit.dataproviders.CATEGORY_MISC _module_type_ = "sink" _in_type_ = "file" _out_type_ = "file" _icon_ = "preferences-desktop-theme" _configurable_ = False def __init__(self, *args): #Put photos into the users Pictures dir pdir = Utils.exec_command_and_return_result("xdg-user-dir", "PICTURES") if pdir: folder = "file://"+pdir.strip() else: folder = "file://"+Utils.new_tempdir() log.info("Storing pictures in %s" % folder) FileDataProvider.FolderTwoWay.__init__( self, folder=folder, folderGroupName="Pictures", includeHidden=False, compareIgnoreMtime=False, followSymlinks=False ) if WPTYPE == WPGNOME: self._client = gconf.client_get_default() def get_UID(self): return Utils.get_user_string() def put(self, vfsFile, overwrite, LUID=None): rid = FileDataProvider.FolderTwoWay.put(self, vfsFile, True, LUID) #if the file was successfully transferred then set it #as the wallpaper if vfsFile.exists(): if WPTYPE == WPMAC: print "SETTING BACKGROUND IMAGE" app('Finder').desktop_picture.set(mactypes.File(vfsFile.get_local_uri())) else: self._client.set_string( "/desktop/gnome/background/picture_filename", vfsFile.get_local_uri() ) return rid def refresh(self): DataProvider.TwoWay.refresh(self) conduit-0.3.17/conduit/modules/AudioVideoConverterModule.py0000644000175000017500000004204611172176633020762 00000000000000import re import logging import threading import tempfile import os log = logging.getLogger("modules.AVConverter") import conduit import conduit.utils as Utils import conduit.TypeConverter as TypeConverter import conduit.datatypes.File as File import conduit.datatypes.Audio as Audio import conduit.datatypes.Video as Video import gobject try: import gst from gst import Pipeline MODULES = { "AudioVideoConverter" : { "type": "converter" } } log.info("Module Information: %s" % Utils.get_module_information(gst, "pygst_version")) except ImportError: class Pipeline: pass MODULES = {} log.info("GStreamer transcoding disabled") ''' GStreamer Conversion properties The parameteres to a GStreamer conversion usually require the name of an GStreamer element. All of the availiable elements in a GStreamer installation can be found with the "gst-inspect" command, usually found in the gstreamer-tools package. If an element is missing, it probably requires the bad or ugly packages from GStreamer. These elements will be used with gst.parse_launch, which can take properties with them, such as "faac bitrate=320000". Only single elements are supported now. You can find the syntax in the gst-launch manual ("man gst-launch"). All the properties of each element can be found with the command "gst-inspect ". These are the properties the GStreamer converter can take: - mux (string, optional): Name of the file muxer used to group the audio and video data, if required. Example: avimux or any of the ffmux elements - vcodec (string, optional): Name of the video data encoder. If not specified, no video will be encoded. Examples: x264enc, theoraenc - acodec (string, optional): Name of the audio data encoder. If not specified, audio won't be availiable. Examples: faac, vorbisenc - width and height (int, optional): Required video dimensions. If only one is specified, the other is calculated to keep the video proportional. ''' PROGRESS_WAIT = 2.5 class GStreamerConversionPipeline(Pipeline): """ Converts between different multimedia formats. This class is event-based and needs a mainloop to work properly. Emits the 'converted' signal when conversion is finished. Heavily based on gst.extend.discoverer The 'converted' callback has one boolean argument, which is True if the file was successfully converted. """ __gsignals__ = { 'converted' : (gobject.SIGNAL_RUN_FIRST, None, (gobject.TYPE_BOOLEAN, )) } def __init__(self, **kwargs): Pipeline.__init__(self) self._has_video_enc = ('vcodec' in kwargs) or ('vcodec_pass1' in kwargs) or ('vcodec_pass2' in kwargs) self._has_audio_enc = 'acodec' in kwargs if not self._has_video_enc and not self._has_audio_enc: raise Exception('At least one output must be specified') self._pass = kwargs.get('pass', 0) self._filesrc = gst.element_factory_make('filesrc') self._filesrc.set_property('location', kwargs['in_file']) self._decodebin = gst.element_factory_make('decodebin') self._decodebin.connect('new-decoded-pad', self._dbin_decoded_pad) self._filesink = gst.element_factory_make('filesink') self._filesink.set_property('location', kwargs['out_file']) self.add(self._filesrc, self._decodebin, self._filesink) self._filesrc.link(self._decodebin) if self._pass == 1: self._fileout = gst.element_factory_make('fakesink') self.add(self._fileout) elif 'format' in kwargs: #TODO: File muxer could probably be found by inspection (from a mime # string, for instance) self._filemuxer = gst.parse_launch(kwargs['format']) self.add(self._filemuxer) self._filemuxer.link(self._filesink) self._fileout = self._filemuxer else: self._fileout = self._filesink #TODO: Create video and audio encoders on demand if self._has_video_enc: self._video_queue = gst.element_factory_make('queue') self._video_scale = gst.element_factory_make('videoscale') self._video_ffmpegcolorspace = gst.element_factory_make('ffmpegcolorspace') if self._pass == 1 and 'vcodec_pass1' in kwargs: self._video_enc = gst.parse_launch(kwargs['vcodec_pass1']) elif self._pass == 2 and 'vcodec_pass2' in kwargs: self._video_enc = gst.parse_launch(kwargs['vcodec_pass2']) else: if self._pass != 0: log.debug("Creating generic video encoder for pass != 0") self._video_enc = gst.parse_launch(kwargs['vcodec']) self.add(self._video_queue, self._video_scale, self._video_ffmpegcolorspace, self._video_enc) # Dont link videoscale to ffmpegcolorspace yet self._video_queue.link(self._video_scale) self._video_ffmpegcolorspace.link(self._video_enc) if ('width' in kwargs) or ('height' in kwargs): log.debug("Video dimensions specified") resolution = [] if 'width' in kwargs: width = kwargs['width'] # Make sure it works with all encoders resolution.append('width=%s' % (width - width % 2)) if 'height' in kwargs: height = kwargs['height'] resolution.append('height=%s' % (height - height % 2)) resolution = ','.join(resolution) caps = gst.caps_from_string('video/x-raw-yuv,%s;video/x-raw-rgb,%s' % (resolution, resolution)) self._video_scale.link_filtered(self._video_ffmpegcolorspace, caps) else: self._video_scale.link(self._video_ffmpegcolorspace) # Pad linked to decodebin in decoded_pad self._video_pad = self._video_queue.get_pad('sink') # Final element linked to file muxer in decoded_pad self._video_src = self._video_enc else: self._video_pad = None if self._has_audio_enc and self._pass != 1: self._audio_queue = gst.element_factory_make('queue') self._audio_convert = gst.element_factory_make('audioconvert') self._audio_resample = gst.element_factory_make('audioresample') self._audio_rate = gst.element_factory_make('audiorate') self._audio_enc = gst.parse_launch(kwargs['acodec']) self.add(self._audio_queue, self._audio_convert, self._audio_resample, self._audio_rate, self._audio_enc) gst.element_link_many(self._audio_queue, self._audio_convert, self._audio_resample, self._audio_rate, self._audio_enc) # Pad linked to decodebin self._audio_pad = self._audio_queue.get_pad('sink') # Final element linked to file muxer in decoded_pad self._audio_src = self._audio_enc else: self._audio_pad = None def _finished(self, success=False): self._success = success self.bus.remove_signal_watch() gobject.idle_add(self._stop) return False def _stop(self): self.set_state(gst.STATE_READY) self.emit('converted', self._success) def _bus_message_cb(self, bus, message): if message.type == gst.MESSAGE_EOS: #TODO: Any other possibility for end-of-stream other then successfull # conversion? log.debug("Conversion sucessfull") self._finished(True) elif message.type == gst.MESSAGE_ERROR: log.debug("Conversion error") self._finished() def _dbin_decoded_pad(self, dbin, pad, is_last): caps = pad.get_caps() log.debug("Caps found: %s" % caps.to_string()) if caps.to_string().startswith('video'): if self._video_pad and not self._video_pad.is_linked(): log.debug("Linking video encoder: %s" % (self._video_pad)) pad.link(self._video_pad) self._video_src.link(self._fileout) elif self._video_pad: log.debug("Video encoder already linked, probably multiple video streams") else: log.debug("Video caps found, but no video encoder") elif caps.to_string().startswith('audio'): if self._audio_pad and not self._audio_pad.is_linked(): log.debug("Linking audio encoder") pad.link(self._audio_pad) self._audio_src.link(self._fileout) elif self._audio_pad: log.debug("Audio encoder already linked, probably multiple audio streams") else: log.debug("Audio caps found, but no audio encoder") def progress(self): try: (pos, format) = self.query_position(gst.FORMAT_TIME) (dur, format) = self.query_duration(gst.FORMAT_TIME) return (pos/float(gst.SECOND), dur/float(gst.SECOND)) except gst.QueryError: log.debug("Conversion query ERROR") return (0.0, 0.0) def convert(self): gst.debug_set_default_threshold(2) self.bus = self.get_bus() self.bus.add_signal_watch() self.bus.connect("message", self._bus_message_cb) log.debug("Starting conversion") if not self.set_state(gst.STATE_PLAYING): self._finished() class GStreamerConverter(): def _run_pipeline(self, **kwargs): def converted(converter, success): self.success = success event.set() event = threading.Event() pipeline = GStreamerConversionPipeline(**kwargs) pipeline.connect("converted", converted) pipeline.convert() current_thread = threading.currentThread() check_progress = False while not event.isSet(): # Dont print an error message if we havent yet started the conversion if check_progress: (time, total) = pipeline.progress() if total: log.debug("Conversion progress: %.2f%%" % (100.0 * time/total)) event.wait(PROGRESS_WAIT) # FIXME: A little hackish, but works. if hasattr(current_thread, 'cancelled'): if current_thread.cancelled: log.debug("Stopping conversion") pipeline.set_state(gst.STATE_NULL) pipeline = None return False check_progress = True pipeline.set_state(gst.STATE_NULL) pipeline = None return self.success def convert(self, **kwargs): if kwargs.get('twopass', False): kwargs['pass'] = 1 self._run_pipeline(**kwargs) kwargs['pass'] = 2 return self._run_pipeline(**kwargs) else: return self._run_pipeline(**kwargs) class AudioVideoConverter(TypeConverter.Converter): def __init__(self): self.conversions = { "file/video,file/video" : self.transcode_video, "file,file/video" : self.file_to_video, "file/audio,file/audio" : self.transcode_audio, "file,file/audio" : self.file_to_audio } def _get_output_file(self, input_file, **kwargs): # We are not checking the contents of keep_converted, because it is a # string, not a bool, even if it was a bool in the args use_temp = not kwargs.has_key("keep_converted") if not use_temp: try: (input_folder, input_filename) = os.path.split(input_file) output_folder = os.path.join(input_folder, "Converted Files") if not os.path.exists(output_folder): os.mkdir(output_folder) output_file = os.path.join(output_folder, input_filename) if 'file_extension' in kwargs: output_file = os.path.splitext(output_file)[0] + '.' + kwargs['file_extension'] #TODO: If the file already exists, we could probably not convert it, # because it could've been converted before #if os.path.is_file(output_file): # return video except Exception, e: log.debug("Using temp folder as a fallback: %s" % e) use_temp = True if use_temp: output_file = tempfile.mkstemp(suffix='conduit')[1] if kwargs.has_key("file_extension"): output_file += '.' + kwargs["file_extension"] log.debug("Using output_file = %s", output_file) return output_file def transcode_video(self, video, **kwargs): #FIXME: This code fails with flv. Should we add an exception? mimetype = video.get_mimetype() if not Video.mimetype_is_video(mimetype): log.debug("File %s is not video type: %s" % (video,mimetype)) return None #Check if we need to convert the video if kwargs.get('mimetype', None) == mimetype: #Check if the video is smaller or equal then the required dimensions #If it does, we dont need to convert it width = kwargs.get('width', None) height = kwargs.get('height', None) if width or height: (video_width, video_height) = video.get_video_size() if (not width or video_width <= width) and \ (not height or video_height <= height): log.debug("Video matches the required dimensions, not converting") return video else: #There is no required dimensions, and we match the mimetype, #so we dont convert it log.debug("Video matches the mimetype, not converting") return video kwargs['in_file'] = video.get_local_uri() kwargs['out_file'] = self._get_output_file(kwargs['in_file'], **kwargs) if os.path.exists(kwargs['out_file']): log.debug('Converted video already exists, using it') return Video.Video(kwargs['out_file']) if 'width' in kwargs and 'height' in kwargs: (width, height) = video.get_video_size() if not width and not height: log.debug("Can't get video dimensions") return None kwargs['width'],kwargs['height'] = Utils.get_proportional_resize( desiredW=int(kwargs['width']), desiredH=int(kwargs['height']), currentW=int(width), currentH=int(height) ) log.debug("Scaling video to %swx%sh" % (kwargs['width'],kwargs['height'])) try: gst_converter = GStreamerConverter() sucess = gst_converter.convert(**kwargs) except Exception, e: log.debug("Error transcoding video: %s" % e) return None if not sucess: log.debug("Error transcoding video\n") return None return Video.Video(kwargs['out_file']) def transcode_audio(self, audio, **kwargs): mimetype = audio.get_mimetype() if not Audio.mimetype_is_audio(mimetype): log.debug("File %s is not audio type: %s" % (audio,mimetype)) return None kwargs['in_file'] = audio.get_local_uri() kwargs['out_file'] = self._get_output_file(kwargs['in_file'], **kwargs) if kwargs.get('mimetype', None) == mimetype: log.debug('No need to convert file') return audio #convert audio gst_converter = GStreamerConverter() sucess = gst_converter.convert(**kwargs) if not sucess: log.debug("Error transcoding audio\n") return None return Audio.Audio(kwargs['out_file']) def file_to_audio(self, f, **kwargs): mimetype = f.get_mimetype() if Audio.mimetype_is_audio(mimetype): a = Audio.Audio( URI=f._get_text_uri() ) a.set_from_instance(f) if len(kwargs) > 0: return self.transcode_audio(a,**kwargs) else: return a else: return None def file_to_video(self, f, **kwargs): mimetype = f.get_mimetype() if Video.mimetype_is_video(mimetype): v = Video.Video( URI=f._get_text_uri() ) v.set_from_instance(f) if len(kwargs) > 0: return self.transcode_video(v,**kwargs) else: return v else: return None conduit-0.3.17/conduit/modules/FlickrModule/0000777000175000017500000000000011326117102015743 500000000000000conduit-0.3.17/conduit/modules/FlickrModule/Makefile.am0000644000175000017500000000021111321403566017714 00000000000000conduit_handlersdir = $(libdir)/conduit/modules/FlickrModule conduit_handlers_PYTHON = FlickrModule.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/modules/FlickrModule/FlickrModule.py0000644000175000017500000002753511321403566020634 00000000000000""" Flickr Uploader. """ import logging log = logging.getLogger("modules.Flickr") import conduit import conduit.utils as Utils import conduit.Web as Web import conduit.dataproviders.Image as Image import conduit.Exceptions as Exceptions import conduit.datatypes.Photo as Photo from conduit.datatypes import Rid from gettext import gettext as _ MODULES = {} try: import flickrapi if flickrapi.__version__ >= "1.2": MODULES = { "FlickrTwoWay" : { "type": "dataprovider" } } log.info("Module Information: %s" % Utils.get_module_information(flickrapi, "__version__")) #turn of debugging in the library flickrapi.set_log_level(logging.NOTSET) except ImportError: pass if not MODULES: log.info("Flickr support disabled. Please install python-flickrapi > 1.2") class MyFlickrAPI(flickrapi.FlickrAPI): """ Wraps the FlickrAPI in order to override validate_frob to launch the conduit web browser. """ #Note that the order, and assignment of values to self.myFrob #and self.myToken is important - if done incorrectly then FlickrAPI.__getattr__ #returns a handler function for them, and not the actual value requested def __init__(self, api_key, secret, username): flickrapi.FlickrAPI.__init__(self, api_key=api_key, secret=secret, username=username, token=None, format='xmlnode', store_token=True, cache=False ) self.myFrob = None self.myToken = None def validate_frob(self, frob, perms): self.myFrob = frob Web.LoginMagic("Log into Flickr", self.auth_url(perms, frob), login_function=self.try_login) def try_login(self): try: self.myToken = self.get_token(self.myFrob) return True except flickrapi.FlickrError: return False def login(self): token, frob = self.get_token_part_one(perms='delete') if token: log.debug("Got token from cache") return token else: log.debug("Got token from web") return self.myToken class FlickrTwoWay(Image.ImageTwoWay): _name_ = _("Flickr") _description_ = _("Synchronize your Flickr.com photos") _module_type_ = "twoway" _icon_ = "flickr" _configurable_ = True API_KEY="65552e8722b21d299388120c9fa33580" SHARED_SECRET="03182987bf7fc4d1" def __init__(self, *args): Image.ImageTwoWay.__init__(self) self.fapi = None self.token = None self.logged_in = False self.photoSetId = None self.update_configuration( imageSize = "None", username = ("", self._set_username), photoSetName = "", showPublic = True ) # Helper methods def _get_user_quota(self): """ Returs used,total or -1,-1 on error """ try: ret = self.fapi.people_getUploadStatus() totalkb = int(ret.user[0].bandwidth[0]["maxkb"]) usedkb = int(ret.user[0].bandwidth[0]["usedkb"]) p = (float(usedkb)/totalkb)*100.0 return usedkb,totalkb,p except flickrapi.FlickrError, e: log.debug("Error getting quota: %s" % e) return -1,-1,100 def _get_photo_info(self, photoID): try: return self.fapi.photos_getInfo(photo_id=photoID) except flickrapi.FlickrError, e: log.debug("Error getting photo info: %s" % e) return None def _get_raw_photo_url(self, photoInfo): photo = photoInfo.photo[0] #photo is a dict so we can use pythons string formatting natively with the correct keys url = "http://farm%(farm)s.static.flickr.com/%(server)s/%(id)s_%(secret)s.jpg" % photo return url def _upload_photo (self, uploadInfo): try: ret = self.fapi.upload( filename=uploadInfo.url, title=uploadInfo.name, description=uploadInfo.caption, is_public="%i" % self.showPublic, tags=' '.join(tag.replace(' ', '_') for tag in uploadInfo.tags)) except flickrapi.FlickrError, e: raise Exceptions.SyncronizeError("Flickr Upload Error: %s" % e) # get the id photoId = ret.photoid[0].text # check if phtotoset exists, if not create it firstPhoto = False if not self.photoSetId: self.photoSetId = self._create_photoset(photoId) # first photo shouldn't be added to photoset as Flickrs does it for us firstPhoto = True # add the photo to the photoset if self.photoSetId and not firstPhoto: try: ret = self.fapi.photosets_addPhoto( photoset_id = self.photoSetId, photo_id = photoId) except flickrapi.FlickrError, e: log.warn("Flickr failed to add %s to set: %s" % (photoId,e)) #return the photoID return Rid(uid=photoId) def _get_photo_size (self): return self.imageSize def _set_username(self, username): if self.username != username: self.username = username self.logged_in = False def _login(self): #only log in if we need to if not self.logged_in: self.fapi = MyFlickrAPI(FlickrTwoWay.API_KEY, FlickrTwoWay.SHARED_SECRET, self.username) self.token = self.fapi.login() self.logged_in = True def _create_photoset(self, primaryPhotoId): #create one with created photoID if not try: ret = self.fapi.photosets_create( title=self.photoSetName, primary_photo_id=primaryPhotoId) return ret.photoset[0]['id'] except flickrapi.FlickrError, e: log.warn("Flickr failed to create photoset %s: %s" % (self.photoSetName,e)) return None def _get_photoset(self): for name, photoSetId in self._get_photosets(): if name == self.photoSetName: log.debug("Found album %s" % self.photoSetName) self.photoSetId = photoSetId def _get_photosets(self): photosets = [] try: ret = self.fapi.photosets_getList() if hasattr(ret.photosets[0], 'photoset'): for pset in ret.photosets[0].photoset: photosets.append( (pset.title[0].text, #photoset name pset['id'])) #photoset id except flickrapi.FlickrError, e: log.debug("Failed to get photosets: %s" % e) return photosets def _get_photos(self): if not self.photoSetId: return [] photoList = [] try: ret = self.fapi.photosets_getPhotos(photoset_id=self.photoSetId) for photo in ret.photoset[0].photo: photoList.append(photo['id']) except flickrapi.FlickrError, e: log.warn("Flickr failed to get photos: %s" % e) return photoList # DataProvider methods def refresh(self): Image.ImageTwoWay.refresh(self) self._login() self._get_photoset() used,tot,percent = self._get_user_quota() log.debug("Used %2.1f%% of monthly badwidth quota (%skb/%skb)" % (percent,used,tot)) def get_all(self): return self._get_photos() def get (self, LUID): # get photo info photoInfo = self._get_photo_info(LUID) # get url url = self._get_raw_photo_url (photoInfo) # get the title title = str(photoInfo.photo[0].title[0].text) # get tags tagsNode = photoInfo.photo[0].tags[0] # get caption caption = photoInfo.photo[0].description[0].text if hasattr(tagsNode, 'tag'): tags = tuple(tag.text for tag in tagsNode.tag) else: tags = () # create the file f = Photo.Photo (URI=url) f.set_open_URI(url) f.set_caption(caption) # try to rename if a title is available # FIXME: this is far from optimal, also there should be # a way to get out the originals if title: if not title.endswith('jpg'): title = title + '.jpg' f.force_new_filename(title) f.set_UID(LUID) # set the tags f.set_tags (tags) return f def delete(self, LUID): if self._get_photo_info(LUID) != None: try: ret = self.fapi.photos_delete(photo_id=LUID) log.debug("Successfully deleted photo: %s" % LUID) except flickrapi.FlickrError, e: log.warn("Error deleting %s: %s" % (LUID,e)) else: log.warn("Error deleting %s: doesnt exist" % LUID) def config_setup(self, config): def _login_finished(*args): try: if self.logged_in: config['status'].value = _('Loading album list...') try: #FIXME: Blocks and brings the whole UI with it. photosets = self._get_photosets() except: config['status'].value = _('Failed to connect.') else: config['photoSetName'].choices = [name for name, photoSetId in photosets] config['status'].value = _('Album names loaded.') else: config['status'].value = _('Failed to login.') finally: config['photoSetName'].enabled = True account_section.enabled = True config.set_busy(False) def _load_photosets(button): config.set_busy(True) config['photoSetName'].enabled = False account_section.enabled = False username_config.apply() config['status'].value = _('Logging in, please wait...') conduit.GLOBALS.syncManager.run_blocking_dataprovider_function_calls( self, _login_finished, self._login) account_section = config.add_section(_('Account details')) username_config = config.add_item(_('Username'), 'text', config_name = 'username', ) username_config.connect('value-changed', lambda item, initial, value: load_photosets_config.set_enabled(bool(value))) status_label = config.add_item(None, 'label', name = 'status', initial_value = self.status, use_markup = True, xalignment = 0.5, ) load_photosets_config = config.add_item(_("Authenticate"), "button", initial_value = _load_photosets, image = "dialog-password" ) config.add_section(_('Saved photo settings')) photoset_config = config.add_item('Photoset name', 'combotext', config_name = 'photoSetName', choices = [], ) config.add_item(_("Resize photos"), "combo", choices = [("None", _("Do not resize")), _("640x480"), _("800x600"), _("1024x768")], config_name = "imageSize" ) config.add_item(_('Photos are public'), 'check', config_name = 'showPublic' ) def is_configured (self, isSource, isTwoWay): return len(self.username) > 0 and len(self.photoSetName) > 0 def get_UID(self): return self.token conduit-0.3.17/conduit/modules/FlickrModule/Makefile.in0000644000175000017500000003244611326116727017751 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/modules/FlickrModule DIST_COMMON = $(conduit_handlers_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduit_handlersdir)" py_compile = $(top_srcdir)/py-compile DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ conduit_handlersdir = $(libdir)/conduit/modules/FlickrModule conduit_handlers_PYTHON = FlickrModule.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/modules/FlickrModule/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/modules/FlickrModule/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduit_handlersPYTHON: $(conduit_handlers_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduit_handlersdir)" || $(MKDIR_P) "$(DESTDIR)$(conduit_handlersdir)" @list='$(conduit_handlers_PYTHON)'; dlist=; list2=; test -n "$(conduit_handlersdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduit_handlersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduit_handlersdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduit_handlersdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduit_handlersdir)" $$dlist; \ fi; \ else :; fi uninstall-conduit_handlersPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_handlers_PYTHON)'; test -n "$(conduit_handlersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$fileso tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(conduit_handlersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-conduit_handlersPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-conduit_handlersPYTHON .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-conduit_handlersPYTHON \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am \ uninstall-conduit_handlersPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/modules/NetworkModule/0000777000175000017500000000000011326117103016163 500000000000000conduit-0.3.17/conduit/modules/NetworkModule/Makefile.am0000644000175000017500000000030311172176633020143 00000000000000conduit_handlersdir = $(libdir)/conduit/modules/NetworkModule conduit_handlers_PYTHON = Client.py Server.py Peers.py NetworkModule.py XMLRPCUtils.py __init__.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/modules/NetworkModule/Server.py0000644000175000017500000001357211172176633017743 00000000000000""" Contains classes for transmitting and receiving python objects over the network. Copyright: John Stowers, 2006 License: GPLv2 """ import logging log = logging.getLogger("modules.Network") import Peers import XMLRPCUtils import conduit import conduit.dataproviders.DataProvider as DataProvider from gettext import gettext as _ SERVER_PORT = 3400 class NetworkServerFactory(DataProvider.DataProviderFactory): """ Controlls all network related communication aspects. This involves 1) Advertising dataprovider presence on local network using avahi 2) Discovering remote conduit capabilities (i.e. what dataproviders it has advertised) 3) Data transmission to/from remote conduit instances """ def __init__(self, **kwargs): DataProvider.DataProviderFactory.__init__(self) self.shared = {} self.DP_PORT = 3401 # Initiate Avahi stuff & announce our presence try: log.debug("Starting AvahiAdvertiser server") self.advertiser = Peers.AvahiAdvertiser("_conduit.tcp", SERVER_PORT) self.advertiser.announce() #Start the server which anounces other shared servers self.peerAnnouncer = XMLRPCUtils.StoppableXMLRPCServer('',SERVER_PORT) self.peerAnnouncer.register_function(self.list_shared_dataproviders) self.peerAnnouncer.start() #FIXME: Only show the endpoint if the server was started. #self.emit_added( # klass=NetworkEndpoint, # initargs=(), # category=conduit.dataproviders.CATEGORY_MISC # ) except Exception, e: self.peerAnnouncer = None log.warn("Error starting AvahiAdvertiser server: %s" % e) #watch the modulemanager for added conduits and syncsets if conduit.GLOBALS.moduleManager != None: conduit.GLOBALS.moduleManager.connect('syncset-added', self._syncset_added) else: log.warn("Could not start AvahiAdvertiser server, moduleManager not created yet") def _syncset_added(self, mgr, syncset): syncset.connect("conduit-added", self._conduit_added) syncset.connect("conduit-removed", self._conduit_removed) def _conduit_added(self, syncset, cond): cond.connect("dataprovider-added", self._dataprovider_added) cond.connect("dataprovider-removed", self._dataprovider_removed) def _conduit_removed(self, syncset, cond): for dpw in cond.get_all_dataproviders(): self._dataprovider_removed(cond, dpw) def _get_shared_dps(self, cond): """ This is a cludgy evil function to determine if a conduit is shared or not If it is, the dp to share is returned If it is not, None is returned """ dps = cond.get_all_dataproviders() ne = None tg = None if len(dps) == 2: for dp in dps: if type(dp.module) == NetworkEndpoint: ne = dp else: tg = dp if tg and ne: return tg,ne else: return None,None return None,None def _dataprovider_added(self, cond, dpw): sharedDpw,networkEndpoint = self._get_shared_dps(cond) if sharedDpw != None: if sharedDpw.get_UID() not in self.shared and sharedDpw.module != None: #Update the network enpoint to have the same input and output #types as the shared DP. networkEndpoint.module.input_type = sharedDpw.module.get_input_type() networkEndpoint.module.output_type = sharedDpw.module.get_output_type() cond._parameters_changed() self.share_dataprovider(sharedDpw) def _dataprovider_removed(self, cond, dpw): if dpw.get_UID() in self.shared: self.unshare_dataprovider(dpw) cond._parameters_changed() def list_shared_dataproviders(self): info = [] for key, dp in self.shared.iteritems(): info.append(dp.get_info()) return info def quit(self): #stop all the xmlrpc servers for server in self.shared.values(): server.stop() if self.peerAnnouncer != None: self.peerAnnouncer.stop() def share_dataprovider(self, dpw): """ Shares a conduit/dp on the network """ server = XMLRPCUtils.DataproviderServer(dpw, self.DP_PORT) server.start() self.shared[dpw.get_UID()] = server self.DP_PORT += 1 return server def unshare_dataprovider(self, dpw): """ Stop sharing a conduit """ uid = dpw.get_UID() server = self.shared[uid] server.stop() del self.shared[uid] class NetworkEndpoint(DataProvider.TwoWay): """ Simple class used for detecting when a user connects another dataprovider to this one, symbolising a network sync """ _name_ = _("Network") _description_ = _("Enable synchronization via network") _category_ = conduit.dataproviders.CATEGORY_MISC _module_type_ = "twoway" _icon_ = "network-idle" _configurable_ = False def __init__(self): DataProvider.TwoWay.__init__(self) self.input_type = "" self.output_type = "" def is_busy(self): #Stop right click menu return True def is_configured(self, isSource, isTwoWay): #Prevent initiating a sync on the server end by pretending we are #not configured return False def get_status(self): #Always show status as ready return DataProvider.STATUS_NONE def get_input_type(self): return self.input_type def get_output_type(self): return self.output_type def get_UID(self): return "NetworkEndpoint" conduit-0.3.17/conduit/modules/NetworkModule/XMLRPCUtils.py0000644000175000017500000002307411321403566020513 00000000000000""" Utilty functions shared between the xml-rpc client and server Copyright: John Stowers, 2006 License: GPLv2 """ import socket import select import traceback import threading import cPickle import xmlrpclib import SimpleXMLRPCServer import logging import time #One log for the client clog = logging.getLogger("modules.Network.C") #One log for the server slog = logging.getLogger("modules.Network.S") import conduit.Exceptions as Exceptions import conduit.dataproviders.DataProvider as DataProvider import conduit.utils as Utils XML_RPC_EASY_EXCEPTIONS = ( "RefreshError", "SyncronizeError", "SyncronizeFatalError", "StopSync" ) def marshal_fault_to_exception(fault, **kwargs): if fault.faultCode in XML_RPC_EASY_EXCEPTIONS: klass = getattr(Exceptions,fault.faultCode) #exception.message = fault.faultString raise klass(fault.faultString) elif fault.faultCode == "SynchronizeConflictError": fromData = kwargs['server'].get(kwargs['fromDataLUID']) toData = kwargs['toData'] raise Exceptions.SynchronizeConflictError(fault.faultString, fromData, toData) else: raise Exception("Remote Exception:\n%s" % fault.faultString) def marshal_exception_to_fault(exception): klassName = exception.__class__.__name__ if klassName in XML_RPC_EASY_EXCEPTIONS: #exception.message = fault.faultString raise xmlrpclib.Fault(klassName, exception.message) elif klassName == "SynchronizeConflictError": #only put the comparison in the fault, getting the other data #requires subsequent xmlrpc calls raise xmlrpclib.Fault("SynchronizeConflictError", exception.comparison) else: raise xmlrpclib.Fault("Exception",traceback.format_exc()) def pickle_obj_to_binary(obj): bin = xmlrpclib.Binary(cPickle.dumps(obj)) return bin def unpickle_obj_from_binary(bin): obj = cPickle.loads(bin.data) return obj class StoppableXMLRPCServer(SimpleXMLRPCServer.SimpleXMLRPCServer): """ A variant of SimpleXMLRPCServer that can be stopped. From http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/520583 """ allow_reuse_address = True def __init__( self, host, port): SimpleXMLRPCServer.SimpleXMLRPCServer.__init__(self, addr=(host,port), logRequests=False, allow_none=True ) self.closed = False def serve(self): self.socket.setblocking(0) while not self.closed: time.sleep(0.15) try: self.handle_request() except TypeError: #Python 2.6 throws this on close... pass except: slog.critical("Error handling request", exc_info=True) def get_request(self): inputObjects = [] while not inputObjects and not self.closed: try: inputObjects, outputObjects, errorObjects = select.select([self.socket], [], [], 0.2) sock, addr = self.socket.accept() return (sock, addr) except socket.timeout: if self.closed: raise except socket.error: #Occurs at shutdown, raise to stop serving if self.closed: raise except select.error: #Occurs sometimes at start up, race condition, ignore pass def start(self): threading.Thread(target=self.serve).start() def stop(self): self.closed = True class DataProviderClient(DataProvider.TwoWay): """ Provides the Client portion of dataprovider proxying. """ _configurable_ = False def __init__(self, *args): DataProvider.TwoWay.__init__(self) clog.info("Connecting to remote DP on %s" % self.url) #Add use_datetime arg for >= python 2.5 self.server = xmlrpclib.Server( self.url, allow_none=True) @Utils.log_function_call(clog) def refresh(self): DataProvider.TwoWay.refresh(self) try: self.server.refresh() except xmlrpclib.Fault, f: marshal_fault_to_exception(f) @Utils.log_function_call(clog) def get_all(self): DataProvider.TwoWay.get_all(self) try: return self.server.get_all() except xmlrpclib.Fault, f: marshal_fault_to_exception(f) @Utils.log_function_call(clog) def get(self, LUID): DataProvider.TwoWay.get(self, LUID) try: binaryData = self.server.get(LUID) return unpickle_obj_from_binary(binaryData) except xmlrpclib.Fault, f: marshal_fault_to_exception(f) @Utils.log_function_call(clog) def put(self, data, overwrite=False, LUID=None): DataProvider.TwoWay.put(self, data, overwrite, LUID) binaryData = pickle_obj_to_binary(data) try: binaryRid = self.server.put(binaryData, overwrite, LUID) return unpickle_obj_from_binary(binaryRid) except xmlrpclib.Fault, f: #Supply additional info because the conflict exception #includes details of the conflict #FIXME: Check from and to isnt backwards... marshal_fault_to_exception( f, server=self, fromDataLUID=LUID, toData=data ) @Utils.log_function_call(clog) def delete(self, LUID): DataProvider.TwoWay.delete(self, LUID) try: return self.server.delete(LUID) except xmlrpclib.Fault, f: marshal_fault_to_exception(f) @Utils.log_function_call(clog) def finish(self, aborted, error, conflict): DataProvider.TwoWay.finish(self) try: self.server.finish(aborted, error, conflict) except xmlrpclib.Fault, f: marshal_fault_to_exception(f) @Utils.log_function_call(clog) def get_UID(self): return self.uid @Utils.log_function_call(clog) def set_status(self, newStatus): self.server.set_status(newStatus) @Utils.log_function_call(clog) def get_status(self): return self.server.get_status() def get_name(self): return "Remote %s" % self._name_ class DataproviderServer(StoppableXMLRPCServer): """ Wraps a dataproviderwrapper in order to pickle args and deal with exceptions in the sync process """ def __init__(self, wrapper, port): StoppableXMLRPCServer.__init__(self,'',port) slog.info("Starting server for %s on port %s" % (wrapper,port)) self.port = port self.dpw = wrapper #Additional functions not part of the normal dp api self.register_function(self.get_info) #register individual functions, not the whole object, #because in some cases we need to pickle function arguments #and deal with exceptions self.register_function(self.refresh) self.register_function(self.get_all) self.register_function(self.get) self.register_function(self.put) self.register_function(self.delete) self.register_function(self.finish) #These functions will never throw exceptions so register them in #the module directly self.register_function(self.dpw.module.set_status) self.register_function(self.dpw.module.get_status) def get_info(self): """ Return information about this dataprovider (so that client can show correct icon, name, description etc) """ return {"uid": self.dpw.get_UID(), "name": self.dpw.name, "description": self.dpw.description, "icon": self.dpw.icon_name, "module_type": self.dpw.module_type, "in_type": self.dpw.in_type, "out_type": self.dpw.out_type, "dp_server_port": self.port } @Utils.log_function_call(slog) def refresh(self): try: self.dpw.module.refresh() except Exception, e: return marshal_exception_to_fault(e) @Utils.log_function_call(slog) def get_all(self): try: return self.dpw.module.get_all() except Exception, e: return marshal_exception_to_fault(e) @Utils.log_function_call(slog) def get(self, LUID): try: return pickle_obj_to_binary(self.dpw.module.get(LUID)) except Exception, e: return marshal_exception_to_fault(e) @Utils.log_function_call(slog) def put(self, binaryData, overwrite, LUID): data = unpickle_obj_from_binary(binaryData) try: rid = self.dpw.module.put(data, overwrite, LUID) return pickle_obj_to_binary(rid) except Exception, e: return marshal_exception_to_fault(e) @Utils.log_function_call(slog) def delete(self, LUID): try: self.dpw.module.delete(LUID) except Exception, e: return marshal_exception_to_fault(e) @Utils.log_function_call(slog) def finish(self, aborted, error, conflict): try: self.dpw.module.finish(aborted, error, conflict) except Exception, e: return marshal_exception_to_fault(e) conduit-0.3.17/conduit/modules/NetworkModule/NetworkModule.py0000644000175000017500000000203611172176633021265 00000000000000""" Contains classes for advertising conduit via avahi and for transmitting and receiving python objects over the network. Copyright: John Stowers, 2006 License: GPLv2 """ import sys import logging log = logging.getLogger("modules.Network") #We need Python2.5 for network sync. This is because allow_none (i.e. #the marshalling of None in the xmlrpc server) was only added in Python2.5 if sys.version_info[0:2] >= (2,5): import conduit.utils as Utils Utils.dataprovider_add_dir_to_path(__file__, "") import Client import Server NetworkClientFactory = Client.NetworkClientFactory NetworkServerFactory = Server.NetworkServerFactory NetworkEndpoint = Server.NetworkEndpoint MODULES = { "NetworkServerFactory" : { "type": "dataprovider-factory" }, "NetworkClientFactory" : { "type": "dataprovider-factory" }, "NetworkEndpoint" : { "type": "dataprovider" }, } log.info("Network support enabled") else: MODULES = {} log.info("Network support disabled") conduit-0.3.17/conduit/modules/NetworkModule/Client.py0000644000175000017500000001416211172176633017707 00000000000000""" Contains classes for transmitting and receiving python objects over the network. Copyright: John Stowers, 2006 License: GPLv2 """ import xmlrpclib import threading import time import gobject import logging import socket log = logging.getLogger("modules.Network") import Peers import XMLRPCUtils import conduit.dataproviders.DataProvider as DataProvider import conduit.dataproviders.DataProviderCategory as DataProviderCategory class NetworkClientFactory(DataProvider.DataProviderFactory): """ Responsible for making networked Conduit resources available to the user. This includes: 1) Monitoring Avahi events to detect other Conduit instances on the network 2) Discovering remote conduit capabilities (i.e. what dataproviders it has advertised) 3) Data transmission to/from remote conduit instances """ def __init__(self, **kwargs): DataProvider.DataProviderFactory.__init__(self) self.categories = {} self.dataproviders = {} self.peers = {} try: self.monitor = Peers.AvahiMonitor(self.host_available, self.host_removed) except: log.warn("Error starting client") def quit(self): for p in self.peers.values(): p.stop() def host_available(self, name, host, address, port, extra_info): """ Callback which is triggered when a dataprovider is advertised on a remote conduit instance """ url = "http://%s" % host log.debug("Remote host '%s' detected" % url) if not self.peers.has_key(url): #Create a category group for this host self.categories[url] = DataProviderCategory.DataProviderCategory("On %s" % host, "computer", host) # Create a dataproviders list for this host self.dataproviders[url] = {} # Request all dp's for this host. Because there is no # avahi signal when the text entry in a avahi publish group # is changed, we must poll detected peers.... request = _PeerLister(url, port) request.connect("complete", self.dataprovider_process) request.start() self.peers[url] = request def host_removed(self, url): """ Callback which is triggered when a host is no longer available """ log.debug("Remote host '%s' removed" % url) if self.peers.has_key(url): self.categories.remove(url) for uid, dp in self.dataproviders[url].items(): self.dataprovider_removed(dp) self.dataproviders.remove(url) self.peers.remove(url) def dataprovider_process(self, peerLister): """ """ hostUrl = peerLister.url currentSharedDps = self.dataproviders[hostUrl] #A remote dps uid is the url + the original dp uid remoteSharedDps = {} for dpInfo in peerLister.data_out: remoteUid = "%s-%s" % (hostUrl,dpInfo['uid']) remoteSharedDps[remoteUid] = dpInfo #log.debug("Processing Remote Dataprovider: URL:%s\tCurrent dps:%s\tRemote dps:%s" % (hostUrl,currentSharedDps,remoteSharedDps.keys())) # loop through all dp's for remoteUid,info in remoteSharedDps.items(): if remoteUid not in currentSharedDps: self.dataprovider_added(hostUrl, remoteUid, info) for remoteUid in currentSharedDps.keys(): if remoteUid not in remoteSharedDps: self.dataprovider_removed(hostUrl, remoteUid) def dataprovider_create(self, hostUrl, uid, info): # Each dataprovider is on its own port dpUrl = "%s:%s/" % (hostUrl, info['dp_server_port']) params = {} for key, val in info.iteritems(): params['_' + key + '_'] = val params['hostUrl'] = hostUrl params['url'] = dpUrl params['uid'] = uid # Actually create a new object type based on XMLRPCUtils.DataProviderClient # but with the properties from the remote DataProvider newdp = type(dpUrl, (XMLRPCUtils.DataProviderClient, ), params) return newdp def dataprovider_added(self, hostUrl, uid, info): """ Enroll a dataprovider with Conduit's ModuleManager. """ newdp = self.dataprovider_create(hostUrl, uid, info) # Register the new dataprovider with Conduit key = self.emit_added( klass=newdp, initargs=(), #No init args, these are encoded as class params category=self.categories[newdp.hostUrl] ) # Record the key so we can unregister the dp later (if needed) self.dataproviders[hostUrl][newdp.uid] = key def dataprovider_removed(self, hostUrl, uid): """ Remove a dataprovider from ModuleManager """ self.emit_removed(self.dataproviders[hostUrl][uid]) del(self.dataproviders[hostUrl][uid]) class _PeerLister(threading.Thread, gobject.GObject): """ Connects to the remote dataprovider factory and queries the shared dataproviders """ __gsignals__ = { "complete": (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, []) } FREQ = 5 SLEEP = 0.1 def __init__(self, url, port): threading.Thread.__init__(self) gobject.GObject.__init__(self) self.port = port self.url = url self.stopped = False self._ticks = 0 def stop(self): self.stopped = True def run(self): server = xmlrpclib.Server("%s:%s/" % (self.url,self.port)) #Gross cancellable spinning loop... while not self.stopped: if self._ticks > (self.FREQ / self.SLEEP): try: self.data_out = server.list_shared_dataproviders() gobject.idle_add(self.emit, "complete") except: #If the server has died or not started yet pass self._ticks = 0 else: time.sleep(self.SLEEP) self._ticks += 1 conduit-0.3.17/conduit/modules/NetworkModule/Makefile.in0000644000175000017500000003254311326116727020166 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/modules/NetworkModule DIST_COMMON = $(conduit_handlers_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduit_handlersdir)" py_compile = $(top_srcdir)/py-compile DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ conduit_handlersdir = $(libdir)/conduit/modules/NetworkModule conduit_handlers_PYTHON = Client.py Server.py Peers.py NetworkModule.py XMLRPCUtils.py __init__.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/modules/NetworkModule/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/modules/NetworkModule/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduit_handlersPYTHON: $(conduit_handlers_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduit_handlersdir)" || $(MKDIR_P) "$(DESTDIR)$(conduit_handlersdir)" @list='$(conduit_handlers_PYTHON)'; dlist=; list2=; test -n "$(conduit_handlersdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduit_handlersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduit_handlersdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduit_handlersdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduit_handlersdir)" $$dlist; \ fi; \ else :; fi uninstall-conduit_handlersPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_handlers_PYTHON)'; test -n "$(conduit_handlersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$fileso tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(conduit_handlersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-conduit_handlersPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-conduit_handlersPYTHON .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-conduit_handlersPYTHON \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am \ uninstall-conduit_handlersPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/modules/NetworkModule/Peers.py0000644000175000017500000002111211172176633017540 00000000000000""" Contains classes for advertising conduit via avahi and for transmitting and receiving python objects over the network. Parts of this code adapted from glchess (GPLv2) http://glchess.sourceforge.net/ Parts of this code adapted from elisa (GPLv2) Parts of this code adapted from http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/457669 Copyright: John Stowers, 2006 License: GPLv2 """ import dbus.glib import logging log = logging.getLogger("modules.Network") import conduit AVAHI_SERVICE_NAME = "_conduit._tcp" AVAHI_SERVICE_DOMAIN = "" PROTOCOL_VERSION = "1" PORT_IDX = 0 VERSION_IDX = 1 ### #Instead of having to depend on python-avahi we just #copy the functions and constants we need ### DBUS_INTERFACE_ADDRESS_RESOLVER = 'org.freedesktop.Avahi.AddressResolver' DBUS_INTERFACE_DOMAIN_BROWSER = 'org.freedesktop.Avahi.DomainBrowser' DBUS_INTERFACE_ENTRY_GROUP = 'org.freedesktop.Avahi.EntryGroup' DBUS_INTERFACE_HOST_NAME_RESOLVER = 'org.freedesktop.Avahi.HostNameResolver' DBUS_INTERFACE_RECORD_BROWSER = 'org.freedesktop.Avahi.RecordBrowser' DBUS_INTERFACE_SERVER = 'org.freedesktop.Avahi.Server' DBUS_INTERFACE_SERVICE_BROWSER = 'org.freedesktop.Avahi.ServiceBrowser' DBUS_INTERFACE_SERVICE_RESOLVER = 'org.freedesktop.Avahi.ServiceResolver' DBUS_INTERFACE_SERVICE_TYPE_BROWSER = 'org.freedesktop.Avahi.ServiceTypeBrowser' DBUS_NAME = 'org.freedesktop.Avahi' DBUS_PATH_SERVER = '/' DOMAIN_BROWSER_BROWSE = 0 DOMAIN_BROWSER_BROWSE_DEFAULT = 1 DOMAIN_BROWSER_BROWSE_LEGACY = 4 DOMAIN_BROWSER_REGISTER = 2 DOMAIN_BROWSER_REGISTER_DEFAULT = 3 ENTRY_GROUP_COLLISION = 3 ENTRY_GROUP_ESTABLISHED = 2 ENTRY_GROUP_FAILURE = 4 ENTRY_GROUP_REGISTERING = 1 ENTRY_GROUP_UNCOMMITED = 0 IF_UNSPEC = -1 LOOKUP_NO_ADDRESS = 8 LOOKUP_NO_TXT = 4 LOOKUP_RESULT_CACHED = 1 LOOKUP_RESULT_LOCAL = 8 LOOKUP_RESULT_MULTICAST = 4 LOOKUP_RESULT_OUR_OWN = 16 LOOKUP_RESULT_STATIC = 32 LOOKUP_RESULT_WIDE_AREA = 2 LOOKUP_USE_MULTICAST = 2 LOOKUP_USE_WIDE_AREA = 1 PROTO_INET = 0 PROTO_INET6 = 1 PROTO_UNSPEC = -1 PUBLISH_ALLOW_MULTIPLE = 8 PUBLISH_NO_ANNOUNCE = 4 PUBLISH_NO_COOKIE = 32 PUBLISH_NO_PROBE = 2 PUBLISH_NO_REVERSE = 16 PUBLISH_UNIQUE = 1 PUBLISH_UPDATE = 64 PUBLISH_USE_MULTICAST = 256 PUBLISH_USE_WIDE_AREA = 128 SERVER_COLLISION = 3 SERVER_FAILURE = 4 SERVER_INVALID = 0 SERVER_REGISTERING = 1 SERVER_RUNNING = 2 SERVICE_COOKIE = 'org.freedesktop.Avahi.cookie' SERVICE_COOKIE_INVALID = 0 def byte_array_to_string(s): r = "" for c in s: if c >= 32 and c < 127: r += "%c" % c else: r += "." return r def txt_array_to_string_array(t): l = [] for s in t: l.append(byte_array_to_string(s)) return l def string_to_byte_array(s): r = [] for c in s: r.append(dbus.Byte(ord(c))) return r def string_array_to_txt_array(t): l = [] for s in t: l.append(string_to_byte_array(s)) return l def dict_to_txt_array(txt_dict): l = [] for k,v in txt_dict.items(): l.append(string_to_byte_array("%s=%s" % (k,v))) return l def txt_array_to_dict(array): d = {} for i in array: bits = i.split("=") if len(bits) == 2: d[bits[0]] = bits[1] return d class AvahiAdvertiser: """ Advertises the presence of dataprovider instances on the network using avahi. Wraps up some of the complexity due to it being hard to add additional services to a group once that group has been committed. """ def __init__(self, name, port): self.name = name self.port = port # Connect to the Avahi server bus = dbus.SystemBus() server = dbus.Interface( bus.get_object( DBUS_NAME, DBUS_PATH_SERVER ), DBUS_INTERFACE_SERVER ) # Get this device's hostname self.hostname = server.GetHostName() # Register this service path = server.EntryGroupNew() self.group = dbus.Interface( bus.get_object(DBUS_NAME, path), DBUS_INTERFACE_ENTRY_GROUP ) def announce(self): """ Resets the group, announces Conduit, and commits the change """ log.debug("Announcing avahi conduit service") self.group.AddService( IF_UNSPEC, #interface PROTO_UNSPEC, #protocol dbus.UInt32(0), #flags self.hostname, #name AVAHI_SERVICE_NAME, #service type AVAHI_SERVICE_DOMAIN, #domain '', #host dbus.UInt16(self.port), #port string_array_to_txt_array([ "version=%s" % conduit.VERSION, "protocol-version=%s" % PROTOCOL_VERSION]) ) self.group.Commit() def reset(self): if not self.group.IsEmpty(): self.group.Reset() class AvahiMonitor: """ Watches the network for other conduit instances using avahi. Code adapted from elisa """ def __init__(self, dataprovider_detected_cb, dataprovider_removed_cb): """ Connects to the system bus and configures avahi to listen for Conduit services """ #Callbacks fired when a conduit dataprovider is detected self.detected_cb = dataprovider_detected_cb self.removed_cb = dataprovider_removed_cb bus = dbus.SystemBus() self.server = dbus.Interface( bus.get_object( DBUS_NAME, DBUS_PATH_SERVER), DBUS_INTERFACE_SERVER) self.hostname = self.server.GetHostName() obj = bus.get_object( DBUS_NAME, self.server.ServiceBrowserNew( IF_UNSPEC, PROTO_UNSPEC, AVAHI_SERVICE_NAME, AVAHI_SERVICE_DOMAIN, dbus.UInt32(0) ) ) browser = dbus.Interface(obj, DBUS_INTERFACE_SERVICE_BROWSER) browser.connect_to_signal('ItemNew', self._new_service) browser.connect_to_signal('ItemRemove', self._remove_service) def _new_service(self, interface, protocol, name, type, domain, flags): """ DBus callback when a new service is detected """ #Dont show networked dataproviders on localhost unless we are #a development release if not conduit.IS_DEVELOPMENT_VERSION and flags & LOOKUP_RESULT_OUR_OWN: return service = self.server.ResolveService( interface, protocol, name, type, domain, PROTO_UNSPEC, dbus.UInt32(0), reply_handler = self._resolve_service, error_handler = self._resolve_error ) def _resolve_service(self, interface, protocol, name, stype, domain, host, aprotocol, address, port, txt, flags): """ Dbus callback """ extra_info = txt_array_to_string_array(txt) extra = txt_array_to_dict(extra_info) log.debug("Resolved conduit service %s on %s - %s:%s\nExtra Info: %s" % (name, host, address, port, extra_info)) # Check if the service is local and then check the # conduit versions are identical if extra.get("protocol-version", None) == PROTOCOL_VERSION: self.detected_cb(str(name), str(host), str(address), str(port), extra_info) else: log.debug("Ignoring %s (version: %s, protocol version: %s)" % ( name, extra.get("version", "unknown"), extra.get("protocol-version", "unknown"))) def _remove_service(self, interface, protocol, name, type, domain, flags): """ Dbus callback when a service is removed """ self.removed_cb(str(name)) def _resolve_error(self, error): """ Dbus callback when a service details cannot be resolved """ log.warn("Avahi/D-Bus error: %s" % repr(error)) conduit-0.3.17/conduit/modules/NetworkModule/__init__.py0000644000175000017500000000000111172176633020213 00000000000000 conduit-0.3.17/conduit/modules/BackpackModule/0000777000175000017500000000000011326117101016227 500000000000000conduit-0.3.17/conduit/modules/BackpackModule/Makefile.am0000644000175000017500000000024111172176633020212 00000000000000SUBDIRS = backpack conduit_handlersdir = $(libdir)/conduit/modules/BackpackModule conduit_handlers_PYTHON = BackpackModule.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/modules/BackpackModule/backpack/0000777000175000017500000000000011326117101017766 500000000000000conduit-0.3.17/conduit/modules/BackpackModule/backpack/COPYING0000644000175000017500000000206511321406054020743 00000000000000Copyright (c) 2006 Dustin Sallings Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. conduit-0.3.17/conduit/modules/BackpackModule/backpack/Makefile.am0000644000175000017500000000022011172176633021746 00000000000000conduit_handlersdir = $(libdir)/conduit/modules/BackpackModule/backpack conduit_handlers_PYTHON = backpack.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/modules/BackpackModule/backpack/backpack.py0000644000175000017500000005501711321406055022027 00000000000000#!/usr/bin/env python """ Interface to the Backpack API as specified at the following location: http://developer.37signals.com/backpack/ Example: # Get a specific Page instance. bp=backpack.Backpack("http://yourusername.backpackit.com/", "yourApiKeyAsSeenOnYourAccountPage") thePage=bp.page.get(23852) # Schedule a reminder for two hours from now bp.reminder.create("Do this", backpack.formatTime(backpack.getRelativeTime("later"))) """ # Copyright (c) 2005 Dustin Sallings # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # # import os import sys import time import urllib2 import datetime import exceptions import xml.dom.minidom try: False except NameError: True=1 False=0 TIMEFMT="%Y-%m-%d %H:%M:%S" def parseTime(timeString): """Parse a timestamp from a backpack response.""" return(time.mktime(time.strptime(timeString, TIMEFMT))) def formatTime(t): """Format a timestamp for an API call""" return(time.strftime(TIMEFMT, time.localtime(t))) def getRelativeTime(rel, t=None): """Get the time relative to the specified time (default to now). Allowed relative terms: * fifteen - fifteen minutes from now * nexthour - five minutes after the beginning of the next hour * later - two hours from now * morning - 10:00 * afternoon - 14:00 * evening - 19:00 * coupledays - two days from now * nextweek - seven days from now """ if t is None: t=time.time() now=datetime.datetime.fromtimestamp(t) rv=t if rel == 'fifteen': # Fifteen minutes later rv += (15 * 60) elif rel == 'later': # Two hours later rv += 7200 elif rel == 'nexthour': # Top of next hour # Increment by an hour rv += 3600 # Increment an hour then=datetime.datetime.fromtimestamp(rv) # Then set the hour and minute then=datetime.datetime(then.year, then.month, then.day, then.hour, 5, 0) rv=time.mktime(then.timetuple()) elif rel == 'morning': then=datetime.datetime(now.year, now.month, now.day, 10, 0, 0) rv=time.mktime(then.timetuple()) elif rel == 'afternoon': then=datetime.datetime(now.year, now.month, now.day, 14, 0, 0) rv=time.mktime(then.timetuple()) elif rel == 'evening': then=datetime.datetime(now.year, now.month, now.day, 19, 0, 0) rv=time.mktime(then.timetuple()) elif rel == 'coupledays': rv=t + (86400 * 2) elif rel == 'nextweek': rv=t + (86400 * 7) else: raise ValueError("Unknown rel type: " + rel) # Make sure the time is in the relative future while rv < t: rv += 86400 return rv class BackpackError(exceptions.Exception): """Root exception thrown when a backpack error occurs.""" def __init__(self, code, msg): exceptions.Exception.__init__(self, msg) self.code=code; self.msg=msg def __repr__(self): return "" % (self.code, self.msg) class PageLimitExceeded(BackpackError): """Exception thrown when an attempt to create a page fails with a 403.""" def __init__(self, msg): BackpackError.__init__(self, 403, msg) class BackpackAPI(object): """Interface to the backpack API""" debug=False url=None key=None def __init__(self, u, k, debug=False): """Get a Backpack object to the given URL and key""" if u[-1] == '/': u=u[:-1] self.url=u self.key=k self.debug=debug def _parseListItems(self, document): """Parses list items from from a minidom document Returns a list of (id, completed boolean, item text) """ rv=[] for item in document.getElementsByTagName("item"): rv.append((int(item.getAttribute("id")), item.getAttribute("completed") == "true", unicode(item.firstChild.data))) return rv def _parseLists(self, document): rv=[] for list in document.getElementsByTagName("list"): rv.append( (int(list.getAttribute("id")), unicode(list.getAttribute("name"))) ) return rv def _parseNotes(self, document): rv=[] for note in document.getElementsByTagName("note"): rv.append( (int(note.getAttribute("id")), unicode(note.getAttribute("title")), parseTime(note.getAttribute("created_at")), unicode(note.firstChild.data).strip())) return rv # Parse a backpack document, throwing a BackpackError if the document # indicates an exception def _parseDocument(self, docString): document=xml.dom.minidom.parseString(docString) # Check for error responseEl=document.getElementsByTagName("response")[0] if responseEl.getAttribute("success") != "true": er=responseEl.getElementsByTagName("error")[0] raise BackpackError(int(er.getAttribute("code")), unicode(er.firstChild.data)) return document # Perform the actual call def _call(self, path, data=""): p={'token':self.key, 'extra':data} reqData="""%(token)s%(extra)s""" % p theUrl=self.url + path if self.debug: print ">>(%s)\n%s" % (theUrl, reqData) req=urllib2.Request(theUrl, reqData, {'X-POST_DATA_FORMAT': 'xml'}) opener=urllib2.build_opener() o=opener.open(req) result=o.read() o.close() if self.debug: print "<< %s" % (result,) return self._parseDocument(result) class ReminderAPI(BackpackAPI): """Backpack reminder API.""" def __init__(self, u, k, debug=False): """Get a Reminder object to the given URL and key""" BackpackAPI.__init__(self, u, k, debug) # parse the reminders xml def _parseReminders(self, document): rv=[] reminders=document.getElementsByTagName("reminder") for r in reminders: timestamp=parseTime(r.getAttribute("remind_at")) id=int(r.getAttribute("id")) message=unicode(r.firstChild.data) rv.append((timestamp, id, message)) return rv def list(self): """Get a list of upcoming reminders. Returns a list of (timestamp, id, message)""" x=self._call("/ws/reminders") return self._parseReminders(x) def create(self, content, at=None): """Create a reminder with the given content. If a time is not given, the content is expected to start with the +minute or +hour:minute format as specified by backpack.""" val="" if at is None: if content[0] != '+': raise ValueError("No at, and content not beginning with +") val="""%s""" % (content,) else: val="%s%s" \ % (content, at) x=self._call("/ws/reminders/create", "%s" % (val,)) return self._parseReminders(x) def update(self, id, content, at=None): """Update the given reminder. If a time is not given, only the content will be updated.""" val="" if at is None: val="""%s""" % (content,) else: val="%s%s" \ % (content, at) x=self._call("/ws/reminders/update/%d" % (id, ), "%s" % (val, )) return self._parseReminders(x) def destroy(self, id): """Delete a reminder""" x=self._call("/ws/reminders/destroy/%d" % (id,)) class Page(object): """An individual page. * Notes are in the form of (id, title, createdDate, msg). * Links are in the form of (id, title) * Tags are in the form of (id, name) """ title=None id=None emailAddress=None notes=[] lists=[] tags=[] class SearchResult(object): """An individual search result. The object supports the ability to retrieve its full representation based on the type of result. Retrieving a writeboard only returns the id at this point, because no Writeboard API is currently supported""" bp=None # Backpack instance to enable get pageId=None pageTitle=None type=None containerId=None def get(self): """Returns the appropriate representation of itself based type list: Returns the result of Backpack.list.get note: Returns the result of Backpack.notes.list writeboard: Returns (page id, page title, writeboard id) email: Returns the result of Backpack.email.get """ if self.type == 'list': return self.bp.list.get(self.pageId, self.containerId) elif self.type == 'note': return self.bp.notes.list(self.pageId) elif self.type == 'writeboard_link': return (self.pageId, self.pageTitle, self.containerId) elif self.type == 'email': return self.bp.email.get(self.pageId, self.containerId) class PageAPI(BackpackAPI): """Backpack page API.""" def __init__(self, u, k, debug=False): """Get a Page object to the given URL and key""" BackpackAPI.__init__(self, u, k, debug) # parse the page list xml def _parsePageList(self, document): rv=[] reminders=document.getElementsByTagName("page") for r in reminders: id=int(r.getAttribute("id")) scope=unicode(r.getAttribute("scope")) title=unicode(r.getAttribute("title")) rv.append((id, scope, title)) return rv def _parseSearchResult(self, document): rv = [] pages = document.getElementsByTagName("page") for p in pages: for send in p.getElementsByTagName("send"): sr = SearchResult() sr.bp = Backpack(self.url, self.key, self.debug) sr.pageId = int(p.getAttribute("id")) sr.pageTitle = unicode(p.getAttribute("title")) sr.type = send.firstChild.data sr.containerId = int(send.getAttribute("id")) rv.append(sr) return rv # get an iterator on the named node of the zeroth node of the given list def __linkIter(self, node, container, elementname): rv=[] nlist=node.getElementsByTagName(container) if len(nlist) > 0: rv=nlist[0].getElementsByTagName(elementname) return rv # Parse the individual page xml def _parsePage(self, document): rv=Page() page=document.getElementsByTagName("page")[0] rv.title=page.getAttribute("title") rv.id=int(page.getAttribute("id")) rv.emailAddress=page.getAttribute("email_address") rv.notes=self._parseNotes(page) rv.lists=self._parseLists(page) for tag in self.__linkIter(page, "tags", "tag"): rv.tags.append( (int(tag.getAttribute("id")), unicode(tag.getAttribute("name")))) return rv def list(self): """List all pages Returns a list of (id, scope, title) tuples. """ x=self._call("/ws/pages/all") return self._parsePageList(x) def get(self, id): """Get a given page by id. Returns a Page instance. """ x=self._call("/ws/page/%d" % (id,)) return self._parsePage(x) def create(self, title): """Create a new page. Returns (id, title)""" data="%s" \ % (title,) try: x=self._call("/ws/pages/new", data) except urllib2.HTTPError, e: # A 403 occurs when a page already exists. if e.code == 403: raise PageLimitExceeded(title) else: raise e p=x.getElementsByTagName("page")[0] return (int(p.getAttribute("id")), unicode(p.getAttribute("title"))) def destroy(self, id): """Delete a page""" x=self._call("/ws/page/%d/destroy" % (id,)) def search(self, term): """Search for pages containing the term Returns a list of SearchResult objects. """ data="%s" % term x = self._call("/ws/pages/search", data) return self._parseSearchResult(x) def updateTitle(self, id, title): """Update a title""" data="%s" % (title,) x=self._call("/ws/page/%d/update_title" % (id,), data) def duplicate(self, id): """Duplicate a page, get the new (id, title)""" x=self._call("/ws/page/%d/duplicate" % (id,)) p=x.getElementsByTagName("page")[0] return (int(p.getAttribute("id")), unicode(p.getAttribute("title"))) def share(self, id, emailAddresses=[], isPublic=False): """Share this page with others.""" data="" if len(emailAddresses) > 0: data+="%s" \ % (' '.join(emailAddresses),) data+="%d" % (isPublic,) x=self._call("/ws/page/%d/share" % (id,), data) def unshare(self, id): """Unshare a page.""" x=self._call("/ws/page/%d/unshare_friend_page" % (id,)) def email(self, id): """Email yourself a page.""" x=self._call("/ws/page/%d/email" % (id,)) class ExportAPI(PageAPI, ReminderAPI): """Export page API.""" def __init__(self, u, k, debug=False): """Get an Export object to the given URL and key""" BackpackAPI.__init__(self, u, k, debug) def _parseDocument(self, docString): document=xml.dom.minidom.parseString(docString) responseEl=document.getElementsByTagName("backpack")[0] return document def _parseBackup(self, x): return self._parsePageList(x), self._parseReminders(x) def export(self): """Get export of all data from BackPack returns (pages, reminders) """ x=self._call("/ws/account/export") return(self._parseBackup(x)) class ListAPI(BackpackAPI): """Backpack list API.""" def __init__(self, u, k, debug=False): """Get a ListAPI object to the given URL and key""" BackpackAPI.__init__(self, u, k, debug) def create(self, pageId, name): """Creates a new list on the given page Returns (id, name) """ data = "%s" % name x = self._call("/ws/page/%d/lists/add" % pageId, data) l = x.getElementsByTagName("list")[0] return ( int(l.getAttribute("id")), unicode(l.getAttribute("name")) ) def update(self, pageId, listId, name): """Changes a list's name""" data = "%s" % name self._call("/ws/page/%d/lists/update/%d" % (pageId, listId), data) def destroy(self, pageId, listId): self._call("/ws/page/%d/lists/destroy/%d" % (pageId, listId)) def list(self, pageId): """Get a list of lists on the given page list of (id, name) """ x = self._call("/ws/page/%d/lists/list" % pageId) return self._parseLists(x) class ListItemAPI(BackpackAPI): """Backpack list API.""" MOVE_LOWER='move_lower' MOVE_HIGHER='move_higher' MOVE_TO_TOP='move_to_top' MOVE_TO_BOTTOM='move_to_bottom' def __init__(self, u, k, debug=False): """Get a ListAPI object to the given URL and key""" BackpackAPI.__init__(self, u, k, debug) def list(self, pageId, listId): """Get a list of the items on the given list. list of (id, completedBoolean, text) """ x=self._call("/ws/page/%d/lists/%d/items/list" % (pageId, listId)) return self._parseListItems(x) def create(self, pageId, listId, text): """Create a new entry. Return (id, completedBoolean, text)""" data="%s" % (text,) x=self._call("/ws/page/%d/lists/%d/items/add" % (pageId, listId), data) return self._parseListItems(x)[0] def update(self, pageId, listId, id, text): """Update an entry.""" data="%s" % (text,) x=self._call("/ws/page/%d/lists/%d/items/update/%d" % (pageId, listId, id), data) def toggle(self, pageId, listId, id): """Toggle an entry.""" x=self._call("/ws/page/%d/lists/%d/items/toggle/%d" % (pageId, listId, id)) def destroy(self, pageId, listId, id): """Destroy an entry.""" x=self._call("/ws/page/%d/lists/%d/items/destroy/%d" % (pageId, listId, id)) def move(self, pageId, listId, id, direction): """Move an entry. direction can be 'move_lower', 'move_higher', 'move_to_top', and 'move_to_bottom' """ data="%s" % (direction,) x=self._call("/ws/page/%d/lists/%d/items/move/%d" % (pageId, listId, id), data) class NoteAPI(BackpackAPI): """API to Backpack Notes for a page.""" def __init__(self, u, k, debug=False): """Get a NoteAPI object to the given URL and key""" BackpackAPI.__init__(self, u, k, debug) def list(self, pageId): """Get a list of the items on the given page. list of (id, title, timestamp, text) """ x=self._call("/ws/page/%d/notes/list" % pageId) return self._parseNotes(x) def create(self, pageId, title, body): """Create a new entry. Return (id, title, timestamp, text)""" data="%s%s" % (title, body) x=self._call("/ws/page/%d/notes/create" % (pageId,), data) return self._parseNotes(x)[0] def update(self, pageId, noteId, title, body): """Update a note.""" data="%s%s" % (title, body) x=self._call("/ws/page/%d/notes/update/%d" % (pageId, noteId), data) def destroy(self, pageId, noteId): """Delete a note.""" x=self._call("/ws/page/%d/notes/destroy/%d" % (pageId, noteId)) class EmailAPI(BackpackAPI): """The backpack Email API""" def __init__(self, u, k, debug=False): """Get a ListAPI object to the given URL and key""" BackpackAPI.__init__(self, u, k, debug) def _parseEmails(self, x): rv=[] for item in x.getElementsByTagName("email"): rv.append((int(item.getAttribute("id")), unicode(item.getAttribute("subject")), parseTime(item.getAttribute("created_at")), item.firstChild.data)) return rv def list(self, pageId): """Get a list of the email on the given page. list of (id, subject, timestamp, text) """ x=self._call("/ws/page/%d/emails/list" % pageId) return self._parseEmails(x) def get(self, pageId, mailId): """Get an individual email from the given page. (id, subject, timestamp, text) """ x=self._call("/ws/page/%d/emails/show/%d" % (pageId, mailId)) return self._parseEmails(x)[0] def destroy(self, pageId, mailId): """Delete an email.""" x=self._call("/ws/page/%d/emails/destroy/%d" % (pageId, mailId)) class TagAPI(BackpackAPI): """The Backpack Tags API.""" def __init__(self, u, k, debug=False): """Get a TagAPI object to the given URL and key""" BackpackAPI.__init__(self, u, k, debug) def _parseTaggedPageList(self, x): rv=[] for item in x.getElementsByTagName("page"): rv.append((int(item.getAttribute("id")), unicode(item.getAttribute("title")))) return rv def pagesForTag(self, tagId): """Get a list of the pages with a given tag ID. return a list of (id, title) """ x=self._call("/ws/tags/select/%d" % tagId) return self._parseTaggedPageList(x) def _cleanTags(self, tags): """Clean the given tags for API invocation.""" cleanedTags=[] for t in tags: if t.find('"') != -1: raise exceptions.ValueError("Tags can't have quotes.") if t.find(' ') != -1: cleanedTags.append('"%s"' % t) else: cleanedTags.append(t) return cleanedTags def tagPage(self, pageId, tags): """Tag a page with a list of words.""" data="%s" % ' '.join(self._cleanTags(tags)) x=self._call("/ws/page/%d/tags/tag" % pageId, data) class Backpack(object): """Interface to all of the backpack APIs. * page - PageAPI object * reminder - ReminderAPI object * list - ListAPI object * notes - NoteAPI object * tags - TagAPI object * email - EmailAPI object * export - ExportAPI object """ reminder=None page=None list=None notes=None email=None tags=None export=None def __init__(self, url, key, debug=False): """Initialize the backpack APIs.""" self.reminder=ReminderAPI(url, key, debug) self.page=PageAPI(url, key, debug) self.list=ListAPI(url, key, debug) self.listItem=ListItemAPI(url, key, debug) self.notes=NoteAPI(url, key, debug) self.email=EmailAPI(url, key, debug) self.tags=TagAPI(url, key, debug) self.export=ExportAPI(url, key, debug) conduit-0.3.17/conduit/modules/BackpackModule/backpack/Makefile.in0000644000175000017500000003252611326116726021773 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/modules/BackpackModule/backpack DIST_COMMON = $(conduit_handlers_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in COPYING ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduit_handlersdir)" py_compile = $(top_srcdir)/py-compile DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ conduit_handlersdir = $(libdir)/conduit/modules/BackpackModule/backpack conduit_handlers_PYTHON = backpack.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/modules/BackpackModule/backpack/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/modules/BackpackModule/backpack/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduit_handlersPYTHON: $(conduit_handlers_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduit_handlersdir)" || $(MKDIR_P) "$(DESTDIR)$(conduit_handlersdir)" @list='$(conduit_handlers_PYTHON)'; dlist=; list2=; test -n "$(conduit_handlersdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduit_handlersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduit_handlersdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduit_handlersdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduit_handlersdir)" $$dlist; \ fi; \ else :; fi uninstall-conduit_handlersPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_handlers_PYTHON)'; test -n "$(conduit_handlersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$fileso tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(conduit_handlersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-conduit_handlersPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-conduit_handlersPYTHON .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-conduit_handlersPYTHON \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am \ uninstall-conduit_handlersPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/modules/BackpackModule/BackpackModule.py0000644000175000017500000001340011321403566021370 00000000000000import os import sys import traceback import datetime from gettext import gettext as _ import logging log = logging.getLogger("modules.Backpack") import conduit import conduit.utils as Utils import conduit.dataproviders.DataProvider as DataProvider import conduit.Exceptions as Exceptions from conduit.datatypes import Rid import conduit.datatypes.Note as Note Utils.dataprovider_add_dir_to_path(__file__, "backpack") import backpack MODULES = { "BackpackNoteSink" : { "type": "dataprovider" } } log.info("Module Information: %s" % Utils.get_module_information(backpack, None)) class BackpackBase(DataProvider.DataProviderBase): _configurable_ = True def __init__(self, *args): DataProvider.DataProviderBase.__init__(self) self.update_configuration( username = "", apikey = "" ) self.ba = None self.loggedIn = False def initialize(self): return True def is_configured (self, isSource, isTwoWay): if len(self.username) < 1: return False if len(self.apikey) < 1: return False return True def refresh(self): if self.loggedIn == False: username = "http://" + self.username + ".backpackit.com/" try: self.ba = backpack.Backpack(username,self.apikey) self.loggedIn = True except backpack.BackpackError: log.warn("Error logging into backpack (username %s)" % self.username) raise Exceptions.RefreshError class BackpackNoteSink(DataProvider.DataSink, BackpackBase): _name_ = _("Backpack Notes") _description_ = _("Store things in Backpack Notes") _category_ = conduit.dataproviders.CATEGORY_NOTES _module_type_ = "sink" _in_type_ = "note" _out_type_ = "note" _icon_ = "backpack" def __init__(self, *args): DataProvider.DataSink.__init__(self) BackpackBase.__init__(self, *args) self.update_configuration( storeInPage = 'Conduit', ) self.pageID = None #there is no way to pragmatically see if a note exists so we list them #and cache the results. #title:(uid,timestamp,text) self._notes = {} def refresh(self): DataProvider.DataSink.refresh(self) BackpackBase.refresh(self) #First search for the pageID of the named page to put notes in if self.pageID is None: pages = self.ba.page.list() for uid,scope,title in pages: if title == self.storeInPage: self.pageID = uid log.debug("Found Page %s:%s:%s" % (uid,scope,title)) #Didnt find the page so create one if self.pageID is None: try: self.pageID, title = self.ba.page.create(self.storeInPage) log.info("Created page %s (id: %s)" % (title, self.pageID)) except backpack.BackpackError, err: log.info("Could not create page to store notes in (%s)" % err) raise Exceptions.RefreshError #Need to cache the existing note titles self._notes = {} for uid, title, timestamp, text in self.ba.notes.list(self.pageID): self._notes[title] = (uid,timestamp,text) log.debug("Found existing note: %s (uid:%s timestamp:%s)" % (title, uid, timestamp)) def config_setup(self, config): config.add_section(_("Account details")) config.add_item(_("Login"), "text", config_name = "username" ) config.add_item(_("API key"), "text", config_name = "apikey" ) config.add_section(_("Saved notes")) config.add_item(_("Save notes in page"), "text", config_name = "storeInPage" ) def get(self, LUID): for title in self._notes: uid,timestamp,content = self._notes[title] if uid == LUID: n = Note.Note( title=title, #FIXME: Backpack doesnt have mtime, only creation time modified=datetime.datetime.fromtimestamp(timestamp), contents=content ) n.set_UID(LUID) return n raise Exceptions.SyncronizeError("Could not find note %s" % LUID) def get_all(self): return [n[0] for n in self._notes.values()] def put(self, note, overwrite, LUID=None): DataProvider.DataSink.put(self, note, overwrite, LUID) #If all that went well then actually store some notes. uid = None try: if note.title in self._notes: log.debug("Updating Existing") uid,oldtimestamp,oldcontent = self._notes[note.title] self.ba.notes.update(self.pageID,uid,note.title,note.contents) else: log.debug("Creating New (title: %s)" % note.title) uid,title,timestamp,content = self.ba.notes.create(self.pageID,note.title,note.contents) self._notes[title] = (uid,timestamp,content) except backpack.BackpackError, err: raise Exceptions.SyncronizeError("Could not sync note (%s)" % err) return Rid(uid=str(uid), mtime=None, hash=hash(None)) def delete(self, LUID): if LUID in self._notes.values(): try: self.ba.notes.destroy(self.pageID,LUID) except backpack.BackpackError, err: log.info("Could delete note (%s)" % err) raise Exceptions.SyncronizeError else: log.info("Could not find note") def get_UID(self): return "%s:%s" % (self.username,self.storeInPage) conduit-0.3.17/conduit/modules/BackpackModule/Makefile.in0000644000175000017500000005060211326116726020227 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/modules/BackpackModule DIST_COMMON = $(conduit_handlers_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduit_handlersdir)" py_compile = $(top_srcdir)/py-compile RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = backpack conduit_handlersdir = $(libdir)/conduit/modules/BackpackModule conduit_handlers_PYTHON = BackpackModule.py all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/modules/BackpackModule/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/modules/BackpackModule/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduit_handlersPYTHON: $(conduit_handlers_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduit_handlersdir)" || $(MKDIR_P) "$(DESTDIR)$(conduit_handlersdir)" @list='$(conduit_handlers_PYTHON)'; dlist=; list2=; test -n "$(conduit_handlersdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduit_handlersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduit_handlersdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduit_handlersdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduit_handlersdir)" $$dlist; \ fi; \ else :; fi uninstall-conduit_handlersPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_handlers_PYTHON)'; test -n "$(conduit_handlersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$fileso # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(conduit_handlersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-conduit_handlersPYTHON install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-conduit_handlersPYTHON .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-local \ ctags ctags-recursive distclean distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-conduit_handlersPYTHON install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-conduit_handlersPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/modules/TomboyModule.py0000644000175000017500000002214411321403566016302 00000000000000import dbus import dbus.glib import logging import string log = logging.getLogger("modules.Tomboy") import conduit import conduit.TypeConverter as TypeConverter import conduit.dataproviders.DataProvider as DataProvider import conduit.dataproviders.AutoSync as AutoSync import conduit.Exceptions as Exceptions import conduit.datatypes.Note as Note import conduit.datatypes.File as File import conduit.utils as Utils from gettext import gettext as _ MODULES = { "TomboyNoteTwoWay" : { "type": "dataprovider" }, "TomboyNoteConverter" : { "type": "converter" } } class TomboyNote(Note.Note): """ Stores both the text and xml representations of the note """ def __init__(self, title, contents, xml): Note.Note.__init__(self, title, contents) self.xml = xml def get_xml(self): return self.xml def __getstate__(self): data = Note.Note.__getstate__(self) data["xml"] = self.xml return data def __setstate__(self, data): self.xml = data["xml"] Note.Note.__setstate__(self, data) class TomboyNoteConverter(TypeConverter.Converter): NOTE_EXTENSION = ".xml" ILLEGAL_TITLE_CHARS = " /#&$?[]{}()\\" def __init__(self): self.conversions = { "note,note/tomboy" : self.note_to_tomboy_note, "note/tomboy,file" : self.tomboy_note_to_file, "file,note/tomboy" : self.file_to_tomboy_note, } def note_to_tomboy_note(self, note, **kwargs): n = TomboyNote( title=note.get_title(), contents=note.get_contents(), xml=None ) return n def tomboy_note_to_file(self, note, **kwargs): content = note.get_xml() #Old tomboy made this note, fallback to plain text if content == None: content = note.get_contents() #replace the following characters in the note #title with an underscore filename = note.get_title().translate( string.maketrans( self.ILLEGAL_TITLE_CHARS, "_"*len(self.ILLEGAL_TITLE_CHARS) ) ) f = File.TempFile(content) f.force_new_filename(filename) f.force_new_file_extension(self.NOTE_EXTENSION) return f def file_to_tomboy_note(self, f, **kwargs): title,ext = f.get_filename_and_extension() text = f.get_contents_as_text() #A tomboy formatted XML file if text.startswith('') > 0: note = TomboyNote( title=Utils.xml_extract_value_from_tag("title", text), contents=None, xml=text ) #A bog standard text file else: note = TomboyNote( title=title, contents=text, xml=None ) return note class TomboyNoteTwoWay(DataProvider.TwoWay, AutoSync.AutoSync): """ LUID is the tomboy uid string """ _name_ = _("Tomboy Notes") _description_ = _("Synchronize your Tomboy notes") _category_ = conduit.dataproviders.CATEGORY_NOTES _module_type_ = "twoway" _in_type_ = "note/tomboy" _out_type_ = "note/tomboy" _icon_ = "tomboy" _configurable_ = False TOMBOY_DBUS_PATH = "/org/gnome/Tomboy/RemoteControl" TOMBOY_DBUS_IFACE = "org.gnome.Tomboy" TOMBOY_MIN_VERSION = (0, 5, 10) TOMBOY_COMPLETE_XML_VERSION = (0 ,9 ,0) def __init__(self, *args): DataProvider.TwoWay.__init__(self) AutoSync.AutoSync.__init__(self) self.notes = [] self.remoteTomboy = None self.supportsCompleteXML = False self._connect_to_tomboy() def _connect_to_tomboy(self): if self.remoteTomboy != None: return True bus = dbus.SessionBus() if Utils.dbus_service_available(TomboyNoteTwoWay.TOMBOY_DBUS_IFACE, bus): obj = bus.get_object(TomboyNoteTwoWay.TOMBOY_DBUS_IFACE, TomboyNoteTwoWay.TOMBOY_DBUS_PATH) app = dbus.Interface(obj, "org.gnome.Tomboy.RemoteControl") version = tuple(int(item) for item in str(app.Version()).split('.')) if version >= TomboyNoteTwoWay.TOMBOY_MIN_VERSION: self.remoteTomboy = app self.remoteTomboy.connect_to_signal("NoteAdded", lambda uid: self.handle_added(str(uid))) self.remoteTomboy.connect_to_signal("NoteSaved", lambda uid: self.handle_modified(str(uid))) self.remoteTomboy.connect_to_signal("NoteDeleted", lambda uid, x: self.handle_deleted(str(uid))) self.supportsCompleteXML = version >= TomboyNoteTwoWay.TOMBOY_COMPLETE_XML_VERSION log.info("Using Tomboy Version %s" % str(version)) return True return False def _update_note(self, uid, note): log.debug("Updating note uid: %s" % uid) if note.get_xml() != None: ok = self.remoteTomboy.SetNoteCompleteXml( uid, note.get_xml() ) else: ok = self.remoteTomboy.SetNoteContents( uid, note.get_contents() ) if not ok: raise Exceptions.SyncronizeError("Error setting Tomboy note content (uri: %s)" % uid) def _get_note_mtime(self, uid): try: timestr = self.remoteTomboy.GetNoteChangeDate(uid) mtime = Utils.datetime_from_timestamp(int(timestr)) except: log.warn("Error parsing tomboy note modification time") mtime = None return mtime def _get_note(self, uid): #Get the whole xml and strip out the tags log.debug("Getting note: %s" % uid) xml = None if self.supportsCompleteXML: xml = str(self.remoteTomboy.GetNoteCompleteXml(uid)) n = TomboyNote( title=str(self.remoteTomboy.GetNoteTitle(uid)), contents=str(self.remoteTomboy.GetNoteContents(uid)), xml=xml ) n.set_UID(str(uid)) n.set_mtime(self._get_note_mtime(uid)) n.set_open_URI(str(uid)) return n def _create_note(self, note): uid = str(self.remoteTomboy.CreateNamedNote(note.get_title())) self._update_note(uid, note) return uid def initialize(self): """ Loads the tomboy source if the user has used tomboy before """ return True def refresh(self): DataProvider.TwoWay.refresh(self) self.notes = [] if self._connect_to_tomboy(): self.notes = [str(i) for i in self.remoteTomboy.ListAllNotes()] else: raise Exceptions.RefreshError("Tomboy not available") def get(self, uri): DataProvider.TwoWay.get(self, uri) return self._get_note(uri) def get_all(self): DataProvider.TwoWay.get_all(self) return self.notes def put(self, note, overwrite, LUID=None): """ Stores a Note in Tomboy. """ DataProvider.TwoWay.put(self, note, overwrite, LUID) log.debug("Put note LUID: %s" % LUID) #Check if the note, or one with same title exists existingNote = None if LUID != None: if self.remoteTomboy.NoteExists(LUID): existingNote = self._get_note(LUID) else: LUID = self.remoteTomboy.FindNote(note.get_title()) if LUID != "": existingNote = self._get_note(str(LUID)) #compare with the existing note if existingNote != None: comp = note.compare(existingNote) log.debug("Comparing new %s with existing %s" % (note.get_title(),existingNote.get_title())) if comp == conduit.datatypes.COMPARISON_EQUAL: log.info("Notes are equal") elif overwrite == True or comp == conduit.datatypes.COMPARISON_NEWER: log.info("Updating note") self._update_note(LUID, note) else: raise Exceptions.SynchronizeConflictError(comp, note, existingNote) else: log.info("Saving new Note") LUID = self._create_note(note) return self.get(LUID).get_rid() def delete(self, LUID): if self.remoteTomboy.NoteExists(LUID): if self.remoteTomboy.DeleteNote(LUID): log.debug("Deleted note %s" % LUID) return log.warn("Error deleting note %s" % LUID) def finish(self, aborted, error, conflict): DataProvider.TwoWay.finish(self) self.notes = [] def get_UID(self): return Utils.get_user_string() conduit-0.3.17/conduit/modules/FspotModule/0000777000175000017500000000000011326117102015624 500000000000000conduit-0.3.17/conduit/modules/FspotModule/Makefile.am0000644000175000017500000000021011172176633017602 00000000000000conduit_handlersdir = $(libdir)/conduit/modules/FspotModule conduit_handlers_PYTHON = FspotModule.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/modules/FspotModule/FspotModule.py0000644000175000017500000002163011321403566020364 00000000000000import os import gobject import dbus import logging log = logging.getLogger("modules.Fspot") import conduit import conduit.utils as Utils import conduit.Exceptions as Exceptions import conduit.dataproviders.DataProvider as DataProvider import conduit.datatypes.Photo as Photo from conduit.datatypes import Rid import conduit.dataproviders.Image as Image from gettext import gettext as _ MODULES = { "FSpotDbusTwoWay" : { "type": "dataprovider" }, } NAME_IDX = 0 ID_IDX = 1 class FSpotDbusTwoWay(Image.ImageTwoWay): _name_ = _("F-Spot") _description_ = _("Synchronize your F-Spot photos") _category_ = conduit.dataproviders.CATEGORY_PHOTOS _icon_ = "f-spot" _configurable_ = True SERVICE_PATH = "org.gnome.FSpot" PHOTOREMOTE_IFACE = "org.gnome.FSpot.PhotoRemoteControl" PHOTOREMOTE_PATH = "/org/gnome/FSpot/PhotoRemoteControl" TAGREMOTE_IFACE = "org.gnome.FSpot.TagRemoteControl" TAGREMOTE_PATH = "/org/gnome/FSpot/TagRemoteControl" def __init__(self, *args): Image.ImageTwoWay.__init__(self) self.update_configuration( tags = ([], self.set_tags, self.get_tags), ) self.enabledTags = [] self.photos = [] self.has_roll = False self.photo_remote = None self.tag_remote = None self._connection_name = None self.list_store = None self._connect_to_fspot() self._hookup_signal_handlers() def set_tags(self, tags): self.enabledTags = [] for tag in tags: self.enabledTags.append(str(tag)) def get_tags(self): return self.enabledTags def _connect_to_fspot(self): bus = dbus.SessionBus() if Utils.dbus_service_available(FSpotDbusTwoWay.SERVICE_PATH, bus): #If the connection was broken and remade, the connection name changes #and the connection objects no longer works. #F-Spot restarting does exactly that, so we need to remake our objects. connection_name = bus.get_name_owner(FSpotDbusTwoWay.SERVICE_PATH) if self._connection_name != connection_name: self.photo_remote = None self.tag_remote = None self._connection_name = connection_name if self.photo_remote == None: try: remote_object = bus.get_object(FSpotDbusTwoWay.SERVICE_PATH, FSpotDbusTwoWay.PHOTOREMOTE_PATH) self.photo_remote = dbus.Interface(remote_object, FSpotDbusTwoWay.PHOTOREMOTE_IFACE) except dbus.exceptions.DBusException: print "*"*34 self.photo_remote = None if self.tag_remote == None: try: remote_object = bus.get_object(FSpotDbusTwoWay.SERVICE_PATH, FSpotDbusTwoWay.TAGREMOTE_PATH) self.tag_remote = dbus.Interface(remote_object, FSpotDbusTwoWay.TAGREMOTE_IFACE) except dbus.exceptions.DBusException: print "#"*34 self.tag_remote = None else: self.photo_remote = None self.tag_remote = None #need both tag and photo remote to be OK return self.tag_remote != None and self.photo_remote != None def _hookup_signal_handlers(self): """ This makes sure the photo remotes are set to none when f-spot is closed. """ bus = dbus.SessionBus() bus.add_signal_receiver(self.handle_photoremote_down, dbus_interface=FSpotDbusTwoWay.PHOTOREMOTE_IFACE, signal_name="RemoteDown") def _get_all_tags(self): return self.tag_remote.GetTagNames () def initialize(self): return True def refresh(self): Image.ImageTwoWay.refresh(self) self.photos = [] if self._connect_to_fspot(): self.photos = self.photo_remote.Query (self.enabledTags) else: raise Exceptions.RefreshError("FSpot not available") def get_all(self): """ return the list of photo id's """ Image.ImageTwoWay.get_all(self) return [str(photo_id) for photo_id in self.photos] def get(self, LUID): """ Get the File object for a file with a given id """ Image.ImageTwoWay.get(self, LUID) properties = self.photo_remote.GetPhotoProperties (LUID) #FIXME: Oh python-dbus, why wont you marshall dbus.String to str... photouri = str(properties['Uri']) tags = str(properties['Tags']).split(',') f = Photo.Photo(URI=photouri) f.set_UID(LUID) f.set_open_URI(photouri) f.set_tags(tags) f.set_caption(str(properties['Description'])) return f def _upload_photo (self, uploadInfo): """ Import a file into the f-spot catalog """ # Check if remote is read only if self.photo_remote.IsReadOnly (): raise Exceptions.SyncronizeError (_("F-Spot DBus interface is operating in read-only mode")) # create roll if necessary if not self.has_roll: self.prepare_roll () # start with enabled tags from gui, they exist in fspot for sure tags = list(self.enabledTags) # add tags from upload info for tag in uploadInfo.tags: self._create_tag (tag) tags.append (tag) # import the photo try: id = self.photo_remote.ImportPhoto (uploadInfo.url, True, tags) return Rid(uid=str(id)) except: raise Exceptions.SynchronizeError ('Import Failed') def delete(self, LUID): """ Remove the photo from the f-spot catalog TODO: add support for deleting from drive also """ try: self.photo_remote.RemovePhoto (LUID) except Exception, ex: # the photo is probably gone in f-spot log.warn("Delete failed (%s)", ex) def finish(self, aborted, error, conflict): """ Round up, and don't forget the finish the import roll """ Image.ImageTwoWay.finish(self) self.photos = [] self.finish_roll () def prepare_roll (self): self.photo_remote.PrepareRoll () self.has_roll = True def finish_roll (self): if not self.has_roll: return self.photo_remote.FinishRoll () self.has_roll = False def _create_tag (self, tag): # Check if remote is read only if self.tag_remote.IsReadOnly (): return # Now see if we can create the tag try: self.tag_remote.GetTagByName (tag) except: self.tag_remote.CreateTag (tag) def handle_photoremote_down(self): self.photo_remote = None self.tag_remote = None def config_setup(self, config): RUNNING_MESSAGE = _("F-Spot is running") STOPPED_MESSAGE = _("Please start F-Spot or activate the D-Bus Extension") def start_fspot(button): #would be cleaner if we could autostart using dbus, #dbus.SessionBus().start_service_by_name(self.SERVICE_PATH) gobject.spawn_async( ("f-spot",), flags=gobject.SPAWN_SEARCH_PATH|gobject.SPAWN_STDOUT_TO_DEV_NULL|gobject.SPAWN_STDERR_TO_DEV_NULL ) def watch(name): connected = bool(name and self._connect_to_fspot()) start_fspot_config.enabled = not connected tags_config.enabled = connected if connected: tags_config.choices = self._get_all_tags() else: tags_config.choices = tags_config.value add_tags_section.enabled = connected if connected: status_label.value = RUNNING_MESSAGE else: status_label.value = STOPPED_MESSAGE status_label = config.add_item(_("Status"), "label") start_fspot_config = config.add_item(_("Start F-Spot"), "button", initial_value = start_fspot ) config.add_section(_("Tags")) tags_config = config.add_item(_("Tags"), "list", config_name = 'tags', choices = self.enabledTags, ) def add_tag_cb(button): text = tag_name_config.get_value() newtags = text.split(',') for tag in newtags: self._create_tag (tag.strip ()) tags_config.set_choices(self._get_all_tags()) tag_name_config.set_value('') add_tags_section = config.add_section(_("Add tags")) tag_name_config = config.add_item(_("Tag name"), "text", initial_value = "" ) config.add_item(_("Add tag"), "button", initial_value = add_tag_cb ) dbus.SessionBus().watch_name_owner(self.SERVICE_PATH, watch) def get_UID(self): return Utils.get_user_string() conduit-0.3.17/conduit/modules/FspotModule/Makefile.in0000644000175000017500000003244111326116727017625 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/modules/FspotModule DIST_COMMON = $(conduit_handlers_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduit_handlersdir)" py_compile = $(top_srcdir)/py-compile DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ conduit_handlersdir = $(libdir)/conduit/modules/FspotModule conduit_handlers_PYTHON = FspotModule.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/modules/FspotModule/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/modules/FspotModule/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduit_handlersPYTHON: $(conduit_handlers_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduit_handlersdir)" || $(MKDIR_P) "$(DESTDIR)$(conduit_handlersdir)" @list='$(conduit_handlers_PYTHON)'; dlist=; list2=; test -n "$(conduit_handlersdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduit_handlersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduit_handlersdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduit_handlersdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduit_handlersdir)" $$dlist; \ fi; \ else :; fi uninstall-conduit_handlersPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_handlers_PYTHON)'; test -n "$(conduit_handlersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$fileso tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(conduit_handlersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-conduit_handlersPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-conduit_handlersPYTHON .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-conduit_handlersPYTHON \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am \ uninstall-conduit_handlersPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/modules/BoxDotNetModule/0000777000175000017500000000000011326117102016377 500000000000000conduit-0.3.17/conduit/modules/BoxDotNetModule/BoxDotNetAPI/0000777000175000017500000000000011326117102020577 500000000000000conduit-0.3.17/conduit/modules/BoxDotNetModule/BoxDotNetAPI/boxdotnet.py0000644000175000017500000002171411172176633023115 00000000000000""" Python bindings for the Box.net API Copyright (c) 2007 Thomas Van Machelen Copyright (c) 2007 John Stowers Upload, handler and XMLNode code adapted from flickrapi: Copyright (c) 2007 Brian "Beej Jorgensen" Hall Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import urllib import urllib2 import mimetools import mimetypes import os import sys from xml.dom.minidom import parseString import xml.dom def get_content_type(file_path): return mimetypes.guess_type(file_path)[0] or 'application/octet-stream' ######################################################################## # XML functionality ######################################################################## #----------------------------------------------------------------------- class XMLNode: """XMLNode -- generic class for holding an XML node xmlStr = \"\"\" Name0 Name1 \"\"\" f = XMLNode.parseXML(xmlStr) print f.elementName # xml print f['foo'] # 32 print f.name # [, ] print f.name[0].elementName # name print f.name[0]["bar"] # 10 print f.name[0].elementText # Name0 print f.name[1].elementName # name print f.name[1]["bar"] # 11 print f.name[1]["baz"] # 12 """ def __init__(self): """Construct an empty XML node.""" self.elementName="" self.elementText="" self.attrib={} self.xml="" def __setitem__(self, key, item): """Store a node's attribute in the attrib hash.""" self.attrib[key] = item def __getitem__(self, key): """Retrieve a node's attribute from the attrib hash.""" return self.attrib[key] #----------------------------------------------------------------------- @classmethod def parseXML(cls, xmlStr, storeXML=False): """Convert an XML string into a nice instance tree of XMLNodes. xmlStr -- the XML to parse storeXML -- if True, stores the XML string in the root XMLNode.xml """ def __parseXMLElement(element, thisNode): """Recursive call to process this XMLNode.""" thisNode.elementName = element.nodeName #print element.nodeName # add element attributes as attributes to this node for i in range(element.attributes.length): an = element.attributes.item(i) thisNode[an.name] = an.nodeValue for a in element.childNodes: if a.nodeType == xml.dom.Node.ELEMENT_NODE: child = XMLNode() try: list = getattr(thisNode, a.nodeName) except AttributeError: setattr(thisNode, a.nodeName, []) # add the child node as an attrib to this node list = getattr(thisNode, a.nodeName); #print "appending child: %s to %s" % (a.nodeName, thisNode.elementName) list.append(child); __parseXMLElement(a, child) elif a.nodeType == xml.dom.Node.TEXT_NODE: thisNode.elementText += a.nodeValue return thisNode dom = parseString(xmlStr) # get the root rootNode = XMLNode() if storeXML: rootNode.xml = xmlStr return __parseXMLElement(dom.firstChild, rootNode) class BoxDotNetError(Exception): """Exception class for errors received from Facebook.""" pass class BoxDotNet(object): END_POINT = 'http://www.box.net/api/1.0/rest?' #The box.net return status codes are all over the show # method_name : return_value_that_is_ok RETURN_CODES = { 'get_ticket' : 'get_ticket_ok', 'get_auth_token' : 'get_auth_token_ok', 'get_account_tree' : 'listing_ok', 'logout' : 'logout_ok', 'create_folder' : 'create_ok', 'upload' : 'upload_ok', 'delete' : 's_delete_node' } def __init__(self): self.__handlerCache={} @classmethod def __fix_args(cls, **arg): for key in arg.keys(): if isinstance(arg[key], list): arg[key] = ','.join(arg[key]) value = arg[key] arg[key + '[]'] = value del arg[key] return arg @classmethod def check_errors(cls, method, xml): status = xml.status[0].elementText if status == cls.RETURN_CODES[method]: return raise BoxDotNetError ("Box.net returned [%s] for action [%s]" % (status, method)) @classmethod def get_login_url(cls, ticket): return "http://www.box.net/api/1.0/auth/%s" % ticket def __getattr__(self, method, **arg): """ Handle all box.net calls """ if not self.__handlerCache.has_key(method): def handler(_self = self, _method = method, **arg): arg = _self.__fix_args(**arg) url = _self.END_POINT arg["action"] = _method postData = urllib.urlencode(arg) # print "--url---------------------------------------------" # print url # print "--postData----------------------------------------" # print postData f = urllib.urlopen(url + postData) data = f.read() # print "--response----------------------------------------" # print data f.close() xml = XMLNode.parseXML(data, True) _self.check_errors(_method, xml) return xml self.__handlerCache[method] = handler; return self.__handlerCache[method] #------------------------------------------------------------------- #------------------------------------------------------------------- def upload(self, file_path, **arg): """ Upload a file to box.net. """ if file_path == None: raise UploadException("file_path OR jpegData must be specified") # verify key names for a in arg.keys(): if a not in ("api_key","auth_token","folder_id","share","filename"): sys.stderr.write("Box.net api: warning: unknown parameter \"%s\" sent to Box.net.upload\n" % (a)) url = 'http://upload.box.net/api/1.0/upload/%s/%s' % (arg['auth_token'], arg['folder_id']) # construct POST data boundary = mimetools.choose_boundary() body = "" #If not specified, the default filename is the path filename = arg.get("filename",file_path) body += "--%s\r\n" % (boundary) body += 'Content-Disposition: form-data; name="share"\r\n\r\n' body += "%s\r\n" % (arg['share']) body += "--%s\r\n" % (boundary) body += "Content-Disposition: form-data; name=\"file\";" body += " filename=\"%s\"\r\n" % filename body += "Content-Type: %s\r\n\r\n" % get_content_type(file_path) #file date fp = file(file_path, "rb") data = fp.read() fp.close() postData = body.encode("utf_8") + data + \ ("\r\n--%s--" % (boundary)).encode("utf_8") request = urllib2.Request(url) request.add_data(postData) request.add_header("Content-Type", \ "multipart/form-data; boundary=%s" % boundary) response = urllib2.urlopen(request) rspXML = response.read() response.close() return XMLNode.parseXML(rspXML) conduit-0.3.17/conduit/modules/BoxDotNetModule/BoxDotNetAPI/Makefile.am0000644000175000017500000000022611172176633022564 00000000000000conduit_handlersdir = $(libdir)/conduit/modules/BoxDotNetModule/BoxDotNetAPI conduit_handlers_PYTHON = boxdotnet.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/modules/BoxDotNetModule/BoxDotNetAPI/Makefile.in0000644000175000017500000003254311326116726022602 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/modules/BoxDotNetModule/BoxDotNetAPI DIST_COMMON = $(conduit_handlers_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduit_handlersdir)" py_compile = $(top_srcdir)/py-compile DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ conduit_handlersdir = $(libdir)/conduit/modules/BoxDotNetModule/BoxDotNetAPI conduit_handlers_PYTHON = boxdotnet.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/modules/BoxDotNetModule/BoxDotNetAPI/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/modules/BoxDotNetModule/BoxDotNetAPI/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduit_handlersPYTHON: $(conduit_handlers_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduit_handlersdir)" || $(MKDIR_P) "$(DESTDIR)$(conduit_handlersdir)" @list='$(conduit_handlers_PYTHON)'; dlist=; list2=; test -n "$(conduit_handlersdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduit_handlersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduit_handlersdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduit_handlersdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduit_handlersdir)" $$dlist; \ fi; \ else :; fi uninstall-conduit_handlersPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_handlers_PYTHON)'; test -n "$(conduit_handlersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$fileso tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(conduit_handlersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-conduit_handlersPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-conduit_handlersPYTHON .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-conduit_handlersPYTHON \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am \ uninstall-conduit_handlersPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/modules/BoxDotNetModule/Makefile.am0000644000175000017500000000024711172176633020367 00000000000000SUBDIRS = BoxDotNetAPI conduit_handlersdir = $(libdir)/conduit/modules/BoxDotNetModule conduit_handlers_PYTHON = BoxDotNetModule.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/modules/BoxDotNetModule/BoxDotNetModule.py0000644000175000017500000002565311321403566021723 00000000000000""" BoxDotNet Module """ import os, sys import traceback import md5 import logging log = logging.getLogger("modules.BoxDotNet") import conduit import conduit.utils as Utils import conduit.Web as Web import conduit.dataproviders.DataProvider as DataProvider import conduit.Exceptions as Exceptions from conduit.datatypes import Rid import conduit.datatypes.File as File Utils.dataprovider_add_dir_to_path(__file__, "BoxDotNetAPI") from boxdotnet import BoxDotNet from gettext import gettext as _ MODULES = { "BoxDotNetTwoWay" : { "type": "dataprovider" } } class BoxDotNetTwoWay(DataProvider.TwoWay): _name_ = _("Box.net") _description_ = _("Synchronize your Box.net files") _category_ = conduit.dataproviders.CATEGORY_FILES _module_type_ = "twoway" _in_type_ = "file" _out_type_ = "file" _icon_ = "boxdotnet" _configurable_ = True API_KEY="nt0v6a232z6r47iftjx7g0azu6dg4p10" def __init__(self, *args): DataProvider.TwoWay.__init__(self) self.update_configuration( foldername = "", ) self.boxapi = None self.user_id = None self.token = None self.folder_id = None self.files = {} #------------------------------------------ # File info related functions #------------------------------------------ def _get_file_info(self, fileID): """ Returns the id, if the id is present in the configured folder """ self.files = self._get_files(self.folder_id) if self.files.has_key(fileID): log.debug("File [%s] does exist" % fileID) return fileID else: log.debug("File [%s] does not exist" % fileID) return None def _get_files(self,folderID): """ Gets a list of files present in the configured folder """ rsp = self.boxapi.get_account_tree (api_key=BoxDotNetTwoWay.API_KEY, auth_token=self.token, folder_id=folderID, params=['nozip']) files = {} try: for file in rsp.tree[0].folder[0].files[0].file: files[file.attrib['id']] = file.attrib['file_name'] finally: return files def _get_raw_file_url(self, fileID): """ Format an url that can be used for downloading a file """ return "http://box.net/api/1.0/download/%s/%s" % (self.token, fileID) #------------------------------------------ # Upload functions #------------------------------------------ def _upload_file (self, file_path, filename): """ Upload the file to box.net @returns: uid of the file """ rsp = self.boxapi.upload(file_path, auth_token=self.token, folder_id=self.folder_id, share=0, filename=filename ) uid = rsp.files[0].file[0].attrib['id'] return uid def _replace_file (self, fileID, url, name): """ Box.net automatically replaces files with same name, so we can use the plain upload method @returns: uid of the file """ return self._upload_file(url, name) #------------------------------------------ # File info related functions #------------------------------------------ def _get_folder_id(self): """ Returns a folder id for the configured folder name, it re-uses existing ones and creates a new folder if it isn't present """ id = None # see if folder already exists folders = self._get_folders() if folders.has_key (self.foldername): id = folders[self.foldername] # return if it does if id: return id # create otherwise else: return self._create_folder () def _get_folders(self): """ Returns a dictionary of name-id representing the upper-level folders """ rsp = self.boxapi.get_account_tree(api_key=BoxDotNetTwoWay.API_KEY, auth_token=self.token, folder_id=0, params=['nozip']) folders = {} try: # this might throw an exception if user has no folders yet for folder in rsp.tree[0].folder[0].folders[0].folder: folders[folder.attrib['name']] = folder.attrib['id'] finally: return folders def _create_folder(self): """ Create a top-level folder with the configured name, and return the id """ rsp = self.boxapi.create_folder(api_key=BoxDotNetTwoWay.API_KEY, auth_token=self.token, parent_id=0, name=self.foldername, share=0) return rsp.folder[0].folder_id[0].elementText #------------------------------------------ # Authentication methods #------------------------------------------ def _login(self): """ Logs the user in to box.net """ if self.boxapi == None: self.boxapi = BoxDotNet() # login if not done yet, we only login once to prevent # the browser for popping up each time if not self.token: # get the ticket and open login url self._set_ticket() url = BoxDotNet.get_login_url(self.ticket) #wait for log in Web.LoginMagic("Log into Box.net", url, login_function=self._try_login) def _try_login (self): """ Try to perform a login, return None if it does not succeed """ try: self._set_login_info(self.ticket) return self.token except: return None def _set_ticket(self): """ Get the ticket that can be used for logging in for real """ rsp = self.boxapi.get_ticket(api_key=self.API_KEY) self.ticket = rsp.ticket[0].elementText def _set_login_info (self, ticket): """ Get a token and the user id """ rsp = self.boxapi.get_auth_token(api_key=self.API_KEY, ticket=ticket) self.user_id = rsp.user[0].user_id[0].elementText self.token = rsp.auth_token[0].elementText self.ticket = None #------------------------------------------ # Dataprovider Functions #------------------------------------------ def refresh(self): DataProvider.TwoWay.refresh(self) self._login() # set folder id if not done yet or configuration changed folder_id = self._get_folder_id() if not self.folder_id or self.folder_id != folder_id: self.folder_id = folder_id self.files = self._get_files(self.folder_id) def put (self, file, overwrite, LUID=None): """ Puts the file in the sink, this uploads the file if it is not present yet or updates it if necessary """ DataProvider.TwoWay.put(self, file, overwrite, LUID) originalName = file.get_filename() #Gets the local URI (/foo/bar). If this is a remote file then #it is first transferred to the local filesystem fileURI = file.get_local_uri() mimeType = file.get_mimetype() if LUID == None: log.debug("Uploading file URI = %s, Mimetype = %s, Original Name = %s" % (fileURI, mimeType, originalName)) LUID = self._upload_file (fileURI, originalName) else: #check if a file exists at that UID id = self._get_file_info(LUID) if id != None: if overwrite == True: log.debug("Replacing file URI = %s, Mimetype = %s, Original Name = %s" % (fileURI, mimeType, originalName)) LUID = self._replace_file(LUID, fileURI, originalName) else: #Only upload the file if it is newer than the Remote one url = self._get_raw_file_url(id) remoteFile = File.File(url) #this is a limited test for equality type comparison comp = file.compare(remoteFile,True) log.debug("Compared %s with %s to check if they are the same (size). Result = %s" % (file.get_filename(),remoteFile.get_filename(),comp)) if comp != conduit.datatypes.COMPARISON_EQUAL: raise Exceptions.SynchronizeConflictError(comp, file, remoteFile) return self.get(LUID).get_rid() def delete(self, LUID): """ Simply call the delete method on the api """ self.boxapi.delete (api_key=BoxDotNetTwoWay.API_KEY, auth_token=self.token, target='file', target_id=LUID) def config_setup(self, config): def _login_finished(*args): folders = self._get_folders() folders_config.set_choices([(f,f) for f in folders]) def _load_button_clicked(button): conduit.GLOBALS.syncManager.run_blocking_dataprovider_function_calls( self, _login_finished, self._login) config.add_section(_("Folder")) folders_config = config.add_item(_("Folder name"), "combotext", config_name = "foldername", choices = [], ) config.add_item(_("Load folders"), "button", initial_value = _load_button_clicked ) def is_configured (self, isSource, isTwoWay): return len(self.foldername) > 0 def get_UID(self): return "%s-%s" % (self.user_id, self.foldername) def get(self, LUID): DataProvider.TwoWay.get(self, LUID) url = self._get_raw_file_url(LUID) f = File.File( URI= url, group= self.foldername ) try: #gnomevfs doesnt like unicode f.force_new_filename(str(self.files[LUID])) except KeyError: #occurs on put() returning get() because we have #not refreshed since. Not a problem because the point #of put returning get() is to make the rids() in the same #scheme, and not actually do something with the returned file. pass f.set_open_URI(url) f.set_UID(LUID) return f def get_all(self): DataProvider.TwoWay.get_all(self) return self.files.keys() def get_name(self): if len(self.foldername) > 0: return self.foldername else: return self._name_ conduit-0.3.17/conduit/modules/BoxDotNetModule/Makefile.in0000644000175000017500000005061311326116726020400 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/modules/BoxDotNetModule DIST_COMMON = $(conduit_handlers_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduit_handlersdir)" py_compile = $(top_srcdir)/py-compile RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = BoxDotNetAPI conduit_handlersdir = $(libdir)/conduit/modules/BoxDotNetModule conduit_handlers_PYTHON = BoxDotNetModule.py all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/modules/BoxDotNetModule/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/modules/BoxDotNetModule/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduit_handlersPYTHON: $(conduit_handlers_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduit_handlersdir)" || $(MKDIR_P) "$(DESTDIR)$(conduit_handlersdir)" @list='$(conduit_handlers_PYTHON)'; dlist=; list2=; test -n "$(conduit_handlersdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduit_handlersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduit_handlersdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduit_handlersdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduit_handlersdir)" $$dlist; \ fi; \ else :; fi uninstall-conduit_handlersPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_handlers_PYTHON)'; test -n "$(conduit_handlersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$fileso # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(conduit_handlersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-conduit_handlersPYTHON install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-conduit_handlersPYTHON .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-local \ ctags ctags-recursive distclean distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-conduit_handlersPYTHON install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-conduit_handlersPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/modules/GConfModule/0000777000175000017500000000000011326117103015526 500000000000000conduit-0.3.17/conduit/modules/GConfModule/Makefile.am0000644000175000017500000000020711172176633017511 00000000000000conduit_handlersdir = $(libdir)/conduit/modules/GConfModule conduit_handlers_PYTHON = GConfModule.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/modules/GConfModule/GConfModule.py0000644000175000017500000001352211321403566020167 00000000000000import fnmatch import logging log = logging.getLogger("modules.GConf") from gettext import gettext as _ try: import gconf except ImportError: # for maemo from gnome import gconf import conduit import conduit.dataproviders.DataProvider as DataProvider import conduit.dataproviders.AutoSync as AutoSync import conduit.datatypes.Setting as Setting MODULES = { "GConfTwoWay" : { "type": "dataprovider" } } class GConfTwoWay(DataProvider.TwoWay, AutoSync.AutoSync): _name_ = _("Application Settings") _description_ = _("Synchronize your application settings") _category_ = conduit.dataproviders.CATEGORY_MISC _module_type_ = "twoway" _in_type_ = "setting" _out_type_ = "setting" _icon_ = "preferences-desktop" _configurable_ = True WHITELIST = ( (_("Metacity"), "/apps/metacity/*"), (_("Nautilus"), "/apps/nautilus/*"), (_("Preferred Applications"), "/desktop/gnome/applications/*"), (_("Desktop Interface"), "/desktop/gnome/interface/*"), (_("Gnome Terminal"), "/apps/gnome-terminal/*") ) def __init__(self, *args): DataProvider.TwoWay.__init__(self) AutoSync.AutoSync.__init__(self) self.update_configuration( sections = [] ) self.awaitingChanges = {} self.gconf = gconf.client_get_default() self.gconf.add_dir('/', gconf.CLIENT_PRELOAD_NONE) self.gconf.notify_add('/', self._on_change) def _in_the_list(self, key): for pattern in self.sections: if fnmatch.fnmatch(key, pattern): return True return False def _get_all(self, path): entries = [] for x in self.gconf.all_dirs(path): entries += self._get_all(x) for x in self.gconf.all_entries(path): if self._in_the_list(x.key): entries.append(x.key) return entries def _gconf_type(self, key): node = self.gconf.get(key) if node: return node.type # Pinched from HP... # this is wrong, but schema.get_type() isn't in older gnome-python, only in svn head schema_key = "/schemas" + key schema = gconf_client.get_schema(schema_key) if not schema: log.warn("can't sync, no schema for key: " + key) return # for some reason schema.get_type() appears to not exist dvalue = schema.get_default_value() if not dvalue: log.warn("no default value for " + key + " and right now we need one to get the key type") return return dvalue.type def _from_gconf(self, node): t = node.type val = "" if t == gconf.VALUE_INT: val = node.get_int() elif t == gconf.VALUE_STRING: val = node.get_string() elif t == gconf.VALUE_BOOL: val = node.get_bool() elif t == gconf.VALUE_FLOAT: val = node.get_float() elif t == gconf.VALUE_LIST: val = [self._from_gconf(x) for x in node.get_list()] return str(val) def _to_gconf(self, key, value): t = self._gconf_type(key) if t == gconf.VALUE_INT: val = int(value) func = self.gconf.set_int elif t == gconf.VALUE_STRING: val = str(value) func = self.gconf.set_string elif t == gconf.VALUE_BOOL: val = bool(value) func = self.gconf.set_bool elif t == gconf.VALUE_FLOAT: val = float(value) func = self.gconf.set_float elif t == gconf.VALUE_LIST: val = eval([self._from_gconf(x) for x in value]) func = self.gconf.set_list else: log.warn("Unknown gconf key: %s" % key) return #We will get a notification that a key has changed. #ignore it (because we made the change) self.awaitingChanges[key] = val #bit of a dance to ensure that we edit awaitingChanges before we #make the change func(key, val) def _on_change(self, client, id, entry, data): if self._in_the_list(entry.key): #check to see if the change was one of ours try: del(self.awaitingChanges[entry.key]) except KeyError: #the change wasnt from us self.handle_modified(entry.key) def config_setup(self, config): config.add_section(_("Applications to Synchronize")) items_config = config.add_item(_("Items"), "list", config_name = "sections", choices = [(path, name) for name, path in self.WHITELIST] ) def get_all(self): """ loop through all gconf keys and see which ones match our whitelist """ DataProvider.TwoWay.get_all(self) if self.sections: return self._get_all("/") else: return [] def get(self, uid): """ Get a Setting object based on UID (key path) """ DataProvider.TwoWay.get(self, uid) node = self.gconf.get(uid) if not node: log.debug("Could not find uid %s" % uid) return None s = Setting.Setting( key=uid, value=self._from_gconf(node) ) s.set_UID(uid) return s def put(self, setting, overwrite, uid=None): DataProvider.TwoWay.put(self, setting, overwrite, uid) log.debug("Saving value in Gconf: %s=%s" % (setting.key, setting.value)) self._to_gconf(setting.key, setting.value) if uid == None: uid = setting.key return self.get(uid).get_rid() def delete(self, uid): DataProvider.TwoWay.delete(self, uid) self.gconf.unset(uid) def get_UID(self): return self.__class__.__name__ conduit-0.3.17/conduit/modules/GConfModule/Makefile.in0000644000175000017500000003244111326116727017526 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/modules/GConfModule DIST_COMMON = $(conduit_handlers_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduit_handlersdir)" py_compile = $(top_srcdir)/py-compile DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ conduit_handlersdir = $(libdir)/conduit/modules/GConfModule conduit_handlers_PYTHON = GConfModule.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/modules/GConfModule/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/modules/GConfModule/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduit_handlersPYTHON: $(conduit_handlers_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduit_handlersdir)" || $(MKDIR_P) "$(DESTDIR)$(conduit_handlersdir)" @list='$(conduit_handlers_PYTHON)'; dlist=; list2=; test -n "$(conduit_handlersdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduit_handlersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduit_handlersdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduit_handlersdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduit_handlersdir)" $$dlist; \ fi; \ else :; fi uninstall-conduit_handlersPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_handlers_PYTHON)'; test -n "$(conduit_handlersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$fileso tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(conduit_handlersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-conduit_handlersPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-conduit_handlersPYTHON .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-conduit_handlersPYTHON \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am \ uninstall-conduit_handlersPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/modules/RhythmboxModule/0000777000175000017500000000000011326117103016516 500000000000000conduit-0.3.17/conduit/modules/RhythmboxModule/RhythmboxModule.py0000644000175000017500000001714011321403566022147 00000000000000""" Provides a simple means for reading rhythmbox static playlists. Based upon code from Copyright 2007: John Stowers License: GPLv2 """ import urllib import os import logging from xml.sax import make_parser, handler, SAXException log = logging.getLogger("modules.Rhythmbox") try: import elementtree.ElementTree as ET except: import xml.etree.ElementTree as ET import conduit import conduit.dataproviders.DataProvider as DataProvider import conduit.utils as Utils import conduit.datatypes.Audio as Audio from gettext import gettext as _ if Utils.program_installed("rhythmbox"): MODULES = { "RhythmboxSource" : { "type": "dataprovider" }, } else: MODULES = {} #list store column define NAME_IDX=0 CHECK_IDX=1 class SearchComplete(SAXException): pass class RhythmboxSource(DataProvider.DataSource): _name_ = _("Rhythmbox Music") _description_ = _("Synchronize songs from your Rhythmbox playlists") _category_ = conduit.dataproviders.CATEGORY_MEDIA _module_type_ = "source" _in_type_ = "file/audio" _out_type_ = "file/audio" _icon_ = "rhythmbox" _configurable_ = True PLAYLIST_PATH="~/.gnome2/rhythmbox/playlists.xml" RHYTHMDB_PATH="~/.gnome2/rhythmbox/rhythmdb.xml" def __init__(self, *args): DataProvider.DataSource.__init__(self) #Names of the playlists we know self.allPlaylists = [] #Names we wish to sync self.update_configuration( playlists = [], ) self.songdata = {} def _parse_playlists(self, path, allowed=[]): playlists = [] songs = [] playlist_name = _(u"Unknown") is_static = False path = os.path.expanduser(path) root = ET.ElementTree(file=path) iter = root.getiterator() for element in iter: if element.tag == "playlist": is_static = False if element.keys(): for name, value in element.items(): if name == "type" and value == "static": is_static = True if name == "name": temp_name = value if is_static: # new playlist found playlist_name = temp_name songs = [] playlists.append( [playlist_name, songs] ) #Text that precedes all child elements (may be None) if element.text: text = element.text if element.tag == "location": songs.append( text ) return playlists def _init_songdata(self, songs): rb_handler = RhythmDBHandler(songs) parser = make_parser() parser.setContentHandler(rb_handler) path = os.path.expanduser(self.RHYTHMDB_PATH) try: parser.parse(path) except SearchComplete: pass self.songdata = rb_handler.songdata return rb_handler.cleansongs def config_setup(self, config): self.allPlaylists = [(name, name) for name, songs in self._parse_playlists(RhythmboxSource.PLAYLIST_PATH)] config.add_section(_("Playlists")) config.add_item(_("Playlists"), "list", config_name = "playlists", choices = self.allPlaylists ) def refresh(self): DataProvider.DataSource.refresh(self) self.allPlaylists = self._parse_playlists(RhythmboxSource.PLAYLIST_PATH) def get_all(self): DataProvider.DataSource.get_all(self) #in this case the luid for the song is its path songs = [] #only consider enabled playlists for playlist in [p for p in self.allPlaylists if p[0] in self.playlists]: for song in playlist[1]: songs.append(song) # get only the song data that we care about and clean up the file paths return self._init_songdata(songs) def get(self, songuri): DataProvider.DataSource.get(self, songuri) f = RhythmboxAudio(URI=songuri, songdata=self.songdata.get(songuri)) f.set_UID(songuri) f.set_open_URI(songuri) return f def get_UID(self): return "" class RhythmboxAudio(Audio.Audio): '''Wrapper around the standard Audio datatype that implements the rating, playcount, and cover location tags. ''' COVER_ART_PATH="~/.gnome2/rhythmbox/covers/" def __init__(self, URI, **kwargs): Audio.Audio.__init__(self, URI, **kwargs) self._songdata = kwargs['songdata'] or {} tags = {} # Make sure the songs has a rating (which is different from having a 0 rating) if 'rating' in self._songdata: tags['rating'] = float(self._songdata.get('rating', 0)) tags['play_count'] = int(self._songdata.get('play-count', 0)) tags['cover_location'] = self.find_cover_location() tags['title'] = self._songdata.get('title') tags['artist'] = self._songdata.get('artist') tags['album'] = self._songdata.get('album') tags['genre'] = self._songdata.get('genre') tags['track-number'] = int(self._songdata.get('track-number', 0)) tags['duration'] = int(self._songdata.get('duration', 0)) * 1000 tags['bitrate'] = int(self._songdata.get('bitrate', 0)) * 1000 self.rhythmdb_tags = tags def find_cover_location(self): #TODO: Finish this return '' def get_media_tags(self): return self.rhythmdb_tags class RhythmDBHandler(handler.ContentHandler): '''A SAX XML handler that loops through a list of songs and retrieves the interesting data. While we're at it, clean the filepath and check for the existance of the file before adding it to the final list of songs. We use a SAX parser because it's gentler on resources (it doesn't need to store the entire parsed file in memory), it's *tons* faster (there is no overhead of creating an object tree/map), and we can stop parsing once all of the songs in the list have been found. ''' #we could just as easily get the rest of the file information _interesting_ = ('location', 'title', 'genre', 'artist', 'album', 'track-number', 'play-count', 'rating', 'duration', 'bitrate') def __init__(self, searchlist): handler.ContentHandler.__init__(self) self.searchlist = searchlist self.cleansongs = [] self.songdata = {} self._content_needed = '' def _clean_location(self, location): song_location = ''.join(urllib.url2pathname(location).split("://")[1:]) if not os.path.exists(song_location): print "WARNING: The song %s cannot be found on the harddrive." % song_location return None return song_location def startElement(self, name, attrs): if name=='entry': self.song = {} if name in self._interesting_: self._content_needed = name def endElement(self, name): if name=='entry': location = self.song.get('location') if location in self.searchlist: songpath = self._clean_location(location) if songpath: # We've found a song and it exists on the file system self.cleansongs.append(songpath) self.songdata[songpath] = self.song self.searchlist.remove(location) self._content_needed = '' if not self.searchlist: raise SearchComplete('Exhausted search items.') def characters(self, content): if self._content_needed: self.song[self._content_needed] = content conduit-0.3.17/conduit/modules/RhythmboxModule/Makefile.am0000644000175000017500000000021711172176633020502 00000000000000conduit_handlersdir = $(libdir)/conduit/modules/RhythmboxModule conduit_handlers_PYTHON = RhythmboxModule.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/modules/RhythmboxModule/Makefile.in0000644000175000017500000003246511326116727020524 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/modules/RhythmboxModule DIST_COMMON = $(conduit_handlers_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduit_handlersdir)" py_compile = $(top_srcdir)/py-compile DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ conduit_handlersdir = $(libdir)/conduit/modules/RhythmboxModule conduit_handlers_PYTHON = RhythmboxModule.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/modules/RhythmboxModule/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/modules/RhythmboxModule/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduit_handlersPYTHON: $(conduit_handlers_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduit_handlersdir)" || $(MKDIR_P) "$(DESTDIR)$(conduit_handlersdir)" @list='$(conduit_handlers_PYTHON)'; dlist=; list2=; test -n "$(conduit_handlersdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduit_handlersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduit_handlersdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduit_handlersdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduit_handlersdir)" $$dlist; \ fi; \ else :; fi uninstall-conduit_handlersPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_handlers_PYTHON)'; test -n "$(conduit_handlersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$fileso tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(conduit_handlersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-conduit_handlersPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-conduit_handlersPYTHON .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-conduit_handlersPYTHON \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am \ uninstall-conduit_handlersPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/modules/ZotoModule/0000777000175000017500000000000011326117104015466 500000000000000conduit-0.3.17/conduit/modules/ZotoModule/ZotoModule.py0000644000175000017500000002062211321403566020064 00000000000000# -*- coding: utf-8 -*- """ Zoto Data Sink """ import logging log = logging.getLogger("modules.Zoto") import conduit import conduit.utils as Utils from conduit.datatypes import Rid import conduit.dataproviders.Image as Image import conduit.Exceptions as Exceptions import conduit.datatypes.Photo as Photo from gettext import gettext as _ import xmlrpclib import md5 import os MODULES = { "ZotoSink" : {"type" : "dataprovider"}, } class MyZotoAPI: def __init__(self, username, password): self.zapiKey = '588c270052e2157c4fa7e10b80b2c580' self.username = username self.password = md5.md5(password).hexdigest() # password self.zotoAuth = {'username': self.username, 'password': self.password} self.server = xmlrpclib.Server('http://www.zoto.com/RPC2/') def delete_photo(self, photoId): self.server.images.delete(self.zapiKey, self.zotoAuth, photoId) def create_album(self, albumName): """ Creates a new album. Returns the id for it """ return self.server.albums.create_album(self.zapiKey, self.zotoAuth, {'title':albumName, 'description': albumName})[1] def get_albums(self): albums = {} for al in self.server.sets.get_albums(self.zapiKey, self.zotoAuth, self.username, {}, 9999, 0)[1]: albums[al['title']] = al['album_id'] return albums def get_photos_album(self, albumId): """ Gets all the photos from album albumId. Returns a dict like this : """ photosDict = {} photos = self.server.albums.get_images(self.zapiKey, self.zotoAuth, albumId, {}, 9999, 0)[1] for zf in photos: photoId = zf['media_id'] # The extension is jpg even if in the original name was JPG or jpeg photoUrl = 'http://www.zoto.com/%s/img/original/%s.jpg' % (self.username, photoId) # construct photo f = Photo.Photo(URI=photoUrl) f.set_open_URI(photoUrl) f.set_UID(photoId) f.set_caption (zf['description']) f.force_new_filename(zf['title']) f.set_tags(self.get_photo_tags(photoId)) # add to dict photosDict[photoId] = f return photosDict def add_to_album(self, uploadInfo, albumId): """ Adds a photo to the album. """ f = open(uploadInfo.url,'r') buf=f.read() f.close() fotoId= md5.md5(buf).hexdigest() if not uploadInfo.caption: uploadInfo.caption='' self.server.images.add(self.zapiKey, self.zotoAuth, uploadInfo.name, uploadInfo.name, uploadInfo.caption, xmlrpclib.Binary(buf)) self.server.albums.multi_add_image(self.zapiKey, self.zotoAuth, albumId, [fotoId]) tags = [] for tag in uploadInfo.tags: tags.append(tag) if len(tags) > 0: self.server.tags.multi_tag_image(self.zapiKey, self.zotoAuth, self.username, [fotoId], tags) return fotoId def removeAllTags(self, photoId): tags= self.server.tags.get_image_tags(self.zapiKey, self.zotoAuth, self.username, photoId, 'owner') if tags: tag_list = [] for tag in tags: tag_list.append(tag['tag_name']) self.server.tags.multi_untag_image(self.zapiKey, self.zotoAuth, self.username, [photoId], tag_list) def update_photo(self, photoId, uploadInfo): if not uploadInfo.caption: uploadInfo.caption='' self.server.images.multi_set_attr(self.zapiKey, self.zotoAuth, [photoId], {'title' : uploadInfo.name, 'description' : uploadInfo.caption}) tags = [] for tag in uploadInfo.tags: tags.append(tag) self.removeAllTags(photoId); if len(tags) > 0: self.server.tags.multi_tag_image(self.zapiKey, self.zotoAuth, self.username, [photoId], tags) f = open(uploadInfo.url,'r') buf=f.read() f.close() return self.server.images.store_modified(self.zapiKey, self.zotoAuth, xmlrpclib.Binary(buf), photoId) def delete_from_album(self, photoId, albumId): self.server.albums.multi_del_image(self.zapiKey, self.zotoAuth, albumId, [photoId]) def get_photo_tags(self, photoId): """ Returns a list with the photo's tags """ tags=[] for t in self.server.tags.get_image_tags(self.zapiKey, self.zotoAuth, self.username, photoId, 'owner'): tags.append(t['tag_name']) return tags class ZotoSink(Image.ImageTwoWay): _name_ = _("Zoto") _description_ = _("Synchronize your Zoto photos") _module_type_ = "twoway" _icon_ = "zoto" _configurable_ = True def __init__(self, *args): Image.ImageTwoWay.__init__(self) self.update_configuration( username = "", password = "", albumName = "", ) self.albumId = None self.sphotos = None self.zapi = None self.albums = None def _get_raw_photo_url(self, photoInfo): return photoInfo.get_open_URI() def _get_photo_info(self, id): if self.sphotos.has_key(id): return self.sphotos[id] else: return None def _get_photo_formats(self): return ("image/jpeg", ) def refresh(self): Image.ImageTwoWay.refresh(self) try: self.zapi = MyZotoAPI(self.username, self.password) albums = self.zapi.get_albums() if not albums.has_key(self.albumName): self.albumId = self.zapi.create_album(self.albumName) else: self.albumId = albums[self.albumName] self.sphotos = self.zapi.get_photos_album(self.albumId) except xmlrpclib.Fault, e: log.debug("Error refreshing: %s" % e.faultString) raise Exceptions.RefreshError (e.faultString) def get_all(self): return self.sphotos.keys() def get(self, LUID): return self.sphotos[LUID] def delete(self, LUID): """ Delete a photo by ID """ if not self.sphotos.has_key(LUID): log.warn("Photo does not exist") return try: self.zapi.delete_from_album(LUID, self.albumId) del self.sphotos[LUID] except xmlrpclib.Fault, e: raise Exceptions.SyncronizeError("Zoto Delete Error: " + e.faultString) def _upload_photo(self, uploadInfo): """ Upload to album """ try: fotoId = self.zapi.add_to_album(uploadInfo, self.albumId) except Exception, e: raise Exceptions.SyncronizeError("Zoto Upload Error.") return Rid(uid=fotoId) def _replace_photo(self, id, uploadInfo): """ Updates a photo (binary and metadata) """ try: fotoId = self.zapi.update_photo(id, uploadInfo) except Exception, e: raise Exceptions.SyncronizeError("Zoto Update Error.") return Rid(uid=fotoId) def config_setup(self, config): config.add_section(_('Account details')) config.add_item(_('Username'), 'text', config_name = 'username', ) config.add_item(_('Password'), 'text', config_name = 'password', password = True ) config.add_section(_('Saved photo settings')) config.add_item(_('Album'), 'text', config_name = 'albumName', ) def is_configured(self, isSource, isTwoWay): if len(self.username) < 1: return False if len(self.password) < 1: return False if len(self.albumName) < 1: return False return True def get_UID(self): return self.username+":"+self.albumName conduit-0.3.17/conduit/modules/ZotoModule/Makefile.am0000644000175000017500000000020511321403566017440 00000000000000conduit_handlersdir = $(libdir)/conduit/modules/ZotoModule conduit_handlers_PYTHON = ZotoModule.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/modules/ZotoModule/Makefile.in0000644000175000017500000003243411326116730017461 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/modules/ZotoModule DIST_COMMON = $(conduit_handlers_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduit_handlersdir)" py_compile = $(top_srcdir)/py-compile DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ conduit_handlersdir = $(libdir)/conduit/modules/ZotoModule conduit_handlers_PYTHON = ZotoModule.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/modules/ZotoModule/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/modules/ZotoModule/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduit_handlersPYTHON: $(conduit_handlers_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduit_handlersdir)" || $(MKDIR_P) "$(DESTDIR)$(conduit_handlersdir)" @list='$(conduit_handlers_PYTHON)'; dlist=; list2=; test -n "$(conduit_handlersdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduit_handlersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduit_handlersdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduit_handlersdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduit_handlersdir)" $$dlist; \ fi; \ else :; fi uninstall-conduit_handlersPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_handlers_PYTHON)'; test -n "$(conduit_handlersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$fileso tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(conduit_handlersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-conduit_handlersPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-conduit_handlersPYTHON .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-conduit_handlersPYTHON \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am \ uninstall-conduit_handlersPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/modules/iPodModule/0000777000175000017500000000000011326117102015424 500000000000000conduit-0.3.17/conduit/modules/iPodModule/iPodModule.py0000644000175000017500000007734111321403566017776 00000000000000""" Provides a number of dataproviders which are associated with removable devices such as USB keys. It also includes classes specific to the ipod. This file is not dynamically loaded at runtime in the same way as the other dataproviders as it needs to be loaded all the time in order to listen to HAL events Copyright: John Stowers, 2006 License: GPLv2 """ import os import pickle import logging import time import socket import locale import weakref import threading import gobject log = logging.getLogger("modules.iPod") import conduit import conduit.dataproviders.DataProvider as DataProvider import conduit.dataproviders.DataProviderCategory as DataProviderCategory import conduit.dataproviders.VolumeFactory as VolumeFactory import conduit.utils as Utils import conduit.datatypes.Note as Note import conduit.datatypes.Contact as Contact import conduit.datatypes.Event as Event import conduit.datatypes.File as File import conduit.datatypes.Audio as Audio import conduit.datatypes.Video as Video from gettext import gettext as _ errormsg = "" try: import gpod if gpod.version_info >= (0,6,0): MODULES = { "iPodFactory" : { "type": "dataprovider-factory" }, } log.info("Module Information: %s" % Utils.get_module_information(gpod, 'version_info')) except ImportError: errormsg = "iPod support disabled (python-gpod not availiable)" except locale.Error: errormsg = "iPod support disabled (Incorrect locale)" if errormsg: MODULES = {} log.warn(errormsg) #Solve the initialization problem without gpod class gpod(): ITDB_MEDIATYPE_MUSICVIDEO = 0 ITDB_MEDIATYPE_MOVIE = 1 ITDB_MEDIATYPE_TVSHOW = 2 ITDB_MEDIATYPE_AUDIO = 3 ITDB_MEDIATYPE_PODCAST = 4 def _string_to_unqiue_file(txt, base_uri, prefix, postfix=''): temp = Utils.new_tempfile(txt) uri = os.path.join(base_uri, prefix+temp.get_filename()+postfix) temp.transfer(uri, True) temp.set_UID(os.path.basename(uri)) return temp.get_rid() class iPodFactory(VolumeFactory.VolumeFactory): def _get_mount_path(self, props): return str(props["volume.mount_point"]) def is_interesting(self, udi, props): if props.get("info.parent"): parent = self._get_properties(props["info.parent"]) if parent.get("storage.model") == "iPod": props.update(parent) return True return False def get_category(self, udi, **kwargs): label = kwargs['volume.label'] if not label: label = "Apple iPod Music Player" return DataProviderCategory.DataProviderCategory( label, "multimedia-player-ipod-standard-color", self._get_mount_path(kwargs)) def get_dataproviders(self, udi, **kwargs): #Read information about the ipod, like if it supports #photos or not d = gpod.itdb_device_new() gpod.itdb_device_set_mountpoint(d,self._get_mount_path(kwargs)) supportsPhotos = gpod.itdb_device_supports_photo(d) gpod.itdb_device_free(d) if supportsPhotos: return [IPodMusicTwoWay, IPodVideoTwoWay, IPodNoteTwoWay, IPodContactsTwoWay, IPodCalendarTwoWay, IPodPhotoSink] else: log.info("iPod does not report photo support") return [IPodMusicTwoWay, IPodVideoTwoWay, IPodNoteTwoWay, IPodContactsTwoWay, IPodCalendarTwoWay] def get_args(self, udi, **kwargs): """ iPod needs a local path to the DB, not a URI """ kwargs["mount_path"] = self._get_mount_path(kwargs) return (kwargs['mount_path'], udi) class IPodBase(DataProvider.TwoWay): def __init__(self, *args): DataProvider.TwoWay.__init__(self) self.mountPoint = args[0] self.uid = args[1] self.objects = None log.debug("Created ipod %s at %s" % (self.__class__.__name__, self.mountPoint)) def refresh(self): DataProvider.TwoWay.refresh(self) self.objects = [] #Also checks directory exists if not os.path.exists(self.dataDir): os.mkdir(self.dataDir) #When acting as a source, only notes in the Notes dir are #considered for f in os.listdir(self.dataDir): fullpath = os.path.join(self.dataDir, f) if os.path.isfile(fullpath): self.objects.append(f) def get_all(self): DataProvider.TwoWay.get_all(self) return self.objects def delete(self, LUID): obj = File.File(URI=os.path.join(self.dataDir, LUID)) if obj.exists(): obj.delete() def finish(self, aborted, error, conflict): DataProvider.TwoWay.finish(self) self.objects = None def get_UID(self): return self.uid def _get_unique_filename(self, directory): """ Returns the name of a non-existant file on the ipod within directory @param directory: Name of the directory within the device root to make the random file in """ done = False while not done: f = os.path.join(self.mountPoint,directory,Utils.random_string()) if not os.path.exists(f): done = True return f class IPodNoteTwoWay(IPodBase): """ Stores Notes on the iPod. Rather than requiring a perfect transform to and from notes to the ipod note format I also store the original note data in a .conduit directory in the root of the iPod. Notes are saved as title.txt and a copy of the raw note is saved as title.note LUID is the note title """ _name_ = _("Notes") _description_ = _("Synchronize your iPod notes") _module_type_ = "twoway" _in_type_ = "note" _out_type_ = "note" _icon_ = "tomboy" # datatypes.Note doesn't care about encoding, # lets be naive and assume that all notes are utf-8 ENCODING_DECLARATION = '' def __init__(self, *args): IPodBase.__init__(self, *args) self.dataDir = os.path.join(self.mountPoint, 'Notes') self.objects = [] def _get_shadow_dir(self): shadowDir = os.path.join(self.mountPoint, '.conduit') if not os.path.exists(shadowDir): os.mkdir(shadowDir) return shadowDir def _get_note_from_ipod(self, uid): """ Gets a note from the ipod, If the pickled shadow copy exists then return that """ rawNoteURI = os.path.join(self._get_shadow_dir(),uid) if os.path.exists(rawNoteURI): raw = open(rawNoteURI,'rb') try: n = pickle.load(raw) raw.close() return n except: raw.close() noteURI = os.path.join(self.dataDir, uid) noteFile = File.File(URI=noteURI) #get the contents from the note, get the raw from the raw copy. #the UID for notes from the ipod is the filename n = Note.Note( title=uid, contents=noteFile.get_contents_as_text().replace( self.ENCODING_DECLARATION, '', 1), ) n.set_UID(uid) n.set_mtime(noteFile.get_mtime()) n.set_open_URI(noteURI) return n def _save_note_to_ipod(self, uid, note): """ Save a simple iPod note in /Notes If the note has raw then also save that in shadowdir uid is the note title. """ # the normal note viewed by the iPod # inject an encoding declaration if it is missing. contents = note.get_contents() if not self.ENCODING_DECLARATION in contents: contents = ''.join([self.ENCODING_DECLARATION, contents]) ipodnote = Utils.new_tempfile(contents) ipodnote.transfer(os.path.join(self.dataDir,uid), overwrite=True) ipodnote.set_mtime(note.get_mtime()) ipodnote.set_UID(uid) #the raw pickled note for sync raw = open(os.path.join(self._get_shadow_dir(),uid),'wb') pickle.dump(note, raw, -1) raw.close() return ipodnote.get_rid() def _note_exists(self, uid): #Check if both the shadow copy and the ipodified version exists shadowDir = self._get_shadow_dir() return os.path.exists(os.path.join(shadowDir,uid)) and os.path.exists(os.path.join(self.dataDir,uid)) def get(self, LUID): DataProvider.TwoWay.get(self, LUID) return self._get_note_from_ipod(LUID) def put(self, note, overwrite, LUID=None): """ The LUID for a note in the iPod is the note title """ DataProvider.TwoWay.put(self, note, overwrite, LUID) if LUID != None: #Check if both the shadow copy and the ipodified version exists if self._note_exists(LUID): if overwrite == True: #replace the note log.debug("Replacing Note %s" % LUID) return self._save_note_to_ipod(LUID, note) else: #only overwrite if newer log.warn("OVERWRITE IF NEWER NOT IMPLEMENTED") return self._save_note_to_ipod(LUID, note) #make a new note log.warn("CHECK IF EXISTS, COMPARE, SAVE") return self._save_note_to_ipod(note.title, note) def delete(self, LUID): IPodBase.delete(self, LUID) raw = File.File(URI=os.path.join(self._get_shadow_dir(), LUID)) if raw.exists(): raw.delete() class IPodContactsTwoWay(IPodBase): _name_ = _("Contacts") _description_ = _("Synchronize your iPod contacts") _module_type_ = "twoway" _in_type_ = "contact" _out_type_ = "contact" _icon_ = "contact-new" def __init__(self, *args): IPodBase.__init__(self, *args) self.dataDir = os.path.join(self.mountPoint, 'Contacts') def get(self, LUID): DataProvider.TwoWay.get(self, LUID) fullpath = os.path.join(self.dataDir, LUID) f = File.File(URI=fullpath) contact = Contact.Contact() contact.set_from_vcard_string(f.get_contents_as_text()) contact.set_open_URI(fullpath) contact.set_mtime(f.get_mtime()) contact.set_UID(LUID) return contact def put(self, contact, overwrite, LUID=None): DataProvider.TwoWay.put(self, contact, overwrite, LUID) if LUID != None: f = Utils.new_tempfile(contact.get_vcard_string()) f.transfer(os.path.join(self.dataDir, LUID), overwrite=True) f.set_UID(LUID) return f.get_rid() return _string_to_unqiue_file(contact.get_vcard_string(), self.dataDir, 'contact') class IPodCalendarTwoWay(IPodBase): _name_ = _("Calendar") _description_ = _("Synchronize your iPod calendar") _module_type_ = "twoway" _in_type_ = "event" _out_type_ = "event" _icon_ = "contact-new" def __init__(self, *args): IPodBase.__init__(self, *args) self.dataDir = os.path.join(self.mountPoint, 'Calendars') def get(self, LUID): DataProvider.TwoWay.get(self, LUID) fullpath = os.path.join(self.dataDir, LUID) f = File.File(URI=fullpath) event = Event.Event() event.set_from_ical_string(f.get_contents_as_text()) event.set_open_URI(fullpath) event.set_mtime(f.get_mtime()) event.set_UID(LUID) return event def put(self, event, overwrite, LUID=None): DataProvider.TwoWay.put(self, event, overwrite, LUID) if LUID != None: f = Utils.new_tempfile(event.get_ical_string()) f.transfer(os.path.join(self.dataDir, LUID), overwrite=True) f.set_UID(LUID) return f.get_rid() return _string_to_unqiue_file(event.get_ical_string(), self.dataDir, 'event') class IPodPhotoSink(IPodBase): _name_ = _("Photos") _description_ = _("Synchronize your iPod photos") _module_type_ = "sink" _in_type_ = "file/photo" _out_type_ = "file/photo" _icon_ = "image-x-generic" _configurable_ = True SAFE_PHOTO_ALBUM = "Photo Library" def __init__(self, *args): IPodBase.__init__(self, *args) self.db = gpod.PhotoDatabase(self.mountPoint) self.album = None self.update_configuration( albumName = "Conduit" ) def _set_sysinfo(self, modelnumstr, model): gpod.itdb_device_set_sysinfo(self.db._itdb.device, modelnumstr, model) def _get_photo_album(self, albumName): for album in self.db.PhotoAlbums: if album.name == albumName: log.debug("Found album: %s" % albumName) return album log.debug("Creating album: %s" % albumName) return self._create_photo_album(albumName) def _create_photo_album(self, albumName): if albumName in [a.name for a in self.db.PhotoAlbums]: log.warn("Album already exists: %s" % albumName) album = self._get_photo_album(albumName) else: album = self.db.new_PhotoAlbum(title=albumName) return album def _get_photo_by_id(self, id): for album in self.db.PhotoAlbums: for photo in album: if str(photo['id']) == str(id): return photo return None def _delete_album(self, albumName): if albumName == self.SAFE_PHOTO_ALBUM: log.warn("Cannot delete album: %s" % self.SAFE_PHOTO_ALBUM) else: for album in self.db.PhotoAlbums: if album.name == albumName: for photo in album[:]: album.remove(photo) self.db.remove(album) def _empty_all_photos(self): for photo in self.db.PhotoAlbums[0][:]: self.db.remove(photo) def _get_photo_albums(self): i = [] for album in self.db.PhotoAlbums: i.append(album.name) return i def refresh(self): DataProvider.TwoWay.refresh(self) self.album = self._get_photo_album(self.albumName) def get_all(self): uids = [] for photo in self.album: uids.append(str(photo['id'])) return uids def put(self, f, overwrite, LUID=None): photo = self.db.new_Photo(filename=f.get_local_uri()) self.album = self._get_photo_album(self.albumName) self.album.add(photo) gpod.itdb_photodb_write(self.db._itdb, None) return conduit.datatypes.Rid(str(photo['id']), None, hash(None)) def delete(self, LUID): photo = self._get_photo_by_id(LUID) if photo != None: self.db.remove(photo) gpod.itdb_photodb_write(self.db._itdb, None) def config_setup(self, config): def _delete_click(button): self._delete_album(album_config.get_value()) album_config.choices = self._get_photo_albums() album_config = config.add_item(_('Album'), 'combotext', config_name = 'albumName', choices = self._get_photo_albums(), ) config.add_item(_("Delete"), "button", initial_value = _delete_click ) def is_configured (self, isSource, isTwoWay): return len(self.albumName) > 0 def uninitialize(self): self.db.close() unicode_conv = lambda v: unicode(v).encode('UTF-8','replace') class IPodFileBase: ''' A wrapper around an iPod track. iPod track properties are converted into Media properties, and vice-versa. ''' #Mappings from the Media metadata to the iPod metadata and vice-versa, #including type-checking media_to_ipod = { 'title' : ('title', unicode_conv), 'artist' : ('artist', unicode_conv), 'album' : ('album', unicode_conv), 'composer' : ('composer', unicode_conv), 'rating' : ('rating', lambda v: float(v) / 0.05), 'genre' : ('genre', unicode_conv), 'track_nr' : ('track-number', int), 'tracks' : ('track-count', int), 'bitrate' : ('bitrate', int), 'tracklen' : ('duration', int), 'samplerate' : ('samplerate', int), 'width' : ('width', int), 'height' : ('height', int), } ipod_to_media = { 'title' : ('title', unicode_conv), 'artist' : ('artist', unicode_conv), 'album' : ('album', unicode_conv), 'composer' : ('composer', unicode_conv), 'rating' : ('rating', lambda v: float(v) * 0.05), 'genre' : ('genre', unicode_conv), 'track-number' : ('track_nr', int), 'track-count' : ('tracks', int), 'bitrate' : ('bitrate', int), 'duration' : ('tracklen', int), 'samplerate' : ('samplerate', int), 'width' : ('width', int), 'height' : ('height', int), } def __init__(self, db, track = None, f = None): ''' Wraps an iPod track in a Datatype. Passing a file creates a new track in the iPod db, with media information from that file. Use copy_ipod to transfer it into the iPod. Passing an existing iPod track exports the track's information as a Media datatype. @param ipod_track: An iPod track to wrap @param f: A File to extract the information from ''' self.db = db if track: self.track = track else: self.track = self.db.new_Track() if f: self.set_info_from_file(f) def get_UID(self): ''' Returns the database ID (usually a random number, which is always valid for this track in this db, even across application restarts) ''' return str(self.track['dbid']) def _convert_tags(self, from_tags, mapping): ''' Convert from one mapping to another. Returns an iterator with (name, value) for each tag in from_tags ''' for from_name, from_value in from_tags.iteritems(): if from_name in mapping: to_name, to_converter = mapping[from_name] try: to_value = to_converter(from_value) yield to_name, to_value except Exception, e: log.warn("Could not convert property %s: %s as %s. (Error: %s)" % (from_name, from_value, to_converter, e)) def set_info_from_file(self, f): ''' Get the track information from a file, including the metadata. Works best with GStreamer metadata in MediaFile. ''' tags = f.get_media_tags() for name, value in self._convert_tags(tags, self.media_to_ipod): #log.debug("Got %s = %s" % (name, value)) self.track[name] = value #Make sure we have a title to this song, even if it's just the filename if self.track['title'] is None: self.track['title'] = os.path.basename(f.get_local_uri()) self.track['time_modified'] = os.stat(f.get_local_uri()).st_mtime self.track['time_added'] = int(time.time()) self.track['userdata'] = {'transferred': 0, 'hostname': socket.gethostname(), 'charset': locale.getpreferredencoding()} self.track._set_userdata_utf8('filename', f.get_local_uri()) def get_track_filename(self): filename = self.track.ipod_filename() if not filename or not os.path.exists(filename): filename = self.track._userdata_into_default_locale('filename') return filename def get_hash(self): return str(hash(tuple(self.get_media_tags()))) def get_snippet(self): return "%(artist)s - %(title)s" % track def get_media_tags(self): ''' Extends the MediaFile class to include the iPod metadata, instead of calling the GStreamer loader. It's much faster this way, and provides some nice information to other dataproviders, like ratings. ''' #FIXME: Cache this information #Get the information from the iPod track. #The track might look like a dict, but it isnt, so we make it into one. track_tags = dict(self.track.pairs()) return dict(self._convert_tags(track_tags, self.ipod_to_media)) #FIXME: Remove this. Use native operations from Conduit instead. # We would have to define the transfered userdata as 1 and then call # Conduit to copy the file. # But that is Conduit's copy file way? def copy_ipod(self): self.track.copy_to_ipod() class IPodAudio(IPodFileBase, Audio.Audio): def __init__(self, *args, **kwargs): ''' Initialize a new Audio track for this db and file. ''' IPodFileBase.__init__(self, *args, **kwargs) Audio.Audio.__init__(self, URI = self.get_track_filename()) def set_info_from_file(self, audio): IPodFileBase.set_info_from_file(self, audio) self.track['mediatype'] = gpod.ITDB_MEDIATYPE_AUDIO cover_location = audio.get_audio_cover_location() if cover_location: self.track.set_coverart_from_file(str(cover_location)) class IPodVideo(IPodFileBase, Video.Video): def __init__(self, *args, **kwargs): ''' Initialize a new Video track for this db and file. ''' IPodFileBase.__init__(self, *args, **kwargs) Video.Video.__init__(self, URI = self.get_track_filename()) log.debug('Video kind selected: %s' % (kwargs['video_kind'])) self.video_kind = kwargs['video_kind'] def set_info_from_file(self, video): IPodFileBase.set_info_from_file(video) self.track['mediatype'] = {'movie': gpod.ITDB_MEDIATYPE_MOVIE, 'musicvideo': gpod.ITDB_MEDIATYPE_MUSICVIDEO, 'tvshow': gpod.ITDB_MEDIATYPE_TVSHOW, 'podcast': gpod.ITDB_MEDIATYPE_PODCAST } [self.video_kind] class DBCache: ''' Keeps a list of open GPod databases. Keeps one database open for each mount-point. Automatically disposes unused databases. ''' __db_list = weakref.WeakValueDictionary() __db_locks = weakref.WeakKeyDictionary() __lock = threading.Lock() @classmethod def get_db(self, mount_point): self.__lock.acquire() try: if mount_point in self.__db_list: log.debug('Getting DB in cache for %s' % (mount_point)) db = self.__db_list[mount_point] else: if mount_point: log.debug('Creating DB for %s' % mount_point) db = gpod.Database(mount_point) else: log.debug('Creating local DB') db = gpod.Database(local=True) self.__db_list[mount_point] = db self.__db_locks[db] = threading.Lock() return db finally: self.__lock.release() @classmethod def release_db(self, db): assert db in self.__db_locks # We dont do nothing here yet, but we could use to release resources. # The db is automatically removed from the list because of the weak # reference. log.debug('Releasing DB for %s' % db) @classmethod def lock_db(self, db): assert db in self.__db_locks log.debug('Locking DB %s' % db) self.__db_locks[db].acquire() @classmethod def unlock_db(self, db): assert db in self.__db_locks log.debug('Unlocking DB %s' % db) self.__db_locks[db].release() class IPodMediaTwoWay(IPodBase): FORMAT_CONVERSION_STRING = _("Encoding") def __init__(self, *args): self.local_db = (len(args) == 0) if not self.local_db: IPodBase.__init__(self, *args) else: # Use local database for testing DataProvider.TwoWay.__init__(self) self.uid = "Local" self.db = None #self.tracks = {} self.tracks_id = {} self.track_args = {} self.update_configuration( keep_converted = True, ) def get_db(self): if self.db: DBCache.lock_db(self.db) return self.db if not self.local_db: self.db = DBCache.get_db(self.mountPoint) else: self.db = DBCache.get_db(None) DBCache.lock_db(self.db) return self.db def unlock_db(self): DBCache.unlock_db(self.db) def release_db(self): if not self.db: return self.db.close() DBCache.release_db(self.db) self.db = None def refresh(self): DataProvider.TwoWay.refresh(self) self.tracks = {} self.tracks_id = {} self.get_db() try: def add_track(track): self.tracks_id[str(track['dbid'])] = track [add_track(track) for track in self.db \ if track['mediatype'] in self._mediatype_] finally: self.unlock_db() def get_all(self): return self.tracks_id.keys() def get(self, LUID = None): self.get_db() try: if LUID not in self.tracks_id: raise Exceptions.SyncronizeError('Track ID %s not found in iPod DB %s' % (LUID, self.db)) track = self.tracks_id[LUID] ipod_file = self._ipodmedia_(self.db, track = track) filename = ipod_file.get_track_filename() if not os.path.exists(filename): raise Exceptions.SyncronizeError("Could not find iPod track file %s" % (filename)) #Set a nice "Artist - Title" name with the original filename #extension #FIXME: Doesnt work as expected anymore, the original filename is #renamed instead #if track.ipod_filename() and track['artist'] and track['title']: # ipod_file.force_new_filename("%(artist)s - %(title)s" % track + \ # os.path.splitext(filename)[1]) return ipod_file finally: self.unlock_db() return None def put(self, f, overwrite, LUID=None): self.get_db() try: if LUID and LUID in self.tracks_id: track = self.tracks_id[LUID] media_file = self._ipodmedia_(db = self.db, track = track, f = f, **self.track_args) else: media_file = self._ipodmedia_(db = self.db, f = f, **self.track_args) #FIXME: We keep the db locked while we copy the file. Not good. media_file.copy_ipod() self.tracks_id[str(media_file.track['dbid'])] = media_file.track #FIXME: Writing the db here is for debug only. Closing does not actually # close the db, it only writes it's contents to disk. # Sometimes, if we only close the db when the sync is over, it might # take a long time to close the db, because many files are being # copied to the iPod. Closing the DB every time not only keeps # this time small, but also keeps the db more consistent in case of # a crash. But it also incurs a big overhead. # Maybe a batch update could be a better solution (close after 5 tracks?) self.db.close() return media_file finally: self.unlock_db() def delete(self, LUID): track = self.tracks_id[LUID] if track: self.get_db() try: self.db.remove(track) self.db.close() finally: self.unlock_db() def config_setup(self, config): #Get an array of encodings, so it can be indexed inside a combobox encodings = [(enc_name, enc_opts.get('description', None) or enc_name) for enc_name, enc_opts in self.encodings.iteritems()] config.add_section(_("Conversion options")) config.add_item(_("Encoding"), "combo", config_name = "encoding", choices = encodings ) config.add_item(_("Keep converted files"), "check", config_name = "keep_converted" ) def get_input_conversion_args(self): try: args = self.encodings[self.encoding] # FIXME # If we pass the bool in the args, it will become a string, and # will always return True later in the converter. # So we only pass it if is True. When it's False, not being there # tells the converter it isn't True. # I'm not sure it was supposed to work like this. if self.keep_converted: args['keep_converted'] = True return args except KeyError: return {} def uninitialize(self): self.release_db() IPOD_AUDIO_ENCODINGS = { "mp3": {"description": "Mp3", "acodec": "lame", "file_extension": "mp3"}, #FIXME: AAC needs a MP4 mux #"aac": {"description": "AAC", "acodec": "faac", "file_extension": "m4a"}, } class IPodMusicTwoWay(IPodMediaTwoWay): _name_ = _("iPod Music") _description_ = _("Synchronize your iPod music") _module_type_ = "twoway" _in_type_ = "file/audio" _out_type_ = "file/audio" _icon_ = "audio-x-generic" _configurable_ = True _mediatype_ = (gpod.ITDB_MEDIATYPE_AUDIO,) _ipodmedia_ = IPodAudio def __init__(self, *args): IPodMediaTwoWay.__init__(self, *args) self.encodings = IPOD_AUDIO_ENCODINGS self.update_configuration( encoding = 'mp3', ) IPOD_VIDEO_ENCODINGS = { #FIXME: Add iPod mpeg4 restrictions. Follow: # http://rob.opendot.cl/index.php/useful-stuff/ffmpeg-x264-encoding-guide/ "mp4_x264":{"description": "MP4 (Better quality - H.264)","vcodec":"x264enc", "acodec":"faac", "format":"ffmux_mp4", "file_extension":"m4v", "width": 320, "height": 240, "mimetype": "video/mp4"}, #FIXME: Two-pass encoding is not working. The first pass never finishes. #"mp4_x264_twopass":{"description": "MP4 (H.264, Two-pass EXPERIMENTAL)", # "vcodec_pass1":"x264enc pass=1", "vcodec_pass2":"x264enc pass=2", # "acodec":"faac", "format":"ffmux_mp4", "file_extension":"m4v", # "width": 320, "height": 240, "mimetype": "video/mp4", 'twopass':True}, "mp4_xvid":{"description": "MP4 (Faster conversion - XVid)","vcodec":"ffenc_mpeg4", "acodec":"faac", "format":"ffmux_mp4", "file_extension":"m4v", "width": 320, "height": 240, "mimetype": "video/mp4"}, } class IPodVideoTwoWay(IPodMediaTwoWay): _name_ = _("iPod Video") _description_ = _("Synchronize your iPod videos") _module_type_ = "twoway" _in_type_ = "file/video" _out_type_ = "file/video" _icon_ = "video-x-generic" _configurable_ = True _mediatype_ = (gpod.ITDB_MEDIATYPE_MUSICVIDEO, gpod.ITDB_MEDIATYPE_MOVIE, gpod.ITDB_MEDIATYPE_TVSHOW) _ipodmedia_ = IPodVideo def __init__(self, *args): IPodMediaTwoWay.__init__(self, *args) self.encodings = IPOD_VIDEO_ENCODINGS self.update_configuration( encoding = 'mp4_x264', video_kind = 'movie', ) self._update_track_args() def _update_track_args(self): self.track_args['video_kind'] = self.video_kind def config_setup(self, config): IPodMediaTwoWay.config_setup(self, config) video_kinds = [('movie', _('Movie')), ('musicvideo', _('Music Video')), ('tvshow', _('TV Show'))] config.add_section() config.add_item(_("Video kind"), "combo", config_name = "video_kind", choices = video_kinds) def set_configuration(self, config): IPodMediaTwoWay.set_configuration(self, config) #FIXME Move this to update_configuration callback self._update_track_args() conduit-0.3.17/conduit/modules/iPodModule/Makefile.am0000644000175000017500000000022111214122722017367 00000000000000conduit_handlersdir = $(libdir)/conduit/modules/iPodModule conduit_handlers_PYTHON = iPodModule.py __init__.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/modules/iPodModule/Makefile.in0000644000175000017500000003245011326116730017417 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/modules/iPodModule DIST_COMMON = $(conduit_handlers_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduit_handlersdir)" py_compile = $(top_srcdir)/py-compile DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ conduit_handlersdir = $(libdir)/conduit/modules/iPodModule conduit_handlers_PYTHON = iPodModule.py __init__.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/modules/iPodModule/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/modules/iPodModule/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduit_handlersPYTHON: $(conduit_handlers_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduit_handlersdir)" || $(MKDIR_P) "$(DESTDIR)$(conduit_handlersdir)" @list='$(conduit_handlers_PYTHON)'; dlist=; list2=; test -n "$(conduit_handlersdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduit_handlersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduit_handlersdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduit_handlersdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduit_handlersdir)" $$dlist; \ fi; \ else :; fi uninstall-conduit_handlersPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_handlers_PYTHON)'; test -n "$(conduit_handlersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$fileso tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(conduit_handlersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-conduit_handlersPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-conduit_handlersPYTHON .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-conduit_handlersPYTHON \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am \ uninstall-conduit_handlersPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/modules/iPodModule/__init__.py0000644000175000017500000000000111172176633017455 00000000000000 conduit-0.3.17/conduit/modules/GoogleBookmarksModule.py0000644000175000017500000000467411321403566020126 00000000000000# Copyright 2009 - Andrew Stomont import urllib2 import xml.dom.minidom import logging log = logging.getLogger("modules.GoogleBookmarks") import conduit import conduit.dataproviders.DataProvider as DataProvider import conduit.datatypes.Bookmark as Bookmark from gettext import gettext as _ MODULES = { "GoogleBookmarksDataProviderSource" : { "type": "dataprovider" } } class GoogleBookmarksDataProviderSource(DataProvider.DataSource): _name_ = _("Google Bookmarks") _description_ = _("Sync your Google Bookmarks") _category_ = conduit.dataproviders.CATEGORY_BOOKMARKS _module_type_ = "source" _out_type_ = "bookmark" _icon_ = "applications-internet" _configurable_ = True def __init__(self): DataProvider.DataSource.__init__(self) self.update_configuration( username = "", password = "" ) self._bookmarks = [] def refresh(self): DataProvider.DataSource.refresh(self) self._bookmarks = [] auth_handler = urllib2.HTTPBasicAuthHandler() auth_handler.add_password('Google Search History', 'www.google.com', self.username, self.password) opener = urllib2.build_opener(auth_handler) bookmark_feed = opener.open("https://www.google.com/bookmarks/?output=rss") for item in xml.dom.minidom.parse(bookmark_feed).documentElement.getElementsByTagName("item"): title = item.getElementsByTagName("title")[0].childNodes[0].data link = item.getElementsByTagName("link")[0].childNodes[0].data bookmark = Bookmark.Bookmark(title, link) bookmark.set_UID(bookmark.get_hash()) self._bookmarks.append(bookmark) def get_all(self): DataProvider.DataSource.get_all(self) retval = [] for bookmark in self._bookmarks: retval.append(bookmark.get_UID()) return retval def get(self, luid): DataProvider.DataSource.get(self, luid) for bookmark in self._bookmarks: if bookmark.get_UID() == luid: return bookmark def get_UID(self): return self.username def config_setup(self, config): config.add_section(_("Login Details")) config.add_item(_("Username"), "text", config_name = "username", ) config.add_item(_("Password"), "text", config_name = "password", password = True ) conduit-0.3.17/conduit/modules/NautilusBookmarksModule.py0000644000175000017500000001366411321403566020515 00000000000000# Copyright 2009 - Andrew Stomont import os import logging log = logging.getLogger("modules.NautilusBookmarks") import conduit import conduit.dataproviders.DataProvider as DataProvider import conduit.utils as Utils import conduit.datatypes.Bookmark as Bookmark from gettext import gettext as _ MODULES = { "NautilusBookmarksDataProviderTwoWay" : { "type": "dataprovider" } } class NautilusBookmarksDataProviderTwoWay(DataProvider.TwoWay): _name_ = _("Nautilus Bookmarks") _description_ = _("Sync your Nautilus Bookmarks") _category_ = conduit.dataproviders.CATEGORY_BOOKMARKS _module_type_ = "twoway" _in_type_ = "bookmark" _out_type_ = "bookmark" _icon_ = "nautilus" _configurable_ = True def __init__(self): DataProvider.TwoWay.__init__(self) self._bookmarks = [] self._bookmarksFile = os.path.expanduser("~/.gtk-bookmarks") self.update_configuration( syncLocal = False, syncRemote = True ) def _split_bookmarks_string(self, string): try: (uri, title) = string.split(" ", 1) except ValueError: (uri, title) = (string, string.split("/")[-1]) return (title.replace("\n", ""), uri.replace("\n", "")) def _join_bookmarks_string(self, title, uri): if uri.split("/")[-1] == title: return uri+"\n" else: return "%s %s\n" % (uri, title) def _regenerate_bookmarks_file(self): # CAUTION: serious crack follows bookmarks_file_new_content = [] # new file content # Here we transfer the contents of the old file to the new for line in file(self._bookmarksFile, "r"): (title, uri) = self._split_bookmarks_string(line) if not self.is_local_uri(uri) and not self.syncRemote: # This is a remote uri and remote uri's are not being sync'ed # we'll keep it in the new file instead of removing it bookmarks_file_new_content.append(self._join_bookmarks_string(title, uri)) elif self.is_local_uri(uri) and not self.syncLocal: # This is a local uri and local uri's are not being sync'ed # we'll keep it in the new file instead of removing it bookmarks_file_new_content.append(self._join_bookmarks_string(title, uri)) # Now we transfer the bookmarks from self._bookmarks to the new file for bookmark in self._bookmarks: (title, uri) = (bookmark.get_title(), bookmark.get_uri()) bookmark_string = self._join_bookmarks_string(title, uri) if not bookmark_string in bookmarks_file_new_content: bookmarks_file_new_content.append(bookmark_string) # Write bookmarks_file_new_content to file file(self._bookmarksFile, "w").writelines(bookmarks_file_new_content) def _join_bookmarks_string(self, luid, new_bookmark): for bookmark in self._bookmarks: if bookmark.get_UID() == luid: bookmark = new_bookmark def _put_bookmark(self, bookmark): bookmark.set_UID(bookmark.get_hash()) self._bookmarks.append(bookmark) return bookmark.get_UID() def refresh(self): DataProvider.TwoWay.refresh(self) self._bookmarks = [] for line in file(self._bookmarksFile): (title, uri) = self._split_bookmarks_string(line) if self.is_local_uri(uri): if not self.syncLocal: continue elif not self.syncRemote: continue self._put_bookmark(Bookmark.Bookmark(title, uri)) def get_all(self): DataProvider.TwoWay.get_all(self) retval = [] for bookmark in self._bookmarks: retval.append(bookmark.get_UID()) return retval def get(self, luid): DataProvider.TwoWay.get(self, luid) for bookmark in self._bookmarks: if bookmark.get_UID() == luid: return bookmark def put(self, bookmark, overwrite, luid=None): # thanks to the wiki for most of this DataProvider.TwoWay.put(self, bookmark, overwrite, luid) if overwrite and luid: luid = self._join_bookmarks_string(luid, data) else: if luid == luid in self.get_all(): old_bookmark = self.get(luid) comp = bookmark.compare(old_bookmark) # Possibility 1: If LUID != None (i.e this is a modification/update of a # previous sync, and we are newer, then go ahead an put the data if luid != None and comp == conduit.datatypes.COMPARISON_NEWER: LUID = self._join_bookmarks_string(luid, bookmark) self._regenerate_bookmarks_file() # Possibility 3: We are the same, so return either rid elif comp == conduit.datatypes.COMPARISON_EQUAL: return old_bookmark.get_rid() # Possibility 2, 4: All that remains are conflicts else: raise Exceptions.SynchronizeConflictError(comp , bookmark, old_bookmark) else: # Possibility 5: luid = self._put_bookmark(bookmark) self._regenerate_bookmarks_file() # now return the rid if not luid: raise Exceptions.SyncronizeError("Error putting/updating bookmark") else: return self.get(luid).get_rid() def is_local_uri(self, uri): if uri.startswith("file://"): return True return False def config_setup(self, config): config.add_item(_("Sync bookmarks to local places/files"), "check", config_name = "syncLocal" ) config.add_item(_("Sync bookmarks to remote places/files"), "check", config_name = "syncRemote" ) def get_UID(self): return Utils.get_user_string() conduit-0.3.17/conduit/modules/FacebookModule/0000777000175000017500000000000011326117102016242 500000000000000conduit-0.3.17/conduit/modules/FacebookModule/Makefile.am0000644000175000017500000000024311172176633020226 00000000000000SUBDIRS = pyfacebook conduit_handlersdir = $(libdir)/conduit/modules/FacebookModule conduit_handlers_PYTHON = FacebookModule.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/modules/FacebookModule/FacebookModule.py0000644000175000017500000001445111321403566021423 00000000000000""" Facebook Photo Uploader. """ import os, sys import traceback import md5 import logging log = logging.getLogger("modules.Facebook") import conduit import conduit.utils as Utils import conduit.Web as Web import conduit.dataproviders.Image as Image import conduit.Exceptions as Exceptions from conduit.datatypes import Rid import conduit.datatypes.File as File from gettext import gettext as _ try: import pyfacebook except ImportError: Utils.dataprovider_add_dir_to_path(__file__) import pyfacebook if pyfacebook.VERSION < '0.1': log.info("Facebook support disabled") MODULES = {} else: log.info("Module Information: %s" % Utils.get_module_information(pyfacebook, 'VERSION')) log.info("Facebook parsing using: %s (%s)" % (pyfacebook.RESPONSE_FORMAT, getattr(pyfacebook, "JSON_MODULE", "N/A"))) MODULES = { "FacebookSink" : { "type": "dataprovider" } } class FacebookSink(Image.ImageSink): _name_ = _("Facebook") _description_ = _("Synchronize your Facebook photos") _module_type_ = "sink" _icon_ = "facebook" _configurable_ = True API_KEY="6ce1868c3292471c022c771c0d4d51ed" SECRET="20e2c82829f1884e40efc616a44e5d1f" def __init__(self, *args): Image.ImageSink.__init__(self) self.fapi = pyfacebook.Facebook(FacebookSink.API_KEY, FacebookSink.SECRET) self.browser = conduit.BROWSER_IMPL self.update_configuration( albumname = "" ) self.albums = {} def _upload_photo (self, uploadInfo): """ Upload to album; and return image id here """ try: rsp = self.fapi.photos.upload( uploadInfo.url, aid=self.albums.get(self.albumname, None)) pid = str(rsp["pid"]) return Rid(uid=pid) except pyfacebook.FacebookError, f: raise Exceptions.SyncronizeError("Facebook Upload Error %s" % f) def _get_albums(self): albums = {} try: for a in self.fapi.photos.getAlbums(self.fapi.uid): albums[a['name']] = a['aid'] except pyfacebook.FacebookError, f: log.warn("Error getting album list: %s" % f) return albums def _get_photos(self, albumID): photos = {} try: for p in self.fapi.photos.get(aid=albumID): #only return big photos if p.get("src_big", ""): pid = str(p["pid"]) photos[pid] = p except pyfacebook.FacebookError, f: log.warn("Error getting photos from album %s list: %s" % (albumID,f)) return photos def _get_photo_size (self): """ Respect Facebooks largest image dimension of 604px http://wiki.developers.facebook.com/index.php/Photos.upload """ return "604x604" def _login(self): """ Get ourselves a token we can use to perform all calls """ self.fapi.auth.createToken() url = self.fapi.get_login_url() #wait for log in Web.LoginMagic("Log into Facebook", url, login_function=self._try_login, browser=self.browser, #instance var so tests can set it to system sleep_time=45, #long sleep time to give time to login if using system browser ) def _try_login(self): """ This function is used by the login tester, we try to get a token, but return None if it does not succeed so the login tester can keep trying """ log.info("Trying Login") rsp = self.fapi.auth.getSession() return rsp.has_key("secret") and rsp.has_key("session_key") def config_setup(self, config): def _login_finished(*args): try: if self.fapi.uid: status_label.value = _('Loading album list...') try: albums = self._get_albums().keys() except: status_label.value = _('Failed to connect') else: albums_config.choices = albums status_label.value = _('Logged in') else: status_label.value = _('Failed to login') finally: album_section.enabled = True config.set_busy(False) def _load_albums(button): config.set_busy(True) album_section.enabled = False status_label.value = 'Logging in, please wait...' conduit.GLOBALS.syncManager.run_blocking_dataprovider_function_calls( self, _login_finished, self._login) status_label = config.add_item(_('Status'), 'label', initial_value = "Logged in" if self.fapi.uid else "Not logged in", use_markup = True, ) album_section = config.add_section(_("Album")) albums_config = config.add_item(_("Album name"), "combotext", config_name = "albumname", choices = [], ) load_albums_config = config.add_item(_("Load albums"), "button", initial_value = _load_albums ) def refresh(self): Image.ImageSink.refresh(self) if self.fapi.uid == None: self._login() #get the list of albums if self.fapi.uid: self.albums = self._get_albums() if self.albumname and self.albumname not in self.albums: log.info("Creating album: %s" % self.albumname) try: rsp = self.fapi.photos.createAlbum( #session_key=self.fapi.session_key, name=self.albumname) self.albums[self.albumname] = rsp["aid"] except pyfacebook.FacebookError, f: self.albumname = "" log.warn("Error creating album: %s" % self.albumname) def get_UID(self): if self.fapi.uid == None: return "" return self.fapi.uid def is_configured (self, isSource, isTwoWay): #Specifing an album is optional return True conduit-0.3.17/conduit/modules/FacebookModule/pyfacebook/0000777000175000017500000000000011326117102020364 500000000000000conduit-0.3.17/conduit/modules/FacebookModule/pyfacebook/Makefile.am0000644000175000017500000000022211172176633022345 00000000000000conduit_handlersdir = $(libdir)/conduit/modules/FacebookModule/pyfacebook conduit_handlers_PYTHON = __init__.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/modules/FacebookModule/pyfacebook/Makefile.in0000644000175000017500000003252611326116727022371 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/modules/FacebookModule/pyfacebook DIST_COMMON = $(conduit_handlers_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduit_handlersdir)" py_compile = $(top_srcdir)/py-compile DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ conduit_handlersdir = $(libdir)/conduit/modules/FacebookModule/pyfacebook conduit_handlers_PYTHON = __init__.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/modules/FacebookModule/pyfacebook/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/modules/FacebookModule/pyfacebook/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduit_handlersPYTHON: $(conduit_handlers_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduit_handlersdir)" || $(MKDIR_P) "$(DESTDIR)$(conduit_handlersdir)" @list='$(conduit_handlers_PYTHON)'; dlist=; list2=; test -n "$(conduit_handlersdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduit_handlersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduit_handlersdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduit_handlersdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduit_handlersdir)" $$dlist; \ fi; \ else :; fi uninstall-conduit_handlersPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_handlers_PYTHON)'; test -n "$(conduit_handlersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$fileso tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(conduit_handlersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-conduit_handlersPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-conduit_handlersPYTHON .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-conduit_handlersPYTHON \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am \ uninstall-conduit_handlersPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/modules/FacebookModule/pyfacebook/__init__.py0000644000175000017500000012606411321406256022430 00000000000000#! /usr/bin/env python # # pyfacebook - Python bindings for the Facebook API # # Copyright (c) 2008, Samuel Cormier-Iijima # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the author nor the names of its contributors may # be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS``AS IS'' AND ANY # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ Python bindings for the Facebook API (pyfacebook - http://code.google.com/p/pyfacebook) PyFacebook is a client library that wraps the Facebook API. For more information, see Home Page: http://code.google.com/p/pyfacebook Developer Wiki: http://wiki.developers.facebook.com/index.php/Python Facebook IRC Channel: #facebook on irc.freenode.net PyFacebook can use simplejson if it is installed, which is much faster than XML and also uses less bandwith. Go to http://undefined.org/python/#simplejson to download it, or do apt-get install python-simplejson on a Debian-like system. """ import sys import time import struct import urllib import urllib2 import httplib try: import hashlib except ImportError: import md5 as hashlib import binascii import urlparse import mimetypes # try to use simplejson first, otherwise fallback to XML RESPONSE_FORMAT = 'JSON' try: import json as simplejson simplejson.loads JSON_MODULE = "json" except (ImportError, AttributeError): try: import simplejson simplejson.loads JSON_MODULE = "simplejson" except (ImportError, AttributeError): try: from django.utils import simplejson simplejson.loads JSON_MODULE = "django.utils.simplejson" except (ImportError, AttributeError): try: import jsonlib as simplejson simplejson.loads JSON_MODULE = "jsonlib" except (ImportError, AttributeError): from xml.dom import minidom RESPONSE_FORMAT = 'XML' # support Google App Engine. GAE does not have a working urllib.urlopen. try: from google.appengine.api import urlfetch def urlread(url, data=None, headers=None): if data is not None: if headers is None: headers = {"Content-type": "application/x-www-form-urlencoded"} method = urlfetch.POST else: if headers is None: headers = {} method = urlfetch.GET result = urlfetch.fetch(url, method=method, payload=data, headers=headers) if result.status_code == 200: return result.content else: raise urllib2.URLError("fetch error url=%s, code=%d" % (url, result.status_code)) except ImportError: def urlread(url, data=None): res = urllib2.urlopen(url, data=data) return res.read() __all__ = ['Facebook'] VERSION = '0.1' FACEBOOK_URL = 'http://api.facebook.com/restserver.php' FACEBOOK_SECURE_URL = 'https://api.facebook.com/restserver.php' class json(object): pass # simple IDL for the Facebook API METHODS = { 'application': { 'getPublicInfo': [ ('application_id', int, ['optional']), ('application_api_key', str, ['optional']), ('application_canvas_name ', str,['optional']), ], }, # admin methods 'admin': { 'getAllocation': [ ('integration_point_name', str, []), ], }, # auth methods 'auth': { 'revokeAuthorization': [ ('uid', int, ['optional']), ], }, # feed methods 'feed': { 'publishStoryToUser': [ ('title', str, []), ('body', str, ['optional']), ('image_1', str, ['optional']), ('image_1_link', str, ['optional']), ('image_2', str, ['optional']), ('image_2_link', str, ['optional']), ('image_3', str, ['optional']), ('image_3_link', str, ['optional']), ('image_4', str, ['optional']), ('image_4_link', str, ['optional']), ('priority', int, ['optional']), ], 'publishActionOfUser': [ ('title', str, []), ('body', str, ['optional']), ('image_1', str, ['optional']), ('image_1_link', str, ['optional']), ('image_2', str, ['optional']), ('image_2_link', str, ['optional']), ('image_3', str, ['optional']), ('image_3_link', str, ['optional']), ('image_4', str, ['optional']), ('image_4_link', str, ['optional']), ('priority', int, ['optional']), ], 'publishTemplatizedAction': [ ('title_template', str, []), ('page_actor_id', int, ['optional']), ('title_data', json, ['optional']), ('body_template', str, ['optional']), ('body_data', json, ['optional']), ('body_general', str, ['optional']), ('image_1', str, ['optional']), ('image_1_link', str, ['optional']), ('image_2', str, ['optional']), ('image_2_link', str, ['optional']), ('image_3', str, ['optional']), ('image_3_link', str, ['optional']), ('image_4', str, ['optional']), ('image_4_link', str, ['optional']), ('target_ids', list, ['optional']), ], 'registerTemplateBundle': [ ('one_line_story_templates', json, []), ('short_story_templates', json, ['optional']), ('full_story_template', json, ['optional']), ('action_links', json, ['optional']), ], 'deactivateTemplateBundleByID': [ ('template_bundle_id', int, []), ], 'getRegisteredTemplateBundles': [], 'getRegisteredTemplateBundleByID': [ ('template_bundle_id', str, []), ], 'publishUserAction': [ ('template_bundle_id', int, []), ('template_data', json, ['optional']), ('target_ids', list, ['optional']), ('body_general', str, ['optional']), ('story_size', int, ['optional']), ], }, # fql methods 'fql': { 'query': [ ('query', str, []), ], }, # friends methods 'friends': { 'areFriends': [ ('uids1', list, []), ('uids2', list, []), ], 'get': [ ('flid', int, ['optional']), ], 'getLists': [], 'getAppUsers': [], }, # notifications methods 'notifications': { 'get': [], 'send': [ ('to_ids', list, []), ('notification', str, []), ('email', str, ['optional']), ('type', str, ['optional']), ], 'sendRequest': [ ('to_ids', list, []), ('type', str, []), ('content', str, []), ('image', str, []), ('invite', bool, []), ], 'sendEmail': [ ('recipients', list, []), ('subject', str, []), ('text', str, ['optional']), ('fbml', str, ['optional']), ] }, # profile methods 'profile': { 'setFBML': [ ('markup', str, ['optional']), ('uid', int, ['optional']), ('profile', str, ['optional']), ('profile_action', str, ['optional']), ('mobile_fbml', str, ['optional']), ('profile_main', str, ['optional']), ], 'getFBML': [ ('uid', int, ['optional']), ('type', int, ['optional']), ], 'setInfo': [ ('title', str, []), ('type', int, []), ('info_fields', json, []), ('uid', int, []), ], 'getInfo': [ ('uid', int, []), ], 'setInfoOptions': [ ('field', str, []), ('options', json, []), ], 'getInfoOptions': [ ('field', str, []), ], }, # users methods 'users': { 'getInfo': [ ('uids', list, []), ('fields', list, [('default', ['name'])]), ], 'getStandardInfo': [ ('uids', list, []), ('fields', list, [('default', ['uid'])]), ], 'getLoggedInUser': [], 'isAppAdded': [], 'hasAppPermission': [ ('ext_perm', str, []), ('uid', int, ['optional']), ], 'setStatus': [ ('status', str, []), ('clear', bool, []), ('status_includes_verb', bool, ['optional']), ('uid', int, ['optional']), ], }, # events methods 'events': { 'get': [ ('uid', int, ['optional']), ('eids', list, ['optional']), ('start_time', int, ['optional']), ('end_time', int, ['optional']), ('rsvp_status', str, ['optional']), ], 'getMembers': [ ('eid', int, []), ], 'create': [ ('event_info', json, []), ], }, # update methods 'update': { 'decodeIDs': [ ('ids', list, []), ], }, # groups methods 'groups': { 'get': [ ('uid', int, ['optional']), ('gids', list, ['optional']), ], 'getMembers': [ ('gid', int, []), ], }, # marketplace methods 'marketplace': { 'createListing': [ ('listing_id', int, []), ('show_on_profile', bool, []), ('listing_attrs', str, []), ], 'getCategories': [], 'getListings': [ ('listing_ids', list, []), ('uids', list, []), ], 'getSubCategories': [ ('category', str, []), ], 'removeListing': [ ('listing_id', int, []), ('status', str, []), ], 'search': [ ('category', str, ['optional']), ('subcategory', str, ['optional']), ('query', str, ['optional']), ], }, # pages methods 'pages': { 'getInfo': [ ('page_ids', list, ['optional']), ('uid', int, ['optional']), ], 'isAdmin': [ ('page_id', int, []), ], 'isAppAdded': [ ('page_id', int, []), ], 'isFan': [ ('page_id', int, []), ('uid', int, []), ], }, # photos methods 'photos': { 'addTag': [ ('pid', int, []), ('tag_uid', int, [('default', 0)]), ('tag_text', str, [('default', '')]), ('x', float, [('default', 50)]), ('y', float, [('default', 50)]), ('tags', str, ['optional']), ], 'createAlbum': [ ('name', str, []), ('location', str, ['optional']), ('description', str, ['optional']), ], 'get': [ ('subj_id', int, ['optional']), ('aid', int, ['optional']), ('pids', list, ['optional']), ], 'getAlbums': [ ('uid', int, ['optional']), ('aids', list, ['optional']), ], 'getTags': [ ('pids', list, []), ], }, # status methods 'status': { 'get': [ ('uid', int, ['optional']), ('limit', int, ['optional']), ], 'set': [ ('status', str, ['optional']), ('uid', int, ['optional']), ], }, # fbml methods 'fbml': { 'refreshImgSrc': [ ('url', str, []), ], 'refreshRefUrl': [ ('url', str, []), ], 'setRefHandle': [ ('handle', str, []), ('fbml', str, []), ], }, # SMS Methods 'sms' : { 'canSend' : [ ('uid', int, []), ], 'send' : [ ('uid', int, []), ('message', str, []), ('session_id', int, []), ('req_session', bool, []), ], }, 'data': { 'getCookies': [ ('uid', int, []), ('string', str, []), ], 'setCookie': [ ('uid', int, []), ('name', str, []), ('value', str, []), ('expires', int, ['optional']), ('path', str, ['optional']), ], }, # connect methods 'connect': { 'registerUsers': [ ('accounts', json, []), ], 'unregisterUsers': [ ('email_hashes', json, []), ], 'getUnconnectedFriendsCount': [ ], }, #stream methods (beta) 'stream' : { 'addComment' : [ ('post_id', int, []), ('comment', str, []), ('uid', int, ['optional']), ], 'addLike': [ ('uid', int, ['optional']), ('post_id', int, ['optional']), ], 'get' : [ ('viewer_id', int, ['optional']), ('source_ids', list, ['optional']), ('start_time', int, ['optional']), ('end_time', int, ['optional']), ('limit', int, ['optional']), ('filter_key', str, ['optional']), ], 'getComments' : [ ('post_id', int, []), ], 'getFilters' : [ ('uid', int, ['optional']), ], 'publish' : [ ('message', str, ['optional']), ('attachment', json, ['optional']), ('action_links', list, ['optional']), ('target_id', str, ['optional']), ('uid', str, ['optional']), ], 'remove' : [ ('post_id', int, []), ('uid', int, ['optional']), ], 'removeComment' : [ ('comment_id', int, []), ('uid', int, ['optional']), ], 'removeLike' : [ ('uid', int, ['optional']), ('post_id', int, ['optional']), ], } } class Proxy(object): """Represents a "namespace" of Facebook API calls.""" def __init__(self, client, name): self._client = client self._name = name def __call__(self, method=None, args=None, add_session_args=True): # for Django templates if method is None: return self if add_session_args: self._client._add_session_args(args) return self._client('%s.%s' % (self._name, method), args) # generate the Facebook proxies def __generate_proxies(): for namespace in METHODS: methods = {} for method in METHODS[namespace]: params = ['self'] body = ['args = {}'] for param_name, param_type, param_options in METHODS[namespace][method]: param = param_name for option in param_options: if isinstance(option, tuple) and option[0] == 'default': if param_type == list: param = '%s=None' % param_name body.append('if %s is None: %s = %s' % (param_name, param_name, repr(option[1]))) else: param = '%s=%s' % (param_name, repr(option[1])) if param_type == json: # we only jsonify the argument if it's a list or a dict, for compatibility body.append('if isinstance(%s, list) or isinstance(%s, dict): %s = simplejson.dumps(%s)' % ((param_name,) * 4)) if 'optional' in param_options: param = '%s=None' % param_name body.append('if %s is not None: args[\'%s\'] = %s' % (param_name, param_name, param_name)) else: body.append('args[\'%s\'] = %s' % (param_name, param_name)) params.append(param) # simple docstring to refer them to Facebook API docs body.insert(0, '"""Facebook API call. See http://developers.facebook.com/documentation.php?v=1.0&method=%s.%s"""' % (namespace, method)) body.insert(0, 'def %s(%s):' % (method, ', '.join(params))) body.append('return self(\'%s\', args)' % method) exec('\n '.join(body)) methods[method] = eval(method) proxy = type('%sProxy' % namespace.title(), (Proxy, ), methods) globals()[proxy.__name__] = proxy __generate_proxies() class FacebookError(Exception): """Exception class for errors received from Facebook.""" def __init__(self, code, msg, args=None): self.code = code self.msg = msg self.args = args def __str__(self): return 'Error %s: %s' % (self.code, self.msg) class AuthProxy(AuthProxy): """Special proxy for facebook.auth.""" def getSession(self): """Facebook API call. See http://developers.facebook.com/documentation.php?v=1.0&method=auth.getSession""" args = {} try: args['auth_token'] = self._client.auth_token except AttributeError: raise RuntimeError('Client does not have auth_token set.') result = self._client('%s.getSession' % self._name, args) self._client.session_key = result['session_key'] self._client.uid = result['uid'] self._client.secret = result.get('secret') self._client.session_key_expires = result['expires'] return result def createToken(self): """Facebook API call. See http://developers.facebook.com/documentation.php?v=1.0&method=auth.createToken""" token = self._client('%s.createToken' % self._name) self._client.auth_token = token return token class FriendsProxy(FriendsProxy): """Special proxy for facebook.friends.""" def get(self, **kwargs): """Facebook API call. See http://developers.facebook.com/documentation.php?v=1.0&method=friends.get""" if not kwargs.get('flid') and self._client._friends: return self._client._friends return super(FriendsProxy, self).get(**kwargs) class PhotosProxy(PhotosProxy): """Special proxy for facebook.photos.""" def upload(self, image, aid=None, caption=None, size=(604, 1024), filename=None, callback=None): """Facebook API call. See http://developers.facebook.com/documentation.php?v=1.0&method=photos.upload size -- an optional size (width, height) to resize the image to before uploading. Resizes by default to Facebook's maximum display width of 604. """ args = {} if aid is not None: args['aid'] = aid if caption is not None: args['caption'] = caption args = self._client._build_post_args('facebook.photos.upload', self._client._add_session_args(args)) try: import cStringIO as StringIO except ImportError: import StringIO # check for a filename specified...if the user is passing binary data in # image then a filename will be specified if filename is None: try: import Image except ImportError: data = StringIO.StringIO(open(image, 'rb').read()) else: img = Image.open(image) if size: img.thumbnail(size, Image.ANTIALIAS) data = StringIO.StringIO() img.save(data, img.format) else: # there was a filename specified, which indicates that image was not # the path to an image file but rather the binary data of a file data = StringIO.StringIO(image) image = filename content_type, body = self.__encode_multipart_formdata(list(args.iteritems()), [(image, data)]) urlinfo = urlparse.urlsplit(self._client.facebook_url) try: content_length = len(body) chunk_size = 4096 h = httplib.HTTPConnection(urlinfo[1]) h.putrequest('POST', urlinfo[2]) h.putheader('Content-Type', content_type) h.putheader('Content-Length', str(content_length)) h.putheader('MIME-Version', '1.0') h.putheader('User-Agent', 'PyFacebook Client Library') h.endheaders() if callback: count = 0 while len(body) > 0: if len(body) < chunk_size: data = body body = '' else: data = body[0:chunk_size] body = body[chunk_size:] h.send(data) count += 1 callback(count, chunk_size, content_length) else: h.send(body) response = h.getresponse() if response.status != 200: raise Exception('Error uploading photo: Facebook returned HTTP %s (%s)' % (response.status, response.reason)) response = response.read() except: # sending the photo failed, perhaps we are using GAE try: from google.appengine.api import urlfetch try: response = urlread(url=self._client.facebook_url,data=body,headers={'POST':urlinfo[2],'Content-Type':content_type,'MIME-Version':'1.0'}) except urllib2.URLError: raise Exception('Error uploading photo: Facebook returned %s' % (response)) except ImportError: # could not import from google.appengine.api, so we are not running in GAE raise Exception('Error uploading photo.') return self._client._parse_response(response, 'facebook.photos.upload') def __encode_multipart_formdata(self, fields, files): """Encodes a multipart/form-data message to upload an image.""" boundary = '-------tHISiStheMulTIFoRMbOUNDaRY' crlf = '\r\n' l = [] for (key, value) in fields: l.append('--' + boundary) l.append('Content-Disposition: form-data; name="%s"' % str(key)) l.append('') l.append(str(value)) for (filename, value) in files: l.append('--' + boundary) l.append('Content-Disposition: form-data; filename="%s"' % (str(filename), )) l.append('Content-Type: %s' % self.__get_content_type(filename)) l.append('') l.append(value.getvalue()) l.append('--' + boundary + '--') l.append('') body = crlf.join(l) content_type = 'multipart/form-data; boundary=%s' % boundary return content_type, body def __get_content_type(self, filename): """Returns a guess at the MIME type of the file from the filename.""" return str(mimetypes.guess_type(filename)[0]) or 'application/octet-stream' class Facebook(object): """ Provides access to the Facebook API. Instance Variables: added True if the user has added this application. api_key Your API key, as set in the constructor. app_name Your application's name, i.e. the APP_NAME in http://apps.facebook.com/APP_NAME/ if this is for an internal web application. Optional, but useful for automatic redirects to canvas pages. auth_token The auth token that Facebook gives you, either with facebook.auth.createToken, or through a GET parameter. callback_path The path of the callback set in the Facebook app settings. If your callback is set to http://www.example.com/facebook/callback/, this should be '/facebook/callback/'. Optional, but useful for automatic redirects back to the same page after login. desktop True if this is a desktop app, False otherwise. Used for determining how to authenticate. ext_perms Any extended permissions that the user has granted to your application. This parameter is set only if the user has granted any. facebook_url The url to use for Facebook requests. facebook_secure_url The url to use for secure Facebook requests. in_canvas True if the current request is for a canvas page. in_profile_tab True if the current request is for a user's tab for your application. internal True if this Facebook object is for an internal application (one that can be added on Facebook) locale The user's locale. Default: 'en_US' page_id Set to the page_id of the current page (if any) profile_update_time The time when this user's profile was last updated. This is a UNIX timestamp. Default: None if unknown. secret Secret that is used after getSession for desktop apps. secret_key Your application's secret key, as set in the constructor. session_key The current session key. Set automatically by auth.getSession, but can be set manually for doing infinite sessions. session_key_expires The UNIX time of when this session key expires, or 0 if it never expires. uid After a session is created, you can get the user's UID with this variable. Set automatically by auth.getSession. ---------------------------------------------------------------------- """ def __init__(self, api_key, secret_key, auth_token=None, app_name=None, callback_path=None, internal=None, proxy=None, facebook_url=None, facebook_secure_url=None): """ Initializes a new Facebook object which provides wrappers for the Facebook API. If this is a desktop application, the next couple of steps you might want to take are: facebook.auth.createToken() # create an auth token facebook.login() # show a browser window wait_login() # somehow wait for the user to log in facebook.auth.getSession() # get a session key For web apps, if you are passed an auth_token from Facebook, pass that in as a named parameter. Then call: facebook.auth.getSession() """ self.api_key = api_key self.secret_key = secret_key self.session_key = None self.session_key_expires = None self.auth_token = auth_token self.secret = None self.uid = None self.page_id = None self.in_canvas = False self.in_profile_tab = False self.added = False self.app_name = app_name self.callback_path = callback_path self.internal = internal self._friends = None self.locale = 'en_US' self.profile_update_time = None self.ext_perms = None self.proxy = proxy if facebook_url is None: self.facebook_url = FACEBOOK_URL else: self.facebook_url = facebook_url if facebook_secure_url is None: self.facebook_secure_url = FACEBOOK_SECURE_URL else: self.facebook_secure_url = facebook_secure_url for namespace in METHODS: self.__dict__[namespace] = eval('%sProxy(self, \'%s\')' % (namespace.title(), 'facebook.%s' % namespace)) def _hash_args(self, args, secret=None): """Hashes arguments by joining key=value pairs, appending a secret, and then taking the MD5 hex digest.""" # @author: houyr # fix for UnicodeEncodeError hasher = hashlib.md5(''.join(['%s=%s' % (isinstance(x, unicode) and x.encode("utf-8") or x, isinstance(args[x], unicode) and args[x].encode("utf-8") or args[x]) for x in sorted(args.keys())])) if secret: hasher.update(secret) elif self.secret: hasher.update(self.secret) else: hasher.update(self.secret_key) return hasher.hexdigest() def _parse_response_item(self, node): """Parses an XML response node from Facebook.""" if node.nodeType == node.DOCUMENT_NODE and \ node.childNodes[0].hasAttributes() and \ node.childNodes[0].hasAttribute('list') and \ node.childNodes[0].getAttribute('list') == "true": return {node.childNodes[0].nodeName: self._parse_response_list(node.childNodes[0])} elif node.nodeType == node.ELEMENT_NODE and \ node.hasAttributes() and \ node.hasAttribute('list') and \ node.getAttribute('list')=="true": return self._parse_response_list(node) elif len(filter(lambda x: x.nodeType == x.ELEMENT_NODE, node.childNodes)) > 0: return self._parse_response_dict(node) else: return ''.join(node.data for node in node.childNodes if node.nodeType == node.TEXT_NODE) def _parse_response_dict(self, node): """Parses an XML dictionary response node from Facebook.""" result = {} for item in filter(lambda x: x.nodeType == x.ELEMENT_NODE, node.childNodes): result[item.nodeName] = self._parse_response_item(item) if node.nodeType == node.ELEMENT_NODE and node.hasAttributes(): if node.hasAttribute('id'): result['id'] = node.getAttribute('id') return result def _parse_response_list(self, node): """Parses an XML list response node from Facebook.""" result = [] for item in filter(lambda x: x.nodeType == x.ELEMENT_NODE, node.childNodes): result.append(self._parse_response_item(item)) return result def _check_error(self, response): """Checks if the given Facebook response is an error, and then raises the appropriate exception.""" if type(response) is dict and response.has_key('error_code'): raise FacebookError(response['error_code'], response['error_msg'], response['request_args']) def _build_post_args(self, method, args=None): """Adds to args parameters that are necessary for every call to the API.""" if args is None: args = {} for arg in args.items(): if type(arg[1]) == list: args[arg[0]] = ','.join(str(a) for a in arg[1]) elif type(arg[1]) == unicode: args[arg[0]] = arg[1].encode("UTF-8") elif type(arg[1]) == bool: args[arg[0]] = str(arg[1]).lower() args['method'] = method args['api_key'] = self.api_key args['v'] = '1.0' args['format'] = RESPONSE_FORMAT args['sig'] = self._hash_args(args) return args def _add_session_args(self, args=None): """Adds 'session_key' and 'call_id' to args, which are used for API calls that need sessions.""" if args is None: args = {} if not self.session_key: return args #some calls don't need a session anymore. this might be better done in the markup #raise RuntimeError('Session key not set. Make sure auth.getSession has been called.') args['session_key'] = self.session_key args['call_id'] = str(int(time.time() * 1000)) return args def _parse_response(self, response, method, format=None): """Parses the response according to the given (optional) format, which should be either 'JSON' or 'XML'.""" if not format: format = RESPONSE_FORMAT if format == 'JSON': result = simplejson.loads(response) self._check_error(result) elif format == 'XML': dom = minidom.parseString(response) result = self._parse_response_item(dom) dom.unlink() if 'error_response' in result: self._check_error(result['error_response']) result = result[method[9:].replace('.', '_') + '_response'] else: raise RuntimeError('Invalid format specified.') return result def hash_email(self, email): """ Hash an email address in a format suitable for Facebook Connect. """ email = email.lower().strip() return "%s_%s" % ( struct.unpack("I", struct.pack("i", binascii.crc32(email)))[0], hashlib.md5(email).hexdigest(), ) def unicode_urlencode(self, params): """ @author: houyr A unicode aware version of urllib.urlencode. """ if isinstance(params, dict): params = params.items() return urllib.urlencode([(k, isinstance(v, unicode) and v.encode('utf-8') or v) for k, v in params]) def __call__(self, method=None, args=None, secure=False): """Make a call to Facebook's REST server.""" # for Django templates, if this object is called without any arguments # return the object itself if method is None: return self # @author: houyr # fix for bug of UnicodeEncodeError post_data = self.unicode_urlencode(self._build_post_args(method, args)) if self.proxy: proxy_handler = urllib2.ProxyHandler(self.proxy) opener = urllib2.build_opener(proxy_handler) if secure: response = opener.open(self.facebook_secure_url, post_data).read() else: response = opener.open(self.facebook_url, post_data).read() else: if secure: response = urlread(self.facebook_secure_url, post_data) else: response = urlread(self.facebook_url, post_data) return self._parse_response(response, method) # URL helpers def get_url(self, page, **args): """ Returns one of the Facebook URLs (www.facebook.com/SOMEPAGE.php). Named arguments are passed as GET query string parameters. """ return 'http://www.facebook.com/%s.php?%s' % (page, urllib.urlencode(args)) def get_app_url(self, path=''): """ Returns the URL for this app's canvas page, according to app_name. """ return 'http://apps.facebook.com/%s/%s' % (self.app_name, path) def get_add_url(self, next=None): """ Returns the URL that the user should be redirected to in order to add the application. """ args = {'api_key': self.api_key, 'v': '1.0'} if next is not None: args['next'] = next return self.get_url('install', **args) def get_authorize_url(self, next=None, next_cancel=None): """ Returns the URL that the user should be redirected to in order to authorize certain actions for application. """ args = {'api_key': self.api_key, 'v': '1.0'} if next is not None: args['next'] = next if next_cancel is not None: args['next_cancel'] = next_cancel return self.get_url('authorize', **args) def get_login_url(self, next=None, popup=False, canvas=True): """ Returns the URL that the user should be redirected to in order to login. next -- the URL that Facebook should redirect to after login """ args = {'api_key': self.api_key, 'v': '1.0'} if next is not None: args['next'] = next if canvas is True: args['canvas'] = 1 if popup is True: args['popup'] = 1 if self.auth_token is not None: args['auth_token'] = self.auth_token return self.get_url('login', **args) def login(self, popup=False): """Open a web browser telling the user to login to Facebook.""" import webbrowser webbrowser.open(self.get_login_url(popup=popup)) def get_ext_perm_url(self, ext_perm, next=None, popup=False): """ Returns the URL that the user should be redirected to in order to grant an extended permission. ext_perm -- the name of the extended permission to request next -- the URL that Facebook should redirect to after login """ args = {'ext_perm': ext_perm, 'api_key': self.api_key, 'v': '1.0'} if next is not None: args['next'] = next if popup is True: args['popup'] = 1 return self.get_url('authorize', **args) def request_extended_permission(self, ext_perm, popup=False): """Open a web browser telling the user to grant an extended permission.""" import webbrowser webbrowser.open(self.get_ext_perm_url(ext_perm, popup=popup)) def check_session(self, request): """ Checks the given Django HttpRequest for Facebook parameters such as POST variables or an auth token. If the session is valid, returns True and this object can now be used to access the Facebook API. Otherwise, it returns False, and the application should take the appropriate action (either log the user in or have him add the application). """ self.in_canvas = (request.POST.get('fb_sig_in_canvas') == '1') if self.session_key and (self.uid or self.page_id): return True if request.method == 'POST': params = self.validate_signature(request.POST) else: if 'installed' in request.GET: self.added = True if 'fb_page_id' in request.GET: self.page_id = request.GET['fb_page_id'] if 'auth_token' in request.GET: self.auth_token = request.GET['auth_token'] try: self.auth.getSession() except FacebookError, e: self.auth_token = None return False return True params = self.validate_signature(request.GET) if not params: # first check if we are in django - to check cookies if hasattr(request, 'COOKIES'): params = self.validate_cookie_signature(request.COOKIES) else: # if not, then we might be on GoogleAppEngine, check their request object cookies if hasattr(request,'cookies'): params = self.validate_cookie_signature(request.cookies) if not params: return False if params.get('in_canvas') == '1': self.in_canvas = True if params.get('in_profile_tab') == '1': self.in_profile_tab = True if params.get('added') == '1': self.added = True if params.get('expires'): self.session_key_expires = int(params['expires']) if 'locale' in params: self.locale = params['locale'] if 'profile_update_time' in params: try: self.profile_update_time = int(params['profile_update_time']) except ValueError: pass if 'ext_perms' in params: self.ext_perms = params['ext_perms'] if 'friends' in params: if params['friends']: self._friends = params['friends'].split(',') else: self._friends = [] if 'session_key' in params: self.session_key = params['session_key'] if 'user' in params: self.uid = params['user'] elif 'page_id' in params: self.page_id = params['page_id'] else: return False elif 'profile_session_key' in params: self.session_key = params['profile_session_key'] if 'profile_user' in params: self.uid = params['profile_user'] else: return False elif 'canvas_user' in params: self.uid = params['canvas_user'] else: return False return True def validate_signature(self, post, prefix='fb_sig', timeout=None): """ Validate parameters passed to an internal Facebook app from Facebook. """ args = post.copy() if prefix not in args: return None del args[prefix] if timeout and '%s_time' % prefix in post and time.time() - float(post['%s_time' % prefix]) > timeout: return None args = dict([(key[len(prefix + '_'):], value) for key, value in args.items() if key.startswith(prefix)]) hash = self._hash_args(args) if hash == post[prefix]: return args else: return None def validate_cookie_signature(self, cookies): """ Validate parameters passed by cookies, namely facebookconnect or js api. """ if not self.api_key in cookies.keys(): return None sigkeys = [] params = dict() for k in sorted(cookies.keys()): if k.startswith(self.api_key+"_"): sigkeys.append(k) params[k.replace(self.api_key+"_","")] = cookies[k] vals = ''.join(['%s=%s' % (x.replace(self.api_key+"_",""), cookies[x]) for x in sigkeys]) hasher = hashlib.md5(vals) hasher.update(self.secret_key) digest = hasher.hexdigest() if digest == cookies[self.api_key]: return params else: return False if __name__ == '__main__': # sample desktop application api_key = '' secret_key = '' facebook = Facebook(api_key, secret_key) facebook.auth.createToken() # Show login window # Set popup=True if you want login without navigational elements facebook.login() # Login to the window, then press enter print 'After logging in, press enter...' raw_input() facebook.auth.getSession() print 'Session Key: ', facebook.session_key print 'Your UID: ', facebook.uid info = facebook.users.getInfo([facebook.uid], ['name', 'birthday', 'affiliations', 'sex'])[0] print 'Your Name: ', info['name'] print 'Your Birthday: ', info['birthday'] print 'Your Gender: ', info['sex'] friends = facebook.friends.get() friends = facebook.users.getInfo(friends[0:5], ['name', 'birthday', 'relationship_status']) for friend in friends: print friend['name'], 'has a birthday on', friend['birthday'], 'and is', friend['relationship_status'] arefriends = facebook.friends.areFriends([friends[0]['uid']], [friends[1]['uid']]) photos = facebook.photos.getAlbums(facebook.uid) conduit-0.3.17/conduit/modules/FacebookModule/Makefile.in0000644000175000017500000005060411326116727020244 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/modules/FacebookModule DIST_COMMON = $(conduit_handlers_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduit_handlersdir)" py_compile = $(top_srcdir)/py-compile RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = pyfacebook conduit_handlersdir = $(libdir)/conduit/modules/FacebookModule conduit_handlers_PYTHON = FacebookModule.py all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/modules/FacebookModule/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/modules/FacebookModule/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduit_handlersPYTHON: $(conduit_handlers_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduit_handlersdir)" || $(MKDIR_P) "$(DESTDIR)$(conduit_handlersdir)" @list='$(conduit_handlers_PYTHON)'; dlist=; list2=; test -n "$(conduit_handlersdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduit_handlersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduit_handlersdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduit_handlersdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduit_handlersdir)" $$dlist; \ fi; \ else :; fi uninstall-conduit_handlersPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_handlers_PYTHON)'; test -n "$(conduit_handlersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$fileso # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(conduit_handlersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-conduit_handlersPYTHON install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-conduit_handlersPYTHON .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-local \ ctags ctags-recursive distclean distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-conduit_handlersPYTHON install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-conduit_handlersPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/modules/EvolutionModule/0000777000175000017500000000000011326117103016516 500000000000000conduit-0.3.17/conduit/modules/EvolutionModule/Makefile.am0000644000175000017500000000023311214122722020463 00000000000000conduit_handlersdir = $(libdir)/conduit/modules/EvolutionModule conduit_handlers_PYTHON = EvolutionModule.py __init__.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/modules/EvolutionModule/EvolutionModule.py0000644000175000017500000003034611321403566022152 00000000000000import datetime import gobject from gettext import gettext as _ import logging log = logging.getLogger("modules.Evolution") import conduit import conduit.dataproviders.DataProvider as DataProvider import conduit.utils as Utils import conduit.Exceptions as Exceptions import conduit.datatypes.Contact as Contact import conduit.datatypes.Event as Event import conduit.datatypes.Note as Note MODULES = {} try: import evolution if evolution.__version__ >= (0,0,4): MODULES = { "EvoContactTwoWay" : { "type": "dataprovider" }, "EvoCalendarTwoWay" : { "type": "dataprovider" }, "EvoTasksTwoWay" : { "type": "dataprovider" }, "EvoMemoTwoWay" : { "type": "dataprovider" }, } log.info("Module Information: %s" % Utils.get_module_information(evolution, '__version__')) if evolution.__version__ <= (2,2,2): #Work around bug #561354 import bonobo except ImportError: log.info("Evolution support disabled") class EvoBase(DataProvider.TwoWay): _configurable_ = True def __init__(self, sourceURI, *args): DataProvider.TwoWay.__init__(self) self.defaultSourceURI = sourceURI self.selectedSourceURI = sourceURI self.update_configuration( sourceURI = (sourceURI, self._set_selectedSourceURI, lambda: self.selectedSourceURI), ) self.allSourceURIs = [] self.uids = None def _set_selectedSourceURI(self, value): self.selectedSourceURI = value def _get_object(self, uid): raise NotImplementedError def _create_object(self, obj): raise NotImplementedError def _update_object(self, uid, obj): if self._delete_object(uid): uid = self._create_object(obj) return uid else: raise Exceptions.SyncronizeError("Error updating object (uid: %s)" % uid) def _delete_object(self, uid): raise NotImplementedError def refresh(self): DataProvider.TwoWay.refresh(self) self.uids = [] def get_all(self): DataProvider.TwoWay.get_all(self) return self.uids def get(self, LUID): DataProvider.TwoWay.get(self, LUID) return self._get_object(LUID) def put(self, obj, overwrite, LUID=None): DataProvider.TwoWay.put(self, obj, overwrite, LUID) if LUID != None: existing = self._get_object(LUID) if existing != None: if overwrite == True: rid = self._update_object(LUID, obj) return rid else: comp = obj.compare(existing, "%s-%s" % (self.__class__.__name__, self.get_UID())) # only update if newer if comp != conduit.datatypes.COMPARISON_NEWER: raise Exceptions.SynchronizeConflictError(comp, obj, existing) else: # overwrite and return new ID rid = self._update_object(LUID, obj) return rid # if we get here then it is new... log.info("Creating new object") rid = self._create_object(obj) return rid def delete(self, LUID): if not self._delete_object(LUID): log.warn("Error deleting event (uid: %s)" % LUID) def finish(self, aborted, error, conflict): DataProvider.TwoWay.finish(self) self.uids = None def config_setup(self, config, name): config.add_section(_("Select %s") % name) #If we cant find the currently selected item in the availiable list, #selects the first we can find. for name, uri in self.allSourceURIs: if self.selectedSourceURI == uri: break else: self.selectedSourceURI = self.allSourceURIs[0][1] config.add_item("%s" % name, "combo", choices = [(uri, name) for name, uri in self.allSourceURIs], initial_value = self.selectedSourceURI, config_name = "sourceURI" ) def get_UID(self): return self.selectedSourceURI class EvoContactTwoWay(EvoBase): DEFAULT_ADDRESSBOOK_URI = "default" _name_ = _("Evolution Contacts") _description_ = _("Synchronize your contacts") _category_ = conduit.dataproviders.CATEGORY_OFFICE _module_type_ = "twoway" _in_type_ = "contact" _out_type_ = "contact" _icon_ = "x-office-address-book" def __init__(self, *args): EvoBase.__init__(self, EvoContactTwoWay.DEFAULT_ADDRESSBOOK_URI) self.allSourceURIs = evolution.ebook.list_addressbooks() def _get_object(self, LUID): """ Retrieve a specific contact object from evolution """ obj = self.book.get_contact(LUID) contact = Contact.Contact() contact.set_from_vcard_string(obj.get_vcard_string()) contact.set_UID(obj.get_uid()) contact.set_mtime(datetime.datetime.fromtimestamp(obj.get_modified())) return contact def _create_object(self, contact): obj = evolution.ebook.EContact(vcard=contact.get_vcard_string()) if self.book.add_contact(obj): return self._get_object(obj.get_uid()).get_rid() else: raise Exceptions.SyncronizeError("Error creating contact") def _delete_object(self, uid): try: return self.book.remove_contact_by_id(uid) except: # sys.excepthook(*sys.exc_info()) return False def refresh(self): EvoBase.refresh(self) self.book = evolution.ebook.open_addressbook(self.selectedSourceURI) for i in self.book.get_all_contacts(): self.uids.append(i.get_uid()) def config_setup(self, window): EvoBase.config_setup(self, window, "Addressbook") class EvoCalendarTwoWay(EvoBase): DEFAULT_CALENDAR_URI = "default" _name_ = _("Evolution Calendar") _description_ = _("Synchronize your calendar") _category_ = conduit.dataproviders.CATEGORY_OFFICE _module_type_ = "twoway" _in_type_ = "event" _out_type_ = "event" _icon_ = "x-office-calendar" def __init__(self, *args): EvoBase.__init__(self, EvoCalendarTwoWay.DEFAULT_CALENDAR_URI) self.allSourceURIs = evolution.ecal.list_calendars() def _get_object(self, LUID): """ Get an event from Evolution. """ raw = self.calendar.get_object(LUID, "") event = Event.Event() #http://bugzilla.gnome.org/show_bug.cgi?id=564141 #EvoCalendar's _get_object returns an iCal VCALENDAR containing a single VEVENT #for each event on the calendar. However, EvoCalendar's _create_object expects #an iCal VEVENT. The evolution-data-server can't parse the VCALENDAR and fails. event.set_from_ical_string(raw.get_as_string()) event.set_UID(raw.get_uid()) event.set_mtime(datetime.datetime.fromtimestamp(raw.get_modified())) return event def _create_object(self, event): # work around.. (avoid duplicate UIDs) if "UID" in [x.name for x in list(event.iCal.lines())]: event.iCal.remove(event.iCal.uid) obj = evolution.ecal.ECalComponent(evolution.ecal.CAL_COMPONENT_EVENT, event.get_ical_string()) if self.calendar.add_object(obj): mtime = datetime.datetime.fromtimestamp(obj.get_modified()) return conduit.datatypes.Rid(uid=obj.get_uid(), mtime=mtime, hash=event.get_hash()) else: raise Exceptions.SyncronizeError("Error creating event") def _delete_object(self, uid): try: return self.calendar.remove_object(self.calendar.get_object(uid, "")) except: return False def refresh(self): EvoBase.refresh(self) self.calendar = evolution.ecal.open_calendar_source( self.selectedSourceURI, evolution.ecal.CAL_SOURCE_TYPE_EVENT ) for i in self.calendar.get_all_objects(): self.uids.append(i.get_uid()) def config_setup(self, window): EvoBase.config_setup(self, window, "Calendar") class EvoTasksTwoWay(EvoBase): DEFAULT_TASK_URI = "default" _name_ = _("Evolution Tasks") _description_ = _("Synchronize your tasks") _category_ = conduit.dataproviders.CATEGORY_OFFICE _module_type_ = "twoway" _in_type_ = "event" _out_type_ = "event" _icon_ = "evolution-tasks" def __init__(self, *args): EvoBase.__init__(self, EvoTasksTwoWay.DEFAULT_TASK_URI) self.allSourceURIs = evolution.ecal.list_task_sources() def _get_object(self, LUID): raw = self.tasks.get_object(LUID, "") task = Event.Event() task.set_from_ical_string(raw.get_as_string()) task.set_UID(raw.get_uid()) task.set_mtime(datetime.datetime.fromtimestamp(raw.get_modified())) return task def _create_object(self, event): # work around.. (avoid duplicate UIDs) if "UID" in [x.name for x in list(event.iCal.lines())]: event.iCal.remove(event.iCal.uid) obj = evolution.ecal.ECalComponent( evolution.ecal.CAL_COMPONENT_TODO, event.get_ical_string() ) if self.tasks.add_object(obj): mtime = datetime.datetime.fromtimestamp(obj.get_modified()) return conduit.datatypes.Rid(uid=obj.get_uid(), mtime=mtime, hash=mtime) else: raise Exceptions.SyncronizeError("Error creating event") def _delete_object(self, uid): try: return self.tasks.remove_object(self.tasks.get_object(uid, "")) except: return False def refresh(self): EvoBase.refresh(self) self.tasks = evolution.ecal.open_calendar_source( self.selectedSourceURI, evolution.ecal.CAL_SOURCE_TYPE_TODO ) for i in self.tasks.get_all_objects(): self.uids.append(i.get_uid()) def config_setup(self, window): EvoBase.config_setup(self, window, "Tasks") class EvoMemoTwoWay(EvoBase): DEFAULT_MEMO_URI = "" _name_ = _("Evolution Memos") _description_ = _("Synchronize your memos") _category_ = conduit.dataproviders.CATEGORY_OFFICE _module_type_ = "twoway" _in_type_ = "note" _out_type_ = "note" _icon_ = "evolution-memos" def __init__(self, *args): EvoBase.__init__(self, EvoMemoTwoWay.DEFAULT_MEMO_URI) self.allSourceURIs = evolution.ecal.list_memo_sources() def _get_object(self, LUID): """ Retrieve a specific contact object from evolution FIXME: In 0.5 this will replace get(...) """ obj = self.memos.get_object(LUID, "") mtime = datetime.datetime.fromtimestamp(obj.get_modified()) note = Note.Note( title=obj.get_summary(), mtime=mtime, contents=obj.get_description() ) if note.contents == None: note.contents = "" note.set_UID(obj.get_uid()) note.set_mtime(mtime) return note def _create_object(self, note): obj = evolution.ecal.ECalComponent(evolution.ecal.CAL_COMPONENT_JOURNAL) obj.set_summary(note.title) if note.contents != None: obj.set_description(note.contents) uid = self.memos.add_object(obj) if uid != None: mtime = datetime.datetime.fromtimestamp(obj.get_modified()) note = self._get_object(uid) return note.get_rid() else: raise Exceptions.SyncronizeError("Error creating memo") def _delete_object(self, uid): try: return self.memos.remove_object(self.memos.get_object(uid, "")) except: return False def refresh(self): EvoBase.refresh(self) self.memos = evolution.ecal.open_calendar_source( self.selectedSourceURI, evolution.ecal.CAL_SOURCE_TYPE_JOURNAL ) for i in self.memos.get_all_objects(): self.uids.append(i.get_uid()) def config_setup(self, window): EvoBase.config_setup(self, window, "Memos") conduit-0.3.17/conduit/modules/EvolutionModule/Makefile.in0000644000175000017500000003250111326116727020513 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/modules/EvolutionModule DIST_COMMON = $(conduit_handlers_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduit_handlersdir)" py_compile = $(top_srcdir)/py-compile DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ conduit_handlersdir = $(libdir)/conduit/modules/EvolutionModule conduit_handlers_PYTHON = EvolutionModule.py __init__.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/modules/EvolutionModule/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/modules/EvolutionModule/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduit_handlersPYTHON: $(conduit_handlers_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduit_handlersdir)" || $(MKDIR_P) "$(DESTDIR)$(conduit_handlersdir)" @list='$(conduit_handlers_PYTHON)'; dlist=; list2=; test -n "$(conduit_handlersdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduit_handlersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduit_handlersdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduit_handlersdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduit_handlersdir)" $$dlist; \ fi; \ else :; fi uninstall-conduit_handlersPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_handlers_PYTHON)'; test -n "$(conduit_handlersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$fileso tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(conduit_handlersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-conduit_handlersPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-conduit_handlersPYTHON .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-conduit_handlersPYTHON \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am \ uninstall-conduit_handlersPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/modules/EvolutionModule/__init__.py0000644000175000017500000000000011214122722020530 00000000000000conduit-0.3.17/conduit/modules/FileModule/0000777000175000017500000000000011326117102015410 500000000000000conduit-0.3.17/conduit/modules/FileModule/Makefile.am0000644000175000017500000000024611214122722017362 00000000000000conduit_handlersdir = $(libdir)/conduit/modules/FileModule conduit_handlers_PYTHON = FileModule.py FileConfiguration.py __init__.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/modules/FileModule/FileConfiguration.py0000644000175000017500000003035511321403566021322 00000000000000import gobject import gtk from gettext import gettext as _ import logging log = logging.getLogger("modules.File") import conduit import conduit.Vfs as Vfs import conduit.gtkui.Database as Database import conduit.dataproviders.File as FileDataProvider import conduit.Configurator as Configurator #Indexes of data in the list store OID_IDX = 0 URI_IDX = 1 #URI of the file/folder TYPE_IDX = 2 #TYPE_FILE/FOLDER/etc CONTAINS_NUM_ITEMS_IDX = 3 #(folder only) How many items in the folder SCAN_COMPLETE_IDX = 4 #(folder only) HAs the folder been recursively scanned GROUP_NAME_IDX = 5 #(folder only) The visible identifier for the folder class _FileSourceConfigurator(Vfs.FolderScannerThreadManager, Configurator.BaseConfigContainer): """ Configuration dialog for the FileTwoway dataprovider """ try: FILE_ICON = gtk.icon_theme_get_default().load_icon("text-x-generic", 16, 0) FOLDER_ICON = gtk.icon_theme_get_default().load_icon("folder", 16, 0) except: # FIXME: icon handling should be done better on Maemo pass def __init__(self, dataprovider, configurator, db): Vfs.FolderScannerThreadManager.__init__(self) Configurator.BaseConfigContainer.__init__(self, dataprovider, configurator) self.db = db self.tree_model = Database.GenericDBListStore("config", self.db) self._make_ui() #Now go an background scan some folders to populate the UI estimates. for oid,uri in self.db.select("SELECT oid,URI FROM config WHERE TYPE=? and SCAN_COMPLETE=?",(FileDataProvider.TYPE_FOLDER,False,)): self.make_thread( uri, False, #include hidden False, #follow symlinks self._on_scan_folder_progress, self._on_scan_folder_completed, oid ) def _dnd_data_get(self, wid, context, x, y, selection, targetType, time): for uri in selection.get_uris(): try: log.debug("Drag recieved %s" % uri) if Vfs.uri_is_folder(uri): self._add_folder(uri) else: self._add_file(uri) except Exception, err: log.debug("Error adding %s\n%s" % (uri,err)) def _make_ui(self): """ Creates the ui """ self.frame = gtk.Frame("Files and Folders to Synchronize") self.frame.props.shadow_type = gtk.SHADOW_NONE align = gtk.Alignment(0.5,0.5,1.0,1.0) align.props.left_padding = 12 self.frame.add(align) sw = gtk.ScrolledWindow() sw.props.hscrollbar_policy = gtk.POLICY_AUTOMATIC sw.props.vscrollbar_policy = gtk.POLICY_AUTOMATIC sw.props.shadow_type= gtk.SHADOW_IN #setup dnd onto the file list sw.drag_dest_set( gtk.DEST_DEFAULT_MOTION | gtk.DEST_DEFAULT_HIGHLIGHT | gtk.DEST_DEFAULT_DROP, [ ( "text/uri-list", 0, 0 ) ], gtk.gdk.ACTION_COPY ) sw.connect("drag_data_received", self._dnd_data_get) af = gtk.Button("_Add File") af.set_image(gtk.image_new_from_stock(gtk.STOCK_ADD, gtk.ICON_SIZE_BUTTON)) af.connect("clicked", self.on_addfile_clicked) ad = gtk.Button("Add _Directory") ad.set_image(gtk.image_new_from_stock(gtk.STOCK_ADD, gtk.ICON_SIZE_BUTTON)) ad.connect("clicked", self.on_adddir_clicked) r = gtk.Button(stock=gtk.STOCK_REMOVE) r.connect("clicked", self.on_remove_clicked) hbb = gtk.HButtonBox() hbb.props.layout_style = gtk.BUTTONBOX_SPREAD hbb.props.spacing = 3 hbb.add(af) hbb.add(ad) hbb.add(r) vb = gtk.VBox() vb.pack_start(sw, expand=True, fill=True) vb.pack_end(hbb, expand=False, fill=True, padding=5) align.add(vb) self.view = gtk.TreeView(self.tree_model) sw.add(self.view) #First column is an icon (folder of File) iconRenderer = gtk.CellRendererPixbuf() column1 = gtk.TreeViewColumn(_("Icon"), iconRenderer) column1.set_cell_data_func(iconRenderer, self._item_icon_data_func) self.view.append_column(column1) #Second column is the File/Folder name nameRenderer = gtk.CellRendererText() nameRenderer.connect('edited', self._item_name_edited_callback) column2 = gtk.TreeViewColumn(_("Name"), nameRenderer) column2.set_property("expand", True) column2.set_cell_data_func(nameRenderer, self._item_name_data_func) self.view.append_column(column2) #Third column is the number of contained items containsNumRenderer = gtk.CellRendererText() column3 = gtk.TreeViewColumn(_("Items"), containsNumRenderer) column3.set_cell_data_func(containsNumRenderer, self._item_contains_num_data_func) self.view.append_column(column3) def _item_icon_data_func(self, column, cell_renderer, tree_model, rowref): """ Draw the appropriate icon depending if the URI is a folder or a file. We only show single files in the GUI anyway """ path = self.tree_model.get_path(rowref) if self.tree_model[path][TYPE_IDX] == FileDataProvider.TYPE_FILE: icon = _FileSourceConfigurator.FILE_ICON else: icon = _FileSourceConfigurator.FOLDER_ICON cell_renderer.set_property("pixbuf",icon) def _item_contains_num_data_func(self, column, cell_renderer, tree_model, rowref): """ Displays the number of files contained within a folder or an empty string if the tree_model item is a File """ path = self.tree_model.get_path(rowref) if self.tree_model[path][TYPE_IDX] == FileDataProvider.TYPE_FILE: contains = "" else: contains = _("Contains %s files") % self.tree_model[path][CONTAINS_NUM_ITEMS_IDX] cell_renderer.set_property("markup",contains) def _item_name_data_func(self, column, cell_renderer, tree_model, rowref): """ If the user has set a descriptive name for the folder the display that, otherwise display the filename. """ path = self.tree_model.get_path(rowref) uri = self.tree_model[path][URI_IDX] if self.tree_model[path][GROUP_NAME_IDX] != "": displayName = self.tree_model[path][GROUP_NAME_IDX] else: displayName = Vfs.uri_format_for_display(uri) cell_renderer.set_property("text", displayName) cell_renderer.set_property("ellipsize", True) #Can not edit the group name of a file if self.tree_model[path][TYPE_IDX] == FileDataProvider.TYPE_FILE: cell_renderer.set_property("editable", False) else: cell_renderer.set_property("editable", True) def _item_name_edited_callback(self, cellrenderertext, path, new_text): """ Called when the user edits the descriptive name of the folder """ self.db.update( table="config", oid=self.tree_model[path][OID_IDX], GROUP_NAME=new_text ) def _on_scan_folder_progress(self, folderScanner, numItems, oid): """ Called by the folder scanner thread and used to update the estimate of the number of items in the directory """ self.db.update( table="config", oid=oid, CONTAINS_NUM_ITEMS=numItems ) def _on_scan_folder_completed(self, folderScanner, oid): """ Called when the folder scanner thread completes """ log.debug("Folder scan complete") self.db.update( table="config", oid=oid, SCAN_COMPLETE=True ) def _add_folder(self, folderURI): """ Adds the folder to the db. Starts a thread to scan it in the background """ if folderURI not in self.scanThreads: name = Vfs.uri_get_filename(folderURI) oid = self.db.insert( table="config", values=(folderURI,FileDataProvider.TYPE_FOLDER,0,False,name) ) self.make_thread( folderURI, False, #include hidden False, #follow symlinks self._on_scan_folder_progress, self._on_scan_folder_completed, oid ) def _add_file(self, uri): self.db.insert( table="config", values=(uri,FileDataProvider.TYPE_FILE,0,False,"") ) def show_dialog(self): #response = self.dlg.run() #We can actually go ahead and cancel all the threads. The items count #is only used as GUI bling and is recalculated in refresh() anyway #self.cancel_all_threads() #self.dlg.destroy() #return response pass def get_config_widget(self): return self.frame def hide(self): self.cancel_all_threads() def on_addfile_clicked(self, *args): dialog = gtk.FileChooserDialog( _("Include file..."), None, gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK) ) dialog.set_default_response(gtk.RESPONSE_OK) dialog.set_local_only(False) fileFilter = gtk.FileFilter() fileFilter.set_name(_("All files")) fileFilter.add_pattern("*") dialog.add_filter(fileFilter) response = dialog.run() if response == gtk.RESPONSE_OK: fileURI = dialog.get_uri() self._add_file(fileURI) elif response == gtk.RESPONSE_CANCEL: pass dialog.destroy() def on_adddir_clicked(self, *args): dialog = gtk.FileChooserDialog( _("Include folder..."), None, gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK) ) dialog.set_default_response(gtk.RESPONSE_OK) dialog.set_local_only(False) response = dialog.run() if response == gtk.RESPONSE_OK: folderURI = dialog.get_uri() self._add_folder(folderURI) elif response == gtk.RESPONSE_CANCEL: pass dialog.destroy() def on_remove_clicked(self, *args): (store, rowref) = self.view.get_selection().get_selected() if rowref != None: path = self.tree_model.get_path(rowref) self.db.delete( table="config", oid=self.tree_model[path][OID_IDX] ) def on_response(self, dialog, response_id): """ Called when the user clicks OK. """ if response_id == gtk.RESPONSE_OK: #check the user has specified a named group for all folders count, = self.db.select_one("SELECT COUNT(oid) FROM config WHERE TYPE=? and GROUP_NAME=?", (FileDataProvider.TYPE_FOLDER,"")) if count > 0: #stop this dialog from closing, and show a warning to the #user indicating that all folders must be named warning = gtk.MessageDialog( parent=dialog, flags=gtk.DIALOG_MODAL, type=gtk.MESSAGE_WARNING, buttons=gtk.BUTTONS_OK, message_format=_("Please Name All Folders")) warning.format_secondary_text(_("All folders require a descriptive name. To name a folder simply click on it")) warning.run() warning.destroy() dialog.emit_stop_by_name("response") conduit-0.3.17/conduit/modules/FileModule/Makefile.in0000644000175000017500000003247511326116727017420 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/modules/FileModule DIST_COMMON = $(conduit_handlers_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduit_handlersdir)" py_compile = $(top_srcdir)/py-compile DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ conduit_handlersdir = $(libdir)/conduit/modules/FileModule conduit_handlers_PYTHON = FileModule.py FileConfiguration.py __init__.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/modules/FileModule/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/modules/FileModule/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduit_handlersPYTHON: $(conduit_handlers_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduit_handlersdir)" || $(MKDIR_P) "$(DESTDIR)$(conduit_handlersdir)" @list='$(conduit_handlers_PYTHON)'; dlist=; list2=; test -n "$(conduit_handlersdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduit_handlersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduit_handlersdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduit_handlersdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduit_handlersdir)" $$dlist; \ fi; \ else :; fi uninstall-conduit_handlersPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_handlers_PYTHON)'; test -n "$(conduit_handlersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$fileso tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(conduit_handlersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-conduit_handlersPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-conduit_handlersPYTHON .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-conduit_handlersPYTHON \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am \ uninstall-conduit_handlersPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/modules/FileModule/FileModule.py0000644000175000017500000002247211321403566017741 00000000000000import os.path from gettext import gettext as _ import logging log = logging.getLogger("modules.File") import conduit import conduit.dataproviders.DataProvider as DataProvider import conduit.dataproviders.DataProviderCategory as DataProviderCategory import conduit.dataproviders.File as FileDataProvider import conduit.dataproviders.SimpleFactory as SimpleFactory import conduit.dataproviders.AutoSync as AutoSync import conduit.utils as Utils import conduit.Vfs as Vfs MODULES = { "FileSource" : { "type": "dataprovider" }, "FolderTwoWay" : { "type": "dataprovider" }, "RemovableDeviceFactory" : { "type": "dataprovider-factory" } } class FileSource(FileDataProvider.FileSource): _name_ = _("Files") _description_ = _("Source for synchronizing multiple files") _configurable_ = True def __init__(self, *args): FileDataProvider.FileSource.__init__(self) self.file_configurator = None self.files = None self.folders = None self.update_configuration( files_and_folders = ({'files':[], 'folders':[]}, self._set_files_folders, self._get_files_folders) ) def _set_files_folders(self, value): for f in value['files']: self._add_file(f) for folder in value['folders']: folder, group = folder self._add_folder(folder, group) def get_config_container(self, configContainerKlass, name, icon, configurator): if not self.file_configurator: Utils.dataprovider_add_dir_to_path(__file__, "") import FileConfiguration self.file_configurator = FileConfiguration._FileSourceConfigurator(self, configurator, self.db) self.file_configurator.name = name self.file_configurator.icon = icon self.file_configurator.connect('apply', self.config_apply) self.file_configurator.connect('cancel', self.config_cancel) self.file_configurator.connect('show', self.config_show) self.file_configurator.connect('hide', self.config_hide) return self.file_configurator def _get_files_folders(self): files = [] folders = [] for uri,ftype,group in self.db.select("SELECT URI,TYPE,GROUP_NAME FROM config"): if ftype == FileDataProvider.TYPE_FILE: files.append(uri) else: folders.append((uri,group)) return {'files': files, 'folders':folders} def get_files(self): self._get_files_folders(get_files = True) def get_folders(self): self._get_files_folders(get_folders = True) def get_UID(self): return Utils.get_user_string() class FolderTwoWay(FileDataProvider.FolderTwoWay, AutoSync.AutoSync): """ TwoWay dataprovider for synchronizing a folder """ _name_ = _("Folder") _description_ = _("Synchronize folders") _configurable_ = True DEFAULT_FOLDER = "file://"+os.path.expanduser("~") DEFAULT_GROUP = "Home" DEFAULT_HIDDEN = False DEFAULT_COMPARE_IGNORE_MTIME = False DEFAULT_FOLLOW_SYMLINKS = False def __init__(self, *args): FileDataProvider.FolderTwoWay.__init__(self, self.DEFAULT_FOLDER, self.DEFAULT_GROUP, self.DEFAULT_HIDDEN, self.DEFAULT_COMPARE_IGNORE_MTIME, self.DEFAULT_FOLLOW_SYMLINKS ) self.update_configuration( folder = self.DEFAULT_FOLDER, includeHidden = self.DEFAULT_HIDDEN, compareIgnoreMtime = self.DEFAULT_COMPARE_IGNORE_MTIME, followSymlinks = self.DEFAULT_FOLLOW_SYMLINKS, ) AutoSync.AutoSync.__init__(self) self._monitor = Vfs.FileMonitor() self._monitor.connect("changed", self._monitor_folder_cb) self.update_configuration( folder = (self.DEFAULT_FOLDER, self._set_folder, lambda: self.folder), includeHidden = self.DEFAULT_HIDDEN, compareIgnoreMtime = self.DEFAULT_COMPARE_IGNORE_MTIME, followSymlinks = self.DEFAULT_FOLLOW_SYMLINKS ) def __del__(self): self._monitor.cancel() def _set_folder(self, f): log.debug("Setting folder: %s" % f) self.folder = f self._monitor.add(f, self._monitor.MONITOR_DIRECTORY) def config_setup(self, config): config.add_item("Select folder", "filebutton", order = 1, config_name = "folder", directory = True, ) config.add_section("Advanced") config.add_item("Include hidden files", "check", config_name = "includeHidden") config.add_item("Ignore file modification times", 'check', config_name = "compareIgnoreMtime") config.add_item("Follow symbolic links", 'check', config_name = "followSymlinks") def get_UID(self): return self.folder def get_name(self): return Vfs.uri_get_filename(self.folder) def _monitor_folder_cb(self, sender, event_uri, event): """ Called when a file in the current folder is changed, added or deleted """ # supported events = CHANGED, DELETED, CREATED if event == self._monitor.MONITOR_EVENT_CREATED: self.handle_added(event_uri) elif event == self._monitor.MONITOR_EVENT_CHANGED: self.handle_modified(event_uri) elif event == self._monitor.MONITOR_EVENT_DELETED: self.handle_deleted(event_uri) class RemovableDeviceFactory(SimpleFactory.SimpleFactory): def __init__(self, **kwargs): SimpleFactory.SimpleFactory.__init__(self, **kwargs) self._volumes = {} self._categories = {} self._vm = Vfs.VolumeMonitor() self._vm.connect("volume-mounted",self._volume_mounted_cb) self._vm.connect("volume-unmounted",self._volume_unmounted_cb) def _volume_mounted_cb(self, monitor, device_udi, mount, label): log.info("Volume mounted, %s : (%s : %s)" % (device_udi,mount,label)) if device_udi: self._check_preconfigured(device_udi, mount, label) self.item_added(device_udi, mount=mount, label=label) def _volume_unmounted_cb(self, monitor, device_udi): log.info("Volume unmounted, %s" % device_udi) if device_udi and device_udi in self._volumes: self.item_removed(device_udi) def _make_class(self, udi, folder, name): log.info("Creating preconfigured folder dataprovider: %s" % folder) info = { "DEFAULT_FOLDER": folder, "_udi_" : udi } if name: info["_name_"] = name klass = type( "FolderTwoWay", (FolderTwoWay,), info) return klass def _check_preconfigured(self, udi, mountUri, label): #check for the presence of a mount/.conduit group file #which describe the folder sync groups, and their names, try: groups = FileDataProvider.read_removable_volume_group_file(mountUri) except Exception, e: log.warn("Error reading volume group file: %s" % e) groups = () if len(groups) > 0: self._volumes[udi] = [] for relativeUri,name in groups: klass = self._make_class( udi=udi, #uri is relative, make it absolute folder="%s%s" % (mountUri,relativeUri), name=name) self._volumes[udi].append(klass) else: klass = self._make_class( udi=udi, folder=mountUri, name=None) self._volumes[udi] = [klass] def probe(self): """ Called after initialised to detect already connected volumes """ volumes = self._vm.get_mounted_volumes() for device_udi in volumes: if device_udi: mount,label = volumes[device_udi] self._check_preconfigured(device_udi, mount, label) self.item_added(device_udi, mount=mount, label=label) if device_udi: mount,label = volumes[device_udi] self.item_added(device_udi, mount=mount, label=label) def emit_added(self, klass, initargs, category): """ Override emit_added to allow duplictes. The custom key is based on the folder and the udi to allow multiple preconfigured groups per usb key """ return SimpleFactory.SimpleFactory.emit_added(self, klass, initargs, category, customKey="%s-%s" % (klass.DEFAULT_FOLDER, klass._udi_) ) def get_category(self, udi, **kwargs): if not self._categories.has_key(udi): self._categories[udi] = DataProviderCategory.DataProviderCategory( kwargs['label'], "drive-removable-media", udi) return self._categories[udi] def get_dataproviders(self, udi, **kwargs): return self._volumes.get(udi,()) def get_args(self, udi, **kwargs): return () conduit-0.3.17/conduit/modules/FileModule/__init__.py0000644000175000017500000000000011214122722017423 00000000000000conduit-0.3.17/conduit/modules/Makefile.in0000644000175000017500000005146111326116727015367 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/modules DIST_COMMON = $(conduit_handlers_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduit_handlersdir)" py_compile = $(top_srcdir)/py-compile RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = \ BackpackModule \ BansheeModule \ BoxDotNetModule \ FacebookModule \ FileModule \ FeedModule \ FlickrModule \ FspotModule \ iPodModule \ SmugMugModule \ EvolutionModule \ GoogleModule \ ShutterflyModule \ RhythmboxModule \ N800Module \ NetworkModule \ GConfModule \ ZotoModule \ Firefox3Module conduit_handlersdir = $(libdir)/conduit/modules conduit_handlers_PYTHON = \ __init__.py \ TomboyModule.py \ ConverterModule.py \ PhotoConverterModule.py \ AudioVideoConverterModule.py \ GoogleBookmarksModule.py \ NautilusBookmarksModule.py \ DesktopWallpaperModule.py all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/modules/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/modules/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduit_handlersPYTHON: $(conduit_handlers_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduit_handlersdir)" || $(MKDIR_P) "$(DESTDIR)$(conduit_handlersdir)" @list='$(conduit_handlers_PYTHON)'; dlist=; list2=; test -n "$(conduit_handlersdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduit_handlersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduit_handlersdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduit_handlersdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduit_handlersdir)" $$dlist; \ fi; \ else :; fi uninstall-conduit_handlersPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_handlers_PYTHON)'; test -n "$(conduit_handlersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$fileso # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(conduit_handlersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-conduit_handlersPYTHON install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-conduit_handlersPYTHON .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-local \ ctags ctags-recursive distclean distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-conduit_handlersPYTHON install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-conduit_handlersPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/modules/ConverterModule.py0000644000175000017500000003314511321403566017003 00000000000000import sys, re import logging log = logging.getLogger("modules.Converter") import conduit.utils as Utils import conduit.TypeConverter as TypeConverter import conduit.datatypes.Contact as Contact import conduit.datatypes.Event as Event import conduit.datatypes.Text as Text import conduit.datatypes.Email as Email import conduit.datatypes.File as File import conduit.datatypes.Note as Note import conduit.datatypes.Setting as Setting import conduit.datatypes.Bookmark as Bookmark from gettext import gettext as _ from xml.dom.minidom import parseString MODULES = { "EmailConverter" : { "type": "converter" }, "NoteConverter" : { "type": "converter" }, "ContactConverter" : { "type": "converter" }, "EventConverter" : { "type": "converter" }, "FileConverter" : { "type": "converter" }, "SettingConverter" : { "type": "converter" }, "BookmarkConverter" : { "type": "converter" }, } class EmailConverter(TypeConverter.Converter): def __init__(self): self.conversions = { "email,text" : self.email_to_text, "text,email" : self.text_to_email, "email,file" : self.email_to_file, "file,email" : self.file_to_email, } def email_to_text(self, email, **kwargs): t = Text.Text( text=email.get_email_string() ) return t def text_to_email(self, text, **kwargs): email = Email.Email( content=text.get_string() ) return email def email_to_file(self, email, **kwargs): f = File.TempFile(email.get_email_string()) return f def file_to_email(self, thefile, **kwargs): """ If the file is non binary then include it as the Subject of the message. Otherwise include it as an attachment """ mimeCategory = thefile.get_mimetype().split('/')[0] if mimeCategory == "text": #insert the contents into the email log.debug("Inserting file contents into email") email = Email.Email( subject=thefile.get_filename(), content=thefile.get_contents_as_text() ) else: #binary file so send as attachment log.debug("Binary file, attaching to email") email = Email.Email( subject=thefile.get_filename(), content="Attached" ) email.add_attachment(thefile.get_local_uri()) return email class NoteConverter(TypeConverter.Converter): def __init__(self): self.conversions = { "text,note" : self.text_to_note, "note,text" : self.note_to_text, "note,file" : self.note_to_file } def text_to_note(self, text, **kwargs): n = Note.Note( title=_("Note-")+Utils.random_string(), contents=text ) return n def note_to_text(self, note, **kwargs): t = Text.Text( text=note.get_note_string() ) return t def note_to_file(self, note, **kwargs): f = File.TempFile(note.get_contents()) f.force_new_filename(note.get_title()) f.force_new_file_extension(".txt") return f class ContactConverter(TypeConverter.Converter): def __init__(self): self.conversions = { "contact,file" : self.contact_to_file, "contact,text" : self.contact_to_text, "file,contact" : self.file_to_contact, "text,contact" : self.text_to_contact, } def contact_to_file(self, contact, **kwargs): #get vcard data f = Utils.new_tempfile(contact.get_vcard_string()) return f def contact_to_text(self, contact, **kwargs): #get vcard data t = Text.Text( text=contact.get_vcard_string() ) return t def file_to_contact(self, f, **kwargs): c = None if f.get_mimetype().split('/')[0] == "text": try: c = Contact.Contact() c.set_from_vcard_string(f.get_contents_as_text()) except: c = None log.warn("Error converting file to contact") return c def text_to_contact(self, text, **kwargs): c = None try: c = Contact.Contact() c.set_from_vcard_string(text.get_string()) except: c = None log.warn("Error converting text to contact") return c class EventConverter(TypeConverter.Converter): def __init__(self): self.conversions = { "event,file" : self.event_to_file, "event,text" : self.event_to_text, "file,event" : self.file_to_event, "text,event" : self.text_to_event, } def event_to_file(self, event, **kwargs): #get ical data f = Utils.new_tempfile(event.get_ical_string()) return f def event_to_text(self, event, **kwargs): t = Text.Text( text=event.get_ical_string() ) return t def file_to_event(self, f, **kwargs): e = None if f.get_mimetype().split('/')[0] == "text": try: e = Event.Event() e.set_from_ical_string(f.get_contents_as_text()) except: e = None log.warn("Error converting file to event") return e def text_to_event(self, text, **kwargs): e = None try: e = Event.Event() e.set_from_ical_string(text.get_string()) except: e = None log.warn("Error converting text to event") return e class FileConverter(TypeConverter.Converter): def __init__(self): self.conversions = { "text,file" : self.text_to_file, "file,text" : self.file_to_text, "file,note" : self.file_to_note } def text_to_file(self, text, **kwargs): return Utils.new_tempfile(text.get_string()) def file_to_text(self, f, **kwargs): test = None if f.get_mimetype().startswith("text"): text = Text.Text( text=f.get_contents_as_text() ) return text def file_to_note(self, f, **kwargs): note = None if f.get_mimetype().startswith("text"): title,ext = f.get_filename_and_extension() #remove the file extension.... note = Note.Note( title=title, contents=f.get_contents_as_text() ) return note class SettingConverter(TypeConverter.Converter): def __init__(self): self.conversions = { "setting,text" : self.setting_to_text, "setting,file" : self.setting_to_file, "text,setting" : self.text_to_setting, "file,setting" : self.file_to_setting } #recognizes key value in text strings self.regex = re.compile(r"^key:(.+)\nvalue:(.*)$") def _to_text(self, setting): return "key:%s\nvalue:%s" % (setting.key, setting.value) def _to_key_value(self, txt): m = self.regex.match(txt) if m != None and len(m.groups()) == 2: return m.group(1),m.group(2) else: return None,None def setting_to_text(self, setting): t = Text.Text( text=self._to_text(setting) ) return t def text_to_setting(self, text): setting = None k,v = self._to_key_value(text.get_string()) if k != None and v != None: setting = Setting.Setting( key=k, value=v ) return setting def setting_to_file(self, setting): f = File.TempFile(self._to_text(setting)) f.force_new_filename(setting.key.replace("/","_")) f.force_new_file_extension(".txt") return f def file_to_setting(self, f): setting = None if f.get_mimetype().startswith("text"): txt = f.get_contents_as_text() k,v = self._to_key_value(txt) if k != None and v != None: setting = Setting.Setting( key=k, value=v ) return setting class BookmarkConverter(TypeConverter.Converter): def __init__(self): self.conversions = { "bookmark,text" : self.bookmark_to_text, "bookmark,file" : self.bookmark_to_file, "text,bookmark" : self.text_to_bookmark, "file,bookmark" : self.file_to_bookmark } #recognizes key value in text strings self.regex = re.compile(r"^title:(.+)\nuri:(.*)$") def _to_text(self, bookmark): return "title:%s\nuri:%s" % (bookmark.title, bookmark.uri) def _to_key_value(self, txt): m = self.regex.match(txt) if m != None and len(m.groups()) == 2: return m.group(1),m.group(2) else: return None,None def bookmark_to_text(self, bookmark): t = Text.Text( text=self._to_text(bookmark) ) return t def text_to_bookmark(self, text): bookmark = None k,v = self._to_key_value(text.get_string()) if k != None and v != None: bookmark = Bookmark.Bookmark( title=k, uri=v ) return bookmark def get_bookmark_filename(self, bookmark): # Return name without invalid characters title = bookmark.get_title() mapdict = { "/":"-", "%":"" } for (old,new) in mapdict.iteritems(): title = title.replace(old,new) return title def bookmark_to_file(self, bookmark): # Pick right format for OS if bookmark.get_title() == None and bookmark.get_uri() == None: return elif sys.platform == 'darwin': return self.bookmark_to_webloc(bookmark) else: return self.bookmark_to_desktop(bookmark) def file_to_bookmark(self, f): # Pick right converter if f.get_mimetype().startswith("text"): (name,extension) = f.get_filename_and_extension() if extension == 'desktop': return self.desktop_to_bookmark(f) elif extension == 'webloc': return self.webloc_to_bookmark(f) def bookmark_to_desktop(self, bookmark): # Creates .desktop file desktop = "[Desktop Entry]\n" desktop += "Version=1.0\n" desktop += "Encoding=UTF-8\n" desktop += "Name=%s\n" % bookmark.get_title() desktop += "Type=Link\n" desktop += "URL=%s\n" % bookmark.get_uri() desktop += "Icon=gnome-fs-bookmark\n" f = File.TempFile(desktop) f.force_new_filename(self.get_bookmark_filename(bookmark) + ".desktop") return f def desktop_to_bookmark(self, f): # Parses .desktop files... badly txt = f.get_contents_as_text() title = None uri = None for line in txt.split("\n"): if line.startswith( "Name" ): title = line.split( "=" )[1] elif line.startswith( "URL" ): uri = line.split( "=" )[1] if uri != None and title != None: return Bookmark.Bookmark( title, uri ) def bookmark_to_webloc(self,bookmark): # Create .webloc as used by FireFox on Mac OSX webloc = '\n' webloc += '\n' webloc += '\n' webloc += '\n' webloc += ' URL\n' webloc += ' %s\n' % bookmark.get_uri() webloc += '\n' webloc += '\n' f = File.TempFile(webloc) f.force_new_filename(self.get_bookmark_filename(bookmark) + '.webloc') return f def webloc_to_bookmark(self,f): # Parse .webloc files (easy) title = f.get_filename_and_extension()[0] uri = parseString(f.get_contents_as_text()).getElementsByTagName("string")[0] if uri != None and title != None: return Bookmark.Bookmark(title,uri) conduit-0.3.17/conduit/modules/BansheeModule/0000777000175000017500000000000011326117102016076 500000000000000conduit-0.3.17/conduit/modules/BansheeModule/BansheeModule.py0000644000175000017500000001724511321403566021117 00000000000000# Banshee-1 support added by Andrew Stormont # I've tried to keep compatability for Banshee < 1, it should work fine. # Saved playlists should also be remebered, this all needs testing though. # FIXME: This doesn't handle folders and never did, should it? import os import gobject import logging log = logging.getLogger("modules.Banshee") try: #python 2.4 from pysqlite2 import dbapi2 as sqlite except ImportError: #python 2.5 from sqlite3 import dbapi2 as sqlite import conduit import conduit.utils as Utils import conduit.Exceptions as Exceptions import conduit.dataproviders.DataProvider as DataProvider import conduit.datatypes.Audio as Audio from gettext import gettext as _ BANSHEE_INSTALLED = False BANSHEE_VERSION_1 = False BANSHEE_BASE_LOCATION = "" if Utils.program_installed("banshee-1"): BANSHEE_INSTALLED = True BANSHEE_VERSION_1 = True import gconf BANSHEE_BASE_LOCATION = "file://%s/" % gconf.Client().get_string( "/apps/banshee-1/library/base_location" ) elif Utils.program_installed("banshee"): BANSHEE_INSTALLED = True if BANSHEE_INSTALLED: MODULES = { "BansheeSource" : { "type": "dataprovider" } } else: MODULES = {} (ID_IDX, NAME_IDX, CHECKED_IDX, TYPE_IDX) = range( 4 ) (SMART_PLAYLIST, NORMAL_PLAYLIST, VIDEO_PLAYLIST) = range( 1, 4 ) # FIXME should these be hard coded? class BansheeSource(DataProvider.DataSource): _name_ = _("Banshee Playlists") _description_ = _("Synchronize your Banshee playlists") _category_ = conduit.dataproviders.CATEGORY_MEDIA _module_type_ = "source" _in_type_ = "file/audio" _out_type_ = "file/audio" _icon_ = "media-player-banshee" _configurable_ = True if BANSHEE_VERSION_1: MUSIC_DB = os.path.join(os.path.expanduser("~"),".config", "banshee-1", "banshee.db") else: MUSIC_DB = os.path.join(os.path.expanduser("~"),".config", "banshee", "banshee.db") def __init__(self, *args): DataProvider.DataSource.__init__(self) #Names of the playlists we know self.allPlaylists = [] self.update_configuration( #Playlist Ids we wish to sync playlists = [], smart_playlists = [], video_playlists = [], ) self.tracks = [] def _get_full_uri(self, uri): if not uri.startswith("file://"): return BANSHEE_BASE_LOCATION + uri def _get_all_playlists(self): allPlaylists = [] log.debug("Banshee db %s" % self.MUSIC_DB) if os.path.exists(BansheeSource.MUSIC_DB): #Create a connection to the database con = sqlite.connect(BansheeSource.MUSIC_DB) cur = con.cursor() #Get a list of all playlists for the config dialog #If we don't convert all the id's to strings Settings.py will spazz if BANSHEE_VERSION_1: cur.execute("SELECT PlaylistID, Name FROM CorePlaylists where PrimarySourceID NOT NULL") # NULL = "Play Queue" for playlistid, playlistname in cur: allPlaylists.append( { "id" : str( playlistid ), "name" : playlistname, "type" : NORMAL_PLAYLIST } ) cur.execute("SELECT SmartPlaylistID, Name FROM CoreSmartPlaylists where PrimarySourceID=%s" % SMART_PLAYLIST) for playlistid, playlistname in cur: allPlaylists.append( { "id" : str( playlistid ), "name" : playlistname, "type" : SMART_PLAYLIST } ) cur.execute("SELECT SmartPlaylistID, Name FROM CoreSmartPlaylists where PrimarySourceID=%s" % VIDEO_PLAYLIST) for playlistid, playlistname in cur: allPlaylists.append( { "id" : str( playlistid ), "name" : playlistname, "type" : VIDEO_PLAYLIST } ) else: cur.execute("SELECT PlaylistID, Name FROM Playlists") for playlistid, playlistname in cur: allPlaylists.append( { "id" : str( playlistid ), "name" : playlistname, "type" : NORMAL_PLAYLIST } ) con.close() return allPlaylists def initialize(self): return True def is_configured(self, isSource, isTwoWay): return len(self.playlists) > 0 or len(self.smart_playlists) > 0 or len(self.video_playlists) > 0 def refresh(self): DataProvider.DataSource.refresh(self) #only work if Banshee is installed if not os.path.exists(BansheeSource.MUSIC_DB): raise Exceptions.RefreshError("Banshee is not installed") #Stupid pysqlite thread stuff. #Connection must be made in the same thread #as any execute statements con = sqlite.connect(BansheeSource.MUSIC_DB) cur = con.cursor() for playlistid in self.playlists: if BANSHEE_VERSION_1: cur.execute("select Uri from CoreTracks INNER JOIN CorePlaylistEntries ON CorePlaylistEntries.TrackID=CoreTracks.TrackID where PlaylistID=%s" % (playlistid)) else: cur.execute("select Uri from Tracks INNER JOIN PlaylistEntries ON PlaylistEntries.TrackID=Tracks.TrackID where PlaylistID=%s" % (playlistid)) for Uri in cur: self.tracks.append( self._get_full_uri( Uri[0] ) ) for playlistid in self.smart_playlists + self.video_playlists: cur.execute("select Uri from CoreTracks INNER JOIN CoreSmartPlaylistEntries ON CoreSmartPlaylistEntries.TrackID where PlaylistID=%s" % (playlistid)) for Uri in cur: self.tracks.append( self._get_full_uri( Uri[0] ) ) con.close() def get_all(self): DataProvider.DataSource.get_all(self) return self.tracks def get(self, LUID): f = Audio.Audio(URI=LUID) f.set_UID(LUID) f.set_open_URI(LUID) return f def _get_config_playlists(self, config_item): playlists = [] for playlist in self.playlists: playlists.append((playlist, NORMAL_PLAYLIST)) for playlist in self.smart_playlists: playlists.append((playlist, SMART_PLAYLIST)) for playlist in self.video_playlists: playlists.append((playlist, VIDEO_PLAYLIST)) return playlists def _set_config_playlists(self, config_item, value): self.playlists = [] self.smart_playlists = [] self.video_playlists = [] for playlist_id, playlist_type in value: {NORMAL_PLAYLIST: self.playlists, SMART_PLAYLIST: self.smart_playlists, VIDEO_PLAYLIST: self.video_playlists}[playlist_type].append(playlist_id) def config_setup(self, config): config.add_section(_("Playlists")) self._playlist_config = config.add_item(_("Playlists"), "list", initial_value_callback = self._get_config_playlists, save_callback = self._set_config_playlists ) def config_show(self, config): self._all_playlists = self._get_all_playlists() playlists = [] for playlist in self._all_playlists: name = playlist['name'] if playlist['type'] == VIDEO_PLAYLIST: name += " (Video)" playlists.append(((playlist['id'], playlist['type']), name)) self._playlist_config.choices = playlists def get_UID(self): return Utils.get_user_string() conduit-0.3.17/conduit/modules/BansheeModule/Makefile.am0000644000175000017500000000021411172176633020060 00000000000000conduit_handlersdir = $(libdir)/conduit/modules/BansheeModule conduit_handlers_PYTHON = BansheeModule.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/modules/BansheeModule/Makefile.in0000644000175000017500000003245311326116726020101 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/modules/BansheeModule DIST_COMMON = $(conduit_handlers_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduit_handlersdir)" py_compile = $(top_srcdir)/py-compile DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ conduit_handlersdir = $(libdir)/conduit/modules/BansheeModule conduit_handlers_PYTHON = BansheeModule.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/modules/BansheeModule/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/modules/BansheeModule/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduit_handlersPYTHON: $(conduit_handlers_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduit_handlersdir)" || $(MKDIR_P) "$(DESTDIR)$(conduit_handlersdir)" @list='$(conduit_handlers_PYTHON)'; dlist=; list2=; test -n "$(conduit_handlersdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduit_handlersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduit_handlersdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduit_handlersdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduit_handlersdir)" $$dlist; \ fi; \ else :; fi uninstall-conduit_handlersPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_handlers_PYTHON)'; test -n "$(conduit_handlersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduit_handlersdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduit_handlersdir)" && rm -f $$fileso tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(conduit_handlersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-conduit_handlersPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-conduit_handlersPYTHON .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-conduit_handlersPYTHON \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am \ uninstall-conduit_handlersPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/modules/__init__.py0000644000175000017500000000052711172176633015431 00000000000000""" Exposes the DataTypes for public use It is expected that DataProviders (written by the user, or included within Conduit) may require the use of DataTypes other than their own in their implementation. For example all email programs should share the same common mail datatype. For this reason DataTypes, not DataProviders are exported """ conduit-0.3.17/conduit/Knowledge.py0000644000175000017500000000276311321403566014137 00000000000000def N_(message): return message HINT_BLANK_CANVAS = -100 HINT_ADD_DATAPROVIDER = -101 HINT_RIGHT_CLICK_CONFIGURE = -102 HINT_TEXT = { HINT_BLANK_CANVAS:( N_("What Do You Want to Synchronize?"), N_("Drag and Drop a Data Provider on the Canvas"), True), HINT_ADD_DATAPROVIDER:( N_("Synchronization Group Created"), N_("Add Another Data Provider to the Group to Synchronize it"), False), HINT_RIGHT_CLICK_CONFIGURE:( N_("You Are Now Ready to Synchronize"), N_("Right Click on Group for Options"), False) } PRECONFIGIRED_CONDUITS = { #source,sinc #comment #twoway ("FolderTwoWay","FolderTwoWay"):( N_("Synchronize Two Folders"), True ), ("FolderTwoWay","BoxDotNetTwoWay"):( N_("Backup Folder to Box.net"), False ), ("FSpotDbusTwoWay","FlickrTwoWay"):( N_("Synchronize Tagged F-Spot Photos to Flickr"), False ), ("FileSource","FlickrTwoWay"):( N_("Synchronize Photos to Flickr"), False ), ("FileSource","FacebookSink"):( N_("Upload Photos to Facebook"), False ), ("RSSSource","DesktopWallpaperDataProvider"):( N_("Synchronize Desktop Wallpaper from a RSS Feed"), False ), } conduit-0.3.17/conduit/defs.py0000644000175000017500000000074711326116735013145 00000000000000VERSION = "0.3.17" PYTHONDIR = "/usr/local/lib/python2.6/site-packages" BIN_DIR = "/usr/local/bin" LIB_DIR = "/usr/local/lib" LOCALE_DIR = "/usr/local/share/locale" SHARED_DATA_DIR = "/usr/local/share/conduit" SHARED_MODULE_DIR = "/usr/local/lib/conduit/modules" DESKTOP_FILE_DIR = "/usr/local/share/applications" # # Platform specific implementations # #{GIO, Python} FILE_IMPL = "GIO" #{gtkmozembed, webkit, system} BROWSER_IMPL = "webkit" #{GConf,Python} SETTINGS_IMPL = "GConf" conduit-0.3.17/conduit/Globals.py0000644000175000017500000000121111321370454013565 00000000000000""" Excapsulates those items global to the Conduit process """ class Globals: def __init__(self): #settings is global and initialized early self.settings = None #to save resources DB, moduleManager and typeConverter are global self.moduleManager = None self.typeConverter = None self.mappingDB = None #syncManager provides the single point of cancellation when exiting self.syncManager = None #the main application self.app = None #Global cancellation flag self.cancelled = False #the application main loop self.mainloop = None conduit-0.3.17/conduit/utils/0000777000175000017500000000000011326117104013055 500000000000000conduit-0.3.17/conduit/utils/Makefile.am0000644000175000017500000000037611321403566015040 00000000000000conduitdir = $(pythondir)/conduit/utils conduit_PYTHON = \ __init__.py \ GstMetadata.py \ Memstats.py \ MediaFile.py \ CommandLineConverter.py \ Singleton.py \ AutostartManager.py \ Wait.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/utils/Singleton.py0000644000175000017500000000300711172176633015320 00000000000000#!/usr/bin/env python # -*- coding: UTF8 -*- # # GObjectSingleton.py # Copyright (c) 2006 INdT (Instituto Nokia de Tecnologia) # Author: Eduardo de Barros Lima # # 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; either version 2.1 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 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 # USA import gobject class GObjectSingleton(gobject.GObjectMeta): def __init__(cls, name, base, dict): gobject.GObjectMeta.__init__(cls, name, base, dict) cls.__instance = None cls.__copy__ = lambda self: self cls.__deepcopy__ = lambda self, memo=None: self def __call__(cls, *args, **kwargs): if not cls.__instance: cls.__instance = super(GObjectSingleton, cls).__call__(*args, **kwargs) return cls.__instance class Singleton: """ A model that implements the Singleton pattern. """ __metaclass__ = GObjectSingleton pass conduit-0.3.17/conduit/utils/CommandLineConverter.py0000644000175000017500000000255611172176633017444 00000000000000import re import os import signal import popen2 import logging log = logging.getLogger("Utils") class CommandLineConverter: def __init__(self): self.percentage_match = re.compile('.*') def _kill(self, process): log.debug("Killing process") os.kill(process.pid, signal.SIGKILL) def build_command(self, command, **params): self.command = command def calculate_percentage(self, val): return float(val) def check_cancelled(self): return False def convert( self, input_filename, output_filename, callback=None,save_output=False): command = self.command % (input_filename, output_filename) log.debug("Executing %s" % command) output = "" process = popen2.Popen4(command) stdout = process.fromchild s = stdout.read(80) if save_output: output += s while s: if callback: for i in self.percentage_match.finditer(s): val = self.calculate_percentage(i.group(1).strip()) callback(val) if save_output: output += s if self.check_cancelled(): self._kill(process) s = stdout.read(80) ok = process.wait() == 0 if save_output: return ok, output else: return ok conduit-0.3.17/conduit/utils/AutostartManager.py0000644000175000017500000000302611321403566016632 00000000000000import os.path import logging log = logging.getLogger("Utils.Autostart") import conduit class AutostartManager: def __init__(self): self._file = os.path.join(conduit.AUTOSTART_FILE_DIR, "conduit.desktop") def is_start_at_login_enabled(self): if os.path.exists(self._file): #if it contains X-GNOME-Autostart-enabled=false then it has #has been disabled by the user in the session applet, otherwise #it is enabled return open(self._file).read().find("X-GNOME-Autostart-enabled=false") == -1 else: return False def update_start_at_login(self, update): desktopFile = os.path.join(conduit.DESKTOP_FILE_DIR, "conduit.desktop") if os.path.exists(self._file): log.info("Removing autostart desktop file") os.remove(self._file) if update: if not os.path.exists(desktopFile): log.critical("Could not find conduit desktop file: %s" % desktopFile) return log.info("Adding autostart desktop file") #copy the original file to the new file, but #add -i to the exec line (start iconified) old = open(desktopFile, "r") new = open(self._file, "w") for l in old.readlines(): if l.startswith("Exec="): new.write(l[0:-1]) new.write(" -i\n") else: new.write(l) old.close() new.close() conduit-0.3.17/conduit/utils/MediaFile.py0000644000175000017500000001053611214122722015165 00000000000000import threading import conduit import conduit.datatypes.File as File import conduit.utils.Wait as Wait import logging log = logging.getLogger("datatypes.Audio") try: import pygst pygst.require('0.10') import gst import gst.extend.discoverer GST_AVAILABLE = True except ImportError: GST_AVAILABLE = False class MediaFile(File.File): ''' A MediaFile is a file with multimedia attributes, such as an audio or video file. This class includes methods to access metadata included in the file. Using the GStreaner framework, it is able to retrieve most commonly used properties of this kind of file. Media providers can include their own data by overriding get_media_tags, and either providing a new set of properties, or call this class's get_media_tags to merge their data with the GStreamer properties. The Audio and Video classes expose these properties as convenient methods. Note that a descendant of this class only needs to put their data in get_media_tags for them to be exposed by the Audio and Video classes. However, they need to follow the types and units of the GStreamer properties, which are described in each of their methods. Retrieving metadata through GStreamer is a costly process, because the file must be accessed and processed. Thus, it is only retrieved when needed, when the gst_tags attribute is accessed. So, accessing any metadata starts a chain reaction, which starts with descendants overriding get_media_tags, eventually calling get_media_tags in this class, then accesses gst_tags, thus creating the gst metadata if needed. ''' def __init__(self, URI, **kwargs): File.File.__init__(self, URI, **kwargs) def _create_gst_metadata(self): ''' Create metadata from GStreamer. Requires a mainloop and the calling thread MUST BE outside the main loop (usually not a problem inside the synchronization process, which has it's own thread). This is also a very expensive operation, should be called only when necessary. ''' blocker = Wait.WaitOnSignal() def discovered(discoverer, valid): self._valid = valid blocker.unblock() # FIXME: Using Discoverer for now, but we should switch to utils.GstMetadata # when we get it to work (and eventually support thumbnails). info = gst.extend.discoverer.Discoverer(self.get_local_uri()) info.connect('discovered', discovered) info.discover() blocker.block() if self._valid: tags = info.tags else: log.debug("Media file not valid") return {} tags['mimetype'] = info.mimetype if info.is_video: tags['width'] = info.videowidth tags['height'] = info.videoheight tags['videorate'] = info.videorate tags['duration'] = info.videolength / gst.MSECOND if info.is_audio: tags['duration'] = info.audiolength / gst.MSECOND tags['samplerate'] = info.audiorate tags['channels'] = info.audiochannels tags['audiowidth'] = info.audiowidth tags['audiodepth'] = info.audiodepth return tags def _get_metadata(self, name): tags = self.get_media_tags() if name in tags: return tags[name] return None def __getattr__(self, name): # Get metadata only when needed if name == 'gst_tags': tags = self.gst_tags = self._create_gst_metadata() # Don't call self.gst_tags here return tags else: raise AttributeError def get_media_tags(self): ''' Get a dict containing all availiable metadata. It defaults to get the metadata from GStreamer and make a cache that is accessed later. Descendants should override this function to provide their own tags, or merge with these tags, by calling MediaFile.get_media_tags(). ''' if GST_AVAILABLE: return self.gst_tags return {} def get_media_mimetype(self): ''' Return the file miemtype, as returned by GStreamer, which might differ from the file mimetype ''' return self._get_metadata('mimetype') conduit-0.3.17/conduit/utils/Memstats.py0000644000175000017500000000267211172176633015162 00000000000000import os import logging log = logging.getLogger("Utils") class Memstats: """ Memory analysis functions taken from http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/286222 """ _proc_status = '/proc/%d/status' % os.getpid() _scale = {'kB': 1024.0, 'mB': 1024.0*1024.0, 'KB': 1024.0, 'MB': 1024.0*1024.0} def __init__(self): self.prev = [0.0,0.0,0.0] def _VmB(self, VmKey): #get pseudo file /proc//status try: t = open(self._proc_status) v = t.read() t.close() except Exception, err: return 0.0 # non-Linux? #get VmKey line e.g. 'VmRSS: 9999 kB\n ...' i = v.index(VmKey) v = v[i:].split(None, 3) # whitespace if len(v) < 3: return 0.0 # invalid format? #convert Vm value to bytes return float(v[1]) * self._scale[v[2]] def calculate(self): VmSize = self._VmB('VmSize:') - self.prev[0] VmRSS = self._VmB('VmRSS:') - self.prev [1] VmStack = self._VmB('VmStk:') - self.prev [2] log.info("Memory Stats: VM=%sMB RSS=%sMB STACK=%sMB" %( VmSize / self._scale["MB"], VmRSS / self._scale["MB"], VmStack / self._scale["MB"], )) return VmSize,VmRSS,VmStack conduit-0.3.17/conduit/utils/GstMetadata.py0000644000175000017500000006052411172176633015563 00000000000000# -*- coding: utf-8 -*- # Elisa - Home multimedia server # Copyright (C) 2006-2008 Fluendo Embedded S.L. (www.fluendo.com). # All rights reserved. # # This file is available under one of two license agreements. # # This file is licensed under the GPL version 2. # See "LICENSE.GPL" in the root of this distribution including a special # exception to use Elisa with Fluendo's plugins. # # The GPL part of Elisa is also available under a commercial licensing # agreement from Fluendo. # See "LICENSE.Elisa" in the root directory of this distribution package # for details on that license. import gobject gobject.threads_init() import pygst pygst.require('0.10') import gst import logging import os import sys import time from threading import Lock from Queue import Queue import platform import md5 if platform.system() == 'windows': import win32process SEEK_SCHEDULED = 'scheduled' SEEK_DONE = 'done' THUMBNAIL_DIR = os.path.join(os.path.expanduser("~"), ".thumbnails", 'large') THUMBNAIL_SIZE = 256 __maintainer__ = 'Alessandro Decina ' supported_metadata_keys = set(['artist', 'album', 'song', 'track', 'thumbnail']) media_type_keys = set(['uri', 'file_type', 'mime_type']) thumbnail_keys = set(['uri', 'thumbnail']) supported_keys = supported_metadata_keys.union(media_type_keys) supported_schemes = ['file', 'http'] class MetadataError(Exception): pass class InitializeFailure(MetadataError): pass class TimeoutError(MetadataError): pass class GstMetadataError(MetadataError): pass class UriError(MetadataError): pass def able_to_handle(supported_schemes, supported_keys, metadata): uri = metadata.get('uri') if not uri or uri.scheme not in supported_schemes: return False keys = set(metadata.keys()) if uri.scheme == 'file' and os.path.isdir(uri.path) and \ keys != media_type_keys: return False request_keys = supported_keys.intersection(metadata.keys()) request_empty_keys = \ [key for key in request_keys if metadata[key] is None] if request_empty_keys: return True return False class MetadataProvider(object): pass class Loggable(object): def debug(self, msg): logging.warning(msg) #logging.debug(msg) def log(self, msg): logging.warning(msg) #logging.info(msg) class GstMetadataPipeline(Loggable): reuse_elements = True timeout = 2 thumb_timeout = 1 def __init__(self): super(GstMetadataPipeline, self).__init__() self._pipeline = None self._src = None self._decodebin = None self._ffmpegcolorspace = None self._imgthumbbin = None self._videothumbbin = None self._plugged_elements = [] self._frame_locations = [1.0 / 3.0, 2.0 / 3.0, 0.1, 0.9, 0.5] # other instance variables that need to be reset for each new metadata # request are set directly in _reset() def clean(self): self._clean_pipeline(finalize=True) if self._timeout_call is not None: self._timeout_call.cancel() self._timeout_call = None if self._seek_call is not None: self._seek_call.cancel() self._seek_call = None def initialize(self): self._reset() def _clean_pipeline(self, finalize=False): # reset the pipeline to READY if self._pipeline is not None: self._bus.set_flushing(True) self._pipeline.set_state(gst.STATE_READY) if self._src is not None: self._pipeline.remove(self._src) self._src.set_state(gst.STATE_NULL) self._src = None if not self.reuse_elements or finalize: # destroy the pipeline if self._pipeline is not None: self._bus.set_flushing(True) self._pipeline.set_state(gst.STATE_NULL) self._pipeline = None self._decodebin = None self._ffmpegcolorspace = None self._imgthumbbin = None self._videothumbbin = None self._plugged_elements = [] else: # reusing decodebin leads to problems if self._decodebin is not None: self._typefind.unlink(self._decodebin) self._decodebin.set_state(gst.STATE_NULL) self._pipeline.remove(self._decodebin) self._decodebin = None # remove dynamically plugged elements for element in self._plugged_elements: self._pipeline.remove(element) element.set_state(gst.STATE_NULL) self._plugged_elements = [] def _build_pipeline(self): self._pipeline = gst.Pipeline() self._bus = self._pipeline.get_bus() self._bus.add_signal_watch() self._bus.connect('message::application', self._bus_message_application_cb) self._bus.connect('message::error', self._bus_message_error_cb) self._bus.connect('message::eos', self._bus_message_eos_cb) self._bus.connect('message::tag', self._bus_message_tag_cb) self._bus.connect('message::state-changed', self._bus_message_state_changed_cb) self._src = None self._typefind = gst.element_factory_make('typefind') self._typefind.connect('have-type', self._typefind_have_type_cb) pad = self._typefind.get_pad('src') self._pipeline.add(self._typefind) self._pipeline.set_state(gst.STATE_READY) def _reset(self): # NOTE: we call gst_element_set_state so we MUST NOT be called from the # streaming thread # destroy the current pipeline if reuse_elements == False, otherwise # clean it so that it can be reused self._clean_pipeline() if self._pipeline is None: # we're either being called from initialize() or # self.reuse_elements == False self._build_pipeline() # the metadata dictionary of the current request self._req_metadata = None # the uri value in the metadata dictionary self._req_uri = None # the deferred that we callback when we finish loading stuff in # self._req_metadata self._req_callback = None # the caps as given by the typefind::have-type signal self._typefind_caps = None self._typefind_file_type = None self._typefind_mime_type = None # the video/audio/image caps that we get from decodebin pads when # we plug decodebin self._video_caps = None self._audio_caps = None self._image_caps = None # the taglist containing all the tags for the stream self._tags = gst.TagList() # the duration of the current stream, used to seek when doing a # thumbnail self._duration = None self._seek_status = None self._seek_location_index = 0 self._seek_call = None self._timeout_call = None # timestamps used for logging purposes self._start_timestamp = 0 self._end_timestamp = 0 def _bus_message_error_cb(self, bus, message): gerror, debug = message.parse_error() if self._typefind_file_type is not None or \ self._video_caps is not None or \ self._audio_caps is not None or \ self._image_caps is not None: # we got an error going to PAUSED but we still can report the info # that we got from have_type_cb self.debug('error going to paused %s: %s', gerror.message, debug) self._clean_thumbnail() self._done() else: self._failed(GstMetadataError('error' ' domain: %r code: %r message: %s debug: %s' % (gerror.domain, gerror.code, gerror.message, debug))) def _bus_message_application_cb(self, bus, message): if message.structure.get_name() == 'metadata-done': self._done() return def _bus_message_eos_cb(self, bus, message): self.log('got EOS') self._done() def _bus_message_tag_cb(self, bus, message): taglist = message.parse_tag() self._tags = self._tags.merge(taglist, gst.TAG_MERGE_APPEND) def _bus_message_state_changed_cb(self, bus, message): if message.src is not self._pipeline: return prev, current, pending = message.parse_state_changed() if prev == gst.STATE_READY and current == gst.STATE_PAUSED and \ self._decodebin is not None and \ self._decodebin.get_pad('sink').is_linked(): self.debug('reached PAUSED') if self._video_caps is None and self._image_caps is None and \ self._typefind_file_type not in ('video', 'image'): # we have the tags at this point self._done() def _typefind_have_type_cb(self, typefind, probability, caps): self.debug('have type %s' % caps) # self._typefind_caps = caps is broken, bug in the bindings # FIXME: fix the bug and change this asap self._typefind_caps = caps.copy() gst_mime_type = self._typefind_mime_type = self._typefind_caps[0].get_name() file_type = self._typefind_file_type = gst_mime_type.split('/')[0] # NB: id3 tags most of the time are used with mp3 (even if it isn't # uncommon to find them with AIFF or WAV). Given that mp3 is by far the # most used audio format at the moment we make the common case fast here # by assuming that the file_type is audio. By doing this we also set the # mime_type to application/x-id3, but this doesn't matter at the moment # since we don't use the mime_type anywhere. if gst_mime_type == 'application/x-id3': file_type = self._typefind_file_type = 'audio' elif gst_mime_type == 'audio/x-m4a': # FIXME: see http://bugzilla.gnome.org/show_bug.cgi?id=340375 and use this # hack until we write our typefinder for this file_type = None req_keys = set(self._req_metadata.keys()) if (req_keys == media_type_keys and \ file_type in ('video', 'audio', 'image'))or \ (file_type in ('video', 'image') and \ (not 'thumbnail' in req_keys or self._have_thumbnail())): self.debug('got media_type for %s, NOT going to paused', self._req_uri) # we are in the streaming thread so we post a message on the bus # here and when we read it from the main thread we call _done() structure = gst.Structure('metadata-done') self._bus.post(gst.message_new_application(self._pipeline, structure)) return # we need tags and/or a thumbnail self.debug('we need to go to PAUSED, plugging decodebin ' '(file_type: %s)' % file_type) self._plug_decodebin() def _plug_decodebin(self): if self._decodebin is None: self._decodebin = gst.element_factory_make('decodebin') self._decodebin.connect('new-decoded-pad', self._decodebin_new_decoded_pad_cb) self._decodebin.connect('unknown-type', self._decodebin_unknown_type_cb) self._pipeline.add(self._decodebin) self._typefind.link(self._decodebin) pad = self._typefind.get_pad('src') self._decodebin.set_state(gst.STATE_PAUSED) def _check_thumbnail_directory(self): if not os.path.exists(THUMBNAIL_DIR): try: os.makedirs(THUMBNAIL_DIR, 0700) except OSError, e: msg = "Could not make directory %r: %s. Thumbnail not saved." % (directory, e) self.warning(msg) raise ThumbnailError(self._req_uri, msg) def _boring_cb(self, obj, buffer): self.debug('boring buffer') self._seek_next_thumbnail_location() def _plug_video_thumbnailbin(self, video_pad): self.debug('pluging video thumbbin') self._check_thumbnail_directory() if self._videothumbbin is None: self._videothumbbin = PngVideoSnapshotBin() self._videothumbbin.connect('boring', self._boring_cb) self._pipeline.add(self._videothumbbin) thumbbin = self._videothumbbin filesink = gst.element_factory_make('filesink') self._pipeline.add(filesink) filesink.props.location = get_thumbnail_location(self._req_uri) video_pad.link(thumbbin.get_pad('sink')) thumbbin.get_pad('src').link(filesink.get_pad('sink')) thumbbin.set_state(gst.STATE_PAUSED) filesink.set_state(gst.STATE_PAUSED) self._plugged_elements.append(filesink) self.debug('video thumbbin plugged') def _plug_image_thumbnailbin(self, image_pad): self.debug('plugging image thumbbin') self._check_thumbnail_directory() if self._imgthumbbin is None: # we can't register the element on old gst-python versions so we can't # use gst_element_factory_make # self._imgthumbbin = gst.element_factory_make('pngimagesnapshot') self._imgthumbbin = PngImageSnapshotBin() self._pipeline.add(self._imgthumbbin) thumbbin = self._imgthumbbin filesink = gst.element_factory_make('filesink') self._pipeline.add(filesink) filesink.props.location = get_thumbnail_location(self._req_uri) image_pad.link(thumbbin.get_pad('sink')) thumbbin.get_pad('src').link(filesink.get_pad('sink')) thumbbin.set_state(gst.STATE_PAUSED) filesink.set_state(gst.STATE_PAUSED) self._plugged_elements.append(filesink) self.debug('image thumbbin plugged') #def _have_thumbnail(self): # location = get_thumbnail_location(self._req_uri) # if os.path.exists(location): # stat = os.stat(location) # if stat.st_size != 0: # return True # return False def _find_decoder(self, pad): target = pad.get_target() element = target.get_parent() klass = element.get_factory().get_klass() if 'Decoder' in klass: return element return None def _get_type_from_decoder(self, decoder): klass = decoder.get_factory().get_klass() parts = klass.split('/', 2) if len(parts) != 3: return None return parts[2].lower() def _seek_next_thumbnail_location(self): self._seek_status = SEEK_SCHEDULED #self._seek_call = \ # reactor.callLater(0, self._seek_next_thumbnail_location_real) def _seek_next_thumbnail_location_real(self): self._seek_call = None self._seek_status = SEEK_DONE if self._duration is None: # first seek, get the duration try: self._duration, format = self._pipeline.query_duration(gst.FORMAT_TIME) except gst.QueryError, e: self.debug('duration query failed: %s', e) return if self._duration == -1: self.debug('invalid duration, not seeking') return self.debug('stream duration %s' % self._duration) if self._seek_location_index == len(self._frame_locations): self.debug('no more seek locations') return self._failed(ThumbnailError('no more seek locations')) location = self._frame_locations[self._seek_location_index] self.debug('seek to location %d, time %s duration %s' % (self._seek_location_index, gst.TIME_ARGS(int(location * self._duration)), gst.TIME_ARGS(self._duration))) self._seek_location_index += 1 res = self._pipeline.seek(1.0, gst.FORMAT_TIME, gst.SEEK_FLAG_FLUSH | gst.SEEK_FLAG_KEY_UNIT, gst.SEEK_TYPE_SET, int(location * self._duration), gst.SEEK_TYPE_NONE, 0) self.debug('seek done res %s' % res) def _close_pad(self, pad): queue = gst.element_factory_make('queue') # set the queue leaky so that if we take some time to do the thumbnail # the demuxer doesnt' block on full queues queue.props.leaky = 1 sink = gst.element_factory_make('fakesink') self._pipeline.add(queue, sink) # add sink before queue so when we iterate over the elements to clean # them we clean the sink first and unblock the queue if it's blocked # prerolling self._plugged_elements.append(sink) self._plugged_elements.append(queue) pad.link(queue.get_pad('sink')) queue.link(sink) queue.set_state(gst.STATE_PAUSED) sink.set_state(gst.STATE_PAUSED) def _get_pad_type(self, pad): decoder = self._find_decoder(pad) if decoder: return self._get_type_from_decoder(decoder) return pad.get_caps()[0].get_name().split('/', 1)[0] def _get_pad_caps(self, pad): decoder = self._find_decoder(pad) if decoder: return decoder.get_pad('sink').get_caps() return pad.get_caps() def _decodebin_new_decoded_pad_cb(self, decodebin, pad, is_last): self.debug('new decoded pad %s, caps %s, is_last %s' % (pad, pad.get_caps(), is_last)) typ = self._get_pad_type(pad) caps = self._get_pad_caps(pad) if typ == 'audio': if self._audio_caps is None: self._audio_caps = caps elif typ == 'video': if self._video_caps is None: self._video_caps = caps # do a thumbnail of the first video track # self._plug_video_thumbnailbin(pad) elif typ == 'image': if self._image_caps is None: self._image_caps = caps # self._plug_image_thumbnailbin(pad) if not pad.is_linked(): self._close_pad(pad) def _decodebin_unknown_type_cb(self, decodebin, pad, caps): self.debug('unknown pad %s, caps %s' % (pad, caps)) def _plug_src(self, uri): src = gst.element_make_from_uri(gst.URI_SRC, str(uri)) # FIXME: workaround for jpegdec that does a gst_buffer_join for each # gst_pad_chain. #src.props.blocksize = 3 * 1024 * 1024 return src def get_metadata(self, requested_metadata, callback): #assert self._timeout_call is None self._req_metadata = requested_metadata self._req_uri = requested_metadata['uri'] #self._req_defer = defer.Deferred() self._req_callback = callback self.debug('getting metadata %s' % self._req_metadata) self._start_timestamp = time.time() self._src = self._plug_src(self._req_uri) self._pipeline.add(self._src) self._src.link(self._typefind) #self._timeout_call = reactor.callLater(self.timeout, self._timeout) # reset the bus in case this is not the first request self._bus.set_flushing(False) self._pipeline.set_state(gst.STATE_PLAYING) #return self._req_defer def _get_media_type_from_caps(self, caps): res = {} mime_type = caps[0].get_name() file_type = mime_type.split('/', 1)[0] return {'file_type': file_type, 'mime_type': mime_type} def _done(self): #if not self._timeout_call.called: # self._timeout_call.cancel() # we can't check self._seek_call.called here because we don't know if we # scheduled a seek call at all #if self._seek_call is not None: # self._seek_call.cancel() # self._seek_call = None self._end_timestamp = time.time() metadata = self._req_metadata metadata_callback = self._req_callback available_metadata = {} for caps in (self._video_caps, self._audio_caps, self._image_caps): if caps is not None: available_metadata.update(self._get_media_type_from_caps(caps)) break # fallback to typefind caps if available_metadata.get('file_type') is None: available_metadata['file_type'] = self._typefind_file_type available_metadata['mime_type'] = self._typefind_mime_type #if available_metadata['file_type'] in ('video', 'image') and \ # self._have_thumbnail(): # available_metadata['thumbnail'] = \ # get_thumbnail_location(self._req_uri) tags = self._tags try: del tags['extended-comment'] except KeyError: pass #tag_keys = tags.keys() #for gst_key, elisa_key in (('track-number', 'track'), # ('title', 'song')): # try: # available_metadata[elisa_key] = tags[gst_key] # except KeyError: # pass #for key in tag_keys: # value = tags[key] # FIXME: this was an old assumption, let's keep it until we update # all the old code # if isinstance(value, list): # try: # value = value[0] # except IndexError: # continue # available_metadata[key] = value for tag_key in tags.keys(): available_metadata[tag_key] = tags[tag_key] #for key, value in available_metadata.iteritems(): # try: # if metadata[key] is None: # metadata[key] = value # except KeyError: # pass metadata = available_metadata self.debug('finished getting metadata %s, elapsed time %s' % (metadata, self._end_timestamp - self._start_timestamp)) self._reset() metadata_callback(metadata) def _timeout(self, thumb_timeout=False): self.debug('timeout thumb %s video caps %s', thumb_timeout, self._video_caps) if not thumb_timeout and (self._typefind_file_type == 'video' or self._video_caps is not None): # give some more time to the pipline if we are trying to make a # thumbnail #self._timeout_call = \ # reactor.callLater(self.thumb_timeout, self._timeout, True) #else: self._clean_thumbnail() keys = set(self._req_metadata.keys()) if keys != thumbnail_keys and \ (self._typefind_file_type is not None or \ self._video_caps is not None or \ self._audio_caps is not None or \ self._image_caps is not None): # timeout while going to paused. This can happen on really slow # machines while doing the thumbnail. Even if we didn't do the # thumbnail, we have some clue about the media type here. self._done() else: self._failed(TimeoutError('timeout')) def _clean_thumbnail(self): # if we fail doing a thumbnail we need to remove the file if self._imgthumbbin is not None or self._videothumbbin is not None: location = get_thumbnail_location(self._req_uri) try: os.unlink(location) except OSError: pass def _failed(self, error): # cancel delayed calls #if not self._timeout_call.called: # self._timeout_call.cancel() #if self._seek_call is not None: # self._seek_call.cancel() # self._seek_call = None self._end_timestamp = time.time() metadata = self._req_metadata metadata_callback = self._req_callback #self.debug('error getting metadata %s, error: %s, ' # 'elapsed time: %s, timeout %s' % (metadata, error, # self._end_timestamp - self._start_timestamp, # self._timeout_call.called)) self.debug('error getting metadata %s, error: %s, ' 'elapsed time: %s' % (metadata, error, self._end_timestamp - self._start_timestamp)) #self._clean_thumbnail() self._reset() metadata_callback(None) class GstMetadata: def __init__(self): self.queue = Queue() self.pipeline = GstMetadataPipeline() self.pipeline.initialize() def get_metadata(self, uri): self.pipeline.get_metadata({'uri': 'file://'+os.path.abspath(uri)}, self.queue.put) metadata = self.queue.get() return metadata conduit-0.3.17/conduit/utils/Wait.py0000644000175000017500000000036011214122722014244 00000000000000import glib class WaitOnSignal(object): def __init__(self): self.context = glib.MainContext() self.loop = glib.MainLoop() def block(self): self.loop.run() def unblock(self): self.loop.quit() conduit-0.3.17/conduit/utils/Makefile.in0000644000175000017500000003220211326116730015041 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/utils DIST_COMMON = $(conduit_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduitdir)" py_compile = $(top_srcdir)/py-compile DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ conduitdir = $(pythondir)/conduit/utils conduit_PYTHON = \ __init__.py \ GstMetadata.py \ Memstats.py \ MediaFile.py \ CommandLineConverter.py \ Singleton.py \ AutostartManager.py \ Wait.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/utils/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/utils/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduitPYTHON: $(conduit_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduitdir)" || $(MKDIR_P) "$(DESTDIR)$(conduitdir)" @list='$(conduit_PYTHON)'; dlist=; list2=; test -n "$(conduitdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduitdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduitdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduitdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduitdir)" $$dlist; \ fi; \ else :; fi uninstall-conduitPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_PYTHON)'; test -n "$(conduitdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduitdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduitdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduitdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduitdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduitdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduitdir)" && rm -f $$fileso tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(conduitdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-conduitPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-conduitPYTHON .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-conduitPYTHON \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am uninstall-conduitPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/utils/__init__.py0000644000175000017500000002613011172176633015117 00000000000000""" Utility Functions Part of this code copied from from Listen (c) 2006 Mehdi Abaakouk (http://listengnome.free.fr/) Copyright: John Stowers, 2006 License: GPLv2 """ import sys import os.path import socket import datetime import urllib2 import time import re import logging import subprocess log = logging.getLogger("Utils") def _get_http_resource(url): try: request = urllib2.Request(url) return urllib2.build_opener().open(request) except urllib2.HTTPError: log.info("URL does not exist: %s" % url) return None except Exception, e: log.warn("Error getting url last modified: %s" % e) return None def get_http_resource_mimetype(url): """ Returns the mimetype of the http resource at the given URL. """ a = _get_http_resource(url) if a: return a.headers.getheader('content-type') return None def get_http_resource_size(url): """ Returns the mimetype of the http resource at the given URL. """ a = _get_http_resource(url) if a: return int(a.headers.getheader('content-length')) return None def get_http_resource_last_modified(url): """ Returns the last modified date of the http resource at the given URL. @returns: A Float timestamp or None """ date = None a = _get_http_resource(url) if a: date = a.headers.getdate('Last-Modified') if date: date = time.mktime(date) return date def get_proportional_resize(desiredW, desiredH, currentW, currentH): """ Returns proportionally resized co-ordinates for an image """ #Account for 'dont care about this axis sizing' if desiredH == -1: desiredH = currentH if desiredW == -1: desiredW = currentW #Calculate the axis of most change dw = abs(currentW - desiredW) dh = abs(currentH - desiredH) if dh > dw: newHeight = float(desiredH) percentage = newHeight / currentH newWidth = currentW * percentage else: newWidth = float(desiredW) percentage = newWidth / currentW newHeight = currentH * percentage return int(newWidth), int(newHeight) def program_installed(app): """ Check if the given app is installed. """ path = os.environ['PATH'] paths = path.split(os.pathsep) for dir in paths: if os.path.isdir(dir): if os.path.isfile(os.path.join(dir,app)): return True return False def ensure_string(arg): """ Ensures that arg is str or unicode, returns it as str. """ if type(arg) == str: return arg elif type(arg) == unicode: return str(arg) else: raise Exception("must be str or unicode (was %s)" % type(arg)) # # Temporary file functions # def new_tempfile(contents, **kwargs): """ Returns a new File onject, which has been created in the system temporary directory, and that has been filled with contents The file is closed when it is returned @param contents: The data to write into the file @returns: a L{conduit.datatypes.File} """ import conduit.datatypes.File as File return File.TempFile(contents, **kwargs) def new_tempdir(): """ Creates a new temporary directory """ import tempfile return tempfile.mkdtemp("conduit") def unique_list(seq): """ The fastes way to unique-ify a list while retaining its order, from http://www.peterbe.com/plog/uniqifiers-benchmark """ def _f10(listy): seen = set() for x in listy: if x in seen: continue seen.add(x) yield x return list(_f10(seq)) def random_string(length=5): """ returns a random string of length """ import random s = "" for i in range(0,length): s += str(random.randint(0,10)) return s def dataprovider_add_dir_to_path(dataproviderfile, directory=""): """ Adds directory to the python search path. From within a dataprovider (FooModule.py) call with Utils.dataprovider_add_dir_to_path(__file__, some_dir): """ path = os.path.join(dataproviderfile, "..", directory) path = os.path.abspath(path) sys.path.insert(0,path) def dataprovider_glade_get_widget(dataproviderfile, gladefilename, widget): """ Gets a single gtk widget from a glad file """ import gtk.glade path = os.path.join(dataproviderfile, "..", gladefilename) path = os.path.abspath(path) return gtk.glade.XML(path, widget) def run_dialog(dialog, window=None): """ Runs a given dialog, and makes it transient for the given window if any @param dialog: dialog @param window: gtk window @returns: True if the user clicked OK to exit the dialog """ import gtk if window: dialog.set_transient_for(window) return dialog.run() == gtk.RESPONSE_OK def run_dialog_non_blocking(dialog, resp_cb, window=None): """ Runs a given dialog, and makes it transient for the given window if any @param dialog: dialog @param window: gtk window @returns: True if the user clicked OK to exit the dialog """ import gtk.gdk dialog.connect("response", resp_cb) dialog.connect("response", lambda dlg, resp: dlg.destroy()) if window: dialog.set_transient_for(window) #FIXME: Doesnt work #fake modality by making window ignore key events #events = window.window.get_events() #window.window.set_events( # events & ~(gtk.gdk.KEY_PRESS_MASK | gtk.gdk.KEY_RELEASE_MASK)) #connect to response signal to restore original events #dialog.connect( # "response", # lambda dlg, resp, win, originalEvents: window.window.set_events(originalEvents), # window,events) dialog.show() def dialog_set_busy_cursor(dlg): """ Sets the dialog to display the busy cursor """ import gtk.gdk if dlg and dlg.window: dlg.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) def dialog_reset_cursor(dlg): """ Resets the dialog to display the plain Gtk cursor """ if dlg and dlg.window: dlg.window.set_cursor(None) def md5_string(string): """ Returns the md5 of the supplied string in readable hexdigest string format """ import md5 return md5.new(string).hexdigest() def uuid_string(): """ Returns a uuid string """ try: import uuid return uuid.uuid4().hex except ImportError: import random, md5, socket t = long( time.time() * 1000 ) r = long( random.random()*100000000000000000L ) try: a = socket.gethostbyname( socket.gethostname() ) except: a = random.random()*100000000000000000L data = str(t)+' '+str(r)+' '+str(a) data = md5.md5(data).hexdigest() return data def dbus_service_available(interface, bus=None): """ Checks if a dbus service is available on the given bus @param interface: The interface to look for @param bus: The bus to look on (optional) """ try: import dbus except: return False if bus == None: bus = dbus.SessionBus() obj = bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus') dbus_iface = dbus.Interface(obj, 'org.freedesktop.DBus') avail = dbus_iface.ListNames() return interface in avail def get_user_string(): """ Makes a user and machine dependant string in the form username@hostname """ hostname = socket.gethostname() username = os.environ.get("USER","") return "%s@%s" % (username, hostname) def datetime_from_timestamp(t): """ Makes a datetime object from a unix timestamp. Note: For the sake of consistancy always drop the fractional (microsecond) part of the timestamp """ if type(t) not in [long, int, float]: raise Exception("Timestamp must be a number") if t < 0: raise Exception("Timestamps before 1970 are not valid") return datetime.datetime.fromtimestamp(long(t)) def datetime_get_timestamp(d): """ Returns the unix timestamp for a datetime Note: For the sake of consistancy always drop the fractional (microsecond) part of the timestamp """ if type(d) != datetime.datetime: raise Exception("Must supply a datetime") f = time.mktime(d.timetuple()) if f < 0: raise Exception("Timestamps before 1970 are not valid") return long(f) def encode_conversion_args(args): """ encodes an args dictionary to a url string in the form param=value¶m2=val2 """ import urllib return urllib.urlencode(args) def decode_conversion_args(argString): """ FIXME: dont import cgi for just one function. Also it doesnt even handle lists """ import cgi args = {} for key,val in cgi.parse_qsl(argString): args[key] = val return args def log_function_call(log): """ A decorator that prints debug message showing the function name and argument types to the supplied logger instance. Adapted from the accepts/returns decorators at http://wiki.python.org/moin/PythonDecoratorLibrary """ def decorator(f): def newf(*args): #Ensure args are tuples with str args - necessart for CPython methods argtypes = map(str,map(type, args)) argnames = map(str,f.func_code.co_varnames[:f.func_code.co_argcount]) argnamesandtypes = ["%s:%s" % (i,j) for i,j in zip(argnames,argtypes)] msg = "Method Call %s(%s)" % ( f.__name__, ', '.join(argnamesandtypes) ) log.debug(msg) return f(*args) #Retain information about old function newf.__name__ = f.__name__ newf.__doc__ = f.__doc__ newf.__dict__.update(f.__dict__) return newf return decorator def xml_extract_value_from_tag(tag, text): """ Returns the contents of the xml tag or None. Uses a simple regex. Taken from: http://immike.net/blog/2007/04/06/5-regular-expressions-every-web-programmer-should-know/ """ ans = re.compile("<%(tag)s[^>]*>(.*?)" % {"tag":tag}).findall(text) if ans: return ans[0] else: return None def get_module_information(module, versionAttributeName): """ Prints the name, location and version of the supplied module """ version = "" if versionAttributeName: try: version = " v%s" % str(getattr(module, versionAttributeName)) except: pass path = "" try: path = " (%s)" % module.__file__ except: pass return "%s%s%s" % (module.__name__, version, path) def exec_command_and_return_result(cmd, arg): """ Executes a commmand and returns the result, or None on error """ try: p = subprocess.Popen([cmd, arg], stdout=subprocess.PIPE, stderr=subprocess.PIPE) out,err = p.communicate() if p.returncode == 0: return out else: return None except OSError: return None conduit-0.3.17/conduit/conduit0000755000175000017500000000155211172176633013242 00000000000000#!/bin/sh # Start Conduit # Work around https://bugs.launchpad.net/ubuntu/+source/firefox/+bug/26436 # Note: This bug is also present in Mandriva and Fedora, for this reason, # We will use run-mozilla in all cases # Run mozilla takes care of settin up the appropriate environment variables # to run a program using mozilla libs if [ x$CONDUIT_BROWSER_IMPL = x"gtkmozembed" ]; then for d in `ls -d /usr/lib*/firefox* /usr/lib*/mozilla-firefox* 2> /dev/null | sort -r` do if [ -x $d/run-mozilla.sh ]; then echo INFO: FOUND FIREFOX LIBS AT $d $d/run-mozilla.sh `dirname $0`/conduit.real $* exit fi done echo "WARNING: COULD NOT FIND FIREFOX LIBRARIES" echo "WARNING: CONDUIT MAY CRASH UNEXPECTEDLY" echo "WARNING: PLEASE TALK TO THE PERSON WHO PACKAGED CONDUIT" fi `dirname $0`/conduit.real $* conduit-0.3.17/conduit/libconduit.py0000644000175000017500000003002411172176633014351 00000000000000import os.path import gobject import gtk import dbus, dbus.glib PLUGIN_CONFIG_DIR = os.environ.get("XDG_CONFIG_HOME", os.path.join(os.environ['HOME'], ".config", "conduit", "plugin-config")) APPLICATION_DBUS_IFACE="org.conduit.Application" CONDUIT_DBUS_IFACE="org.conduit.Conduit" EXPORTER_DBUS_IFACE="org.conduit.Exporter" DATAPROVIDER_DBUS_IFACE="org.conduit.DataProvider" SYNCSET_DBUS_IFACE="org.conduit.SyncSet" SYNCSET_GUI_PATH = '/syncset/gui' SYNCSET_NOGUI_PATH = '/syncset/dbus' class ConduitWrapper: CONFIG_NAME="test-plugin" NAME_IDX=0 URI_IDX=1 STATUS_IDX=2 PB_IDX=3 def __init__(self, syncset, conduit, name, store, debug): self.syncset = syncset self.conduit = conduit self.name = name self.store = store self.debug = debug self.rowref = None self.configured = False self.pendingSync = False self.conduit.connect_to_signal( "SyncProgress", self._on_sync_progress, dbus_interface=CONDUIT_DBUS_IFACE ) self.conduit.connect_to_signal( "SyncCompleted", self._on_sync_completed, dbus_interface=CONDUIT_DBUS_IFACE ) self.conduit.connect_to_signal( "SyncStarted", self._on_sync_started, dbus_interface=CONDUIT_DBUS_IFACE ) self.config_path = os.path.join(PLUGIN_CONFIG_DIR, self.CONFIG_NAME) if not os.path.exists(self.config_path): self._debug("Creating config dir: %s" % self.config_path) try: os.makedirs(self.config_path) except OSError: pass def _debug(self, msg): if self.debug: print "LCW: ", msg def _get_configuration(self): """ Gets the latest configuration for a given dataprovider """ xml = None try: if not os.path.exists(os.path.join(self.config_path, self.name)): return f = open(os.path.join(self.config_path, self.name), 'r') xml = f.read() f.close() except OSError, e: self._debug("Error getting config: %s" % e) except Exception, e: self._debug("Error getting config: %s" % e) return xml def _save_configuration(self, xml): """ Saves the configuration XML from a given dataprovider again """ try: f = open(os.path.join(self.config_path, self.name), 'w') f.write(xml) f.close() except OSError, e: self._debug("Error saving config: %s" % e) except Exception, e: self._debug("Error saving config: %s" % e) def _get_rowref(self): if self.rowref == None: self.add_rowref() return self.rowref def _configure_reply_handler(self): #save the configuration xml = self.conduit.SinkGetConfigurationXml() self._save_configuration(xml) self.configured = True #check if a sync was waiting for the conduit (sink) to be configured if self.pendingSync == True: self.pendingSync = False self.conduit.Sync(dbus_interface=CONDUIT_DBUS_IFACE) def _configure_error_handler(self, error): self._debug("CONFIGURE ERROR: %s" % error) self.store.set_value(self._get_rowref(), self.STATUS_IDX, "aborted") def _on_sync_started(self): self.store.set_value(self._get_rowref(), self.STATUS_IDX, "uploading") def _on_sync_progress(self, progress, uids): uris = [str(i) for i in uids] delete = [] treeiter = self.store.iter_children(self._get_rowref()) while treeiter: if self.store.get_value(treeiter, self.URI_IDX) in uris: delete.append(treeiter) treeiter = self.store.iter_next(treeiter) for d in delete: self.store.remove(d) #for uri in uids: # rowref = self._get_rowref_for_photo(str(uri)) # print "\t%s - %s" % (uri, rowref) # print "\t",self.photoRefs def _on_sync_completed(self, abort, error, conflict): rowref = self._get_rowref() if abort == False and error == False: self.clear() #update the status self.store.set_value(rowref, self.STATUS_IDX, "finished") else: #show the error message in the conduit gui self.store.set_value(rowref, self.STATUS_IDX, "error") def _add_uri(self, uri): return self.conduit.AddData(uri, dbus_interface=EXPORTER_DBUS_IFACE) def _add_item(self, filename, uri, status, pixbuf): rowref = self._get_rowref() self.store.append(rowref,( filename, #ConduitWrapper.NAME_IDX uri, #ConduitWrapper.URI_IDX status, #ConduitWrapper.STATUS_IDX pixbuf) #ConduitWrapper.PB_IDX ) def _add_rowref(self, name, uri, status, pixbuf): self.rowref = self.store.append(None,( name, #ConduitWrapper.NAME_IDX uri, #ConduitWrapper.URI_IDX status, #ConduitWrapper.STATUS_IDX pixbuf) #ConduitWrapper.PB_IDX ) def clear(self): rowref = self._get_rowref() #delete all the items from the list of items to upload delete = [] child = self.store.iter_children(rowref) while child != None: delete.append(child) child = self.store.iter_next(child) #need to do in two steps so we dont modify the store while iterating for d in delete: self.store.remove(d) #delete conduit's remote instance self.syncset.DeleteConduit(self.conduit, dbus_interface=SYNCSET_DBUS_IFACE) def sync(self): if self.configured == True: self.conduit.Sync(dbus_interface=CONDUIT_DBUS_IFACE) else: #defer the sync until the conduit has been configured self.pendingSync = True #configure the sink and perform the actual synchronisation #when the configuration is finished, this way the GUI doesnt #block on the call self.conduit.SinkConfigure( reply_handler=self._configure_reply_handler, error_handler=self._configure_error_handler, dbus_interface=EXPORTER_DBUS_IFACE ) def add_item(self, pixbuf, uri): if self._add_uri(uri): #add to the store self._add_item( filename=uri.split("/")[-1], uri=uri, status="", pixbuf=pixbuf ) def add_rowref(self): raise NotImplementedError class ConduitApplicationWrapper(gobject.GObject): __gsignals__ = { "conduit-started" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [gobject.TYPE_BOOLEAN]), } def __init__(self, conduitWrapperKlass, addToGui, store=True, debug=False): gobject.GObject.__init__(self) self.conduitWrapperKlass = conduitWrapperKlass self.addToGui = addToGui self.debug = debug self.app = None self.conduits = {} self.dps = [] if store: #the liststore with icons of the images to be uploaded self.store = gtk.TreeStore( str, #ConduitWrapper.NAME_IDX str, #ConduitWrapper.URI_IDX str, #ConduitWrapper.STATUS_IDX gtk.gdk.Pixbuf #ConduitWrapper.PB_IDX ) else: self.store = None self.dbus_iface = dbus.Interface( dbus.SessionBus().get_object('org.freedesktop.DBus', '/org/freedesktop/DBus'), 'org.freedesktop.DBus' ) self.dbus_iface.connect_to_signal("NameOwnerChanged", self._on_name_owner_changed) def _debug(self, msg): if self.debug: print "LCA: ", msg def _get_conduit_app(self): try: self.app = dbus.Interface( dbus.SessionBus().get_object(APPLICATION_DBUS_IFACE,"/"), APPLICATION_DBUS_IFACE ) except dbus.exceptions.DBusException: self._debug("Could not connect to conduit") self.app = None return self.app def _get_available_dps(self): if self.app != None: self.dps = self.app.GetAllDataProviders() def _on_name_owner_changed(self, name, oldOwner, newOwner): if name == APPLICATION_DBUS_IFACE: if self.dbus_iface.NameHasOwner(APPLICATION_DBUS_IFACE): self._get_conduit_app() self._get_available_dps() self._debug("Conduit started") else: self._debug("Conduit stopped") self.app = None self.dps = [] self.emit("conduit-started", self.connected()) def build_conduit(self, sinkName): a = self.get_dataproviders() if sinkName in a: realName = a[sinkName] self._debug("Building exporter conduit %s (%s)" % (sinkName, realName)) bus = dbus.SessionBus() exporter_path = self.app.BuildExporter(realName) exporter = bus.get_object(CONDUIT_DBUS_IFACE, exporter_path) if self.addToGui: ss = bus.get_object(SYNCSET_DBUS_IFACE, SYNCSET_GUI_PATH) else: ss = bus.get_object(SYNCSET_DBUS_IFACE, SYNCSET_NOGUI_PATH) ss.AddConduit(exporter, dbus_interface=SYNCSET_DBUS_IFACE) self.conduits[sinkName] = self.conduitWrapperKlass( syncset=ss, conduit=exporter, name=sinkName, store=self.store, debug=self.debug ) else: self._debug("Could not build Conduit %s" % sinkName) def get_application(self): return self.app def get_dataproviders(self): #Split of the key part of the name a = {} for n in self.dps: a[n.split(":")[0]] = str(n) return a def upload(self, name, uri, pixbuf): if self.connected(): if name not in self.conduits: self.build_conduit(name) if uri != None: self.conduits[name].add_item( pixbuf=pixbuf, uri=uri ) def connect_to_conduit(self, startConduit): #check if conduit is running if self.dbus_iface.NameHasOwner(APPLICATION_DBUS_IFACE): self._debug("Conduit already running") self._get_conduit_app() self._get_available_dps() return True elif startConduit: self._debug("Starting conduit via DBus activation") self.dbus_iface.StartServiceByName(APPLICATION_DBUS_IFACE, 0) return False else: #not running, not started return False def sync(self): if self.connected(): for c in self.conduits: self.conduits[c].sync() def clear(self): if self.connected(): for name,c in self.conduits.items(): c.clear() if self.store and c.rowref: self.store.remove(c.rowref) del(self.conduits[name]) def connected(self): return self.app != None conduit-0.3.17/conduit/Database.py0000755000175000017500000003040311321403566013717 00000000000000""" Sqlite DB Abstraction layer and threadsafe wrapping around it. Copyright (C) John Stowers 2007 GenericDB: SQL based on http://vwdude.com/dropbox/pystore/ Copyright (C) Christian Hergert 2007 ThreadSafeGenericDB: Wrapper based on http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/526618 Copyright (C) Louis RIVIERE 2007 You may 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. main.c 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 main.c. If not, write to: The Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301, USA. """ import gobject import logging log = logging.getLogger("Database") #for generic db try: from sqlite3 import dbapi2 as sqlite except ImportError: from pysqlite2 import dbapi2 as sqlite #for threadsafe db from threading import Thread from Queue import Queue #for lru decorator from collections import deque def lru_cache(maxsize): """ Decorator applying a least-recently-used cache with the given maximum size. Arguments to the cached function must be hashable. Cache performance statistics stored in f.hits and f.misses. """ if maxsize == 0: decorating_function = lambda x: x else: def decorating_function(f): cache = {} # mapping of args to results queue = deque() # order that keys have been accessed refcount = {} # number of times each key is in the access queue def wrapper(*args): # localize variable access (ugly but fast) _cache=cache; _len=len; _refcount=refcount; _maxsize=maxsize queue_append=queue.append; queue_popleft = queue.popleft # get cache entry or compute if not found try: result = _cache[args] wrapper.hits += 1 except KeyError: result = _cache[args] = f(*args) wrapper.misses += 1 # record that this key was recently accessed queue_append(args) _refcount[args] = _refcount.get(args, 0) + 1 # Purge least recently accessed cache contents while _len(_cache) > _maxsize: k = queue_popleft() _refcount[k] -= 1 if not _refcount[k]: del _cache[k] del _refcount[k] # Periodically compact the queue by duplicate keys if _len(queue) > _maxsize * 4: for i in [None] * _len(queue): k = queue_popleft() if _refcount[k] == 1: queue_append(k) else: _refcount[k] -= 1 assert len(queue) == len(cache) == len(refcount) == sum(refcount.itervalues()) return result wrapper.__doc__ = f.__doc__ wrapper.__name__ = f.__name__ wrapper.hits = wrapper.misses = 0 return wrapper return decorating_function class GenericDB(gobject.GObject): """ GenericDB abstraction layer. Supports select, update, delete, etc """ __gsignals__ = { "row-inserted" : ( gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [ gobject.TYPE_INT]), #row oid "row-modified" : ( gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [ gobject.TYPE_INT]), #row oid "row-deleted" : ( gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [ gobject.TYPE_INT]) #row oid } DEBUG = False def __init__(self, filename=":memory:", **kwargs): gobject.GObject.__init__(self) #dictionary of field names, key is table name self.tables = {} self.filename = filename self.options = kwargs self._open() self._get_tables() def _open(self): #Open the DB and set options if self.options.get("detect_types",False): self.db = sqlite.connect(self.filename, detect_types=sqlite.PARSE_DECLTYPES) else: self.db = sqlite.connect(self.filename) self.db.isolation_level = self.options.get("isolation_level",None) self.db.text_factory = str if self.options.get("row_by_name",False) == True: self.db.row_factory = sqlite.Row self.cur = self.db.cursor() def _get_tables(self): #get the field names for all tables for name, in self.cur.execute("SELECT name FROM sqlite_master WHERE type='table' and name != 'sqlite_sequence'"): self.tables[str(name)] = [row[1] for row in self.cur.execute("PRAGMA table_info('%s')" % name) if row[1] != 'oid'] def _build_insert_sql(self, table, *values): assert(self.tables.has_key(table)) assert(len(values) == len(self.get_fields(table))) sql = "INSERT INTO %s(oid" % table for f in self.get_fields(table): sql = sql + ", %s" % f sql = sql + ") VALUES (" #add None to values so that oid autoincrements values = (None,) + values #add ? for each value (including oid), strip last , sql = sql + ("?, "*len(values))[0:-2] + ")" return sql,values def _build_update_sql(self, table, oid, *values, **kwargs): assert(self.tables.has_key(table)) if len(kwargs) > 0: values = kwargs.values() fields = kwargs.keys() else: fields = self.get_fields(table) assert( len(values) == len(fields) ) sql = "UPDATE %s SET " % table for f in fields: sql = sql + "%s=?," % f #strip trailing , sql = sql[0:-1] + " " sql = sql + "WHERE oid = %s" % oid return sql, values def _build_create_sql(self, table, fields, fieldtypes): #the default type is TEXT if len(fieldtypes) == 0: fieldtypes = ('TEXT',) * len(fields) sql = "CREATE TABLE %s (oid INTEGER PRIMARY KEY AUTOINCREMENT" % table for i in range(0,len(fields)): sql = sql + ", %s %s" % (fields[i],fieldtypes[i]) sql = sql + ")" return sql def execute(self, sql, args=()): if self.DEBUG: log.debug(sql) self.cur.execute(sql, args) def select(self, sql, args=()): self.execute(sql, args) for raw in self.cur: yield raw def select_one(self, sql, args=()): for i in self.select(sql, args): return i def create(self, table, fields=(), fieldtypes=()): sql = self._build_create_sql(table, fields, fieldtypes) self.execute(sql) #save the field names self.tables[table] = fields def insert(self, table, values=()): sql,values = self._build_insert_sql(table, *values) self.execute(sql, values) self.emit("row-inserted",int(self.cur.lastrowid)) return self.cur.lastrowid def update(self, table, oid, values=(), **kwargs): sql, values = self._build_update_sql(table, oid, *values, **kwargs) self.execute(sql, values) self.emit("row-modified", int(oid)) def delete(self, table, oid): assert(self.tables.has_key(table)) self.emit("row-deleted", int(oid)) sql = "DELETE from %s where oid=?" % table self.execute(sql,(oid,)) def save(self): self.db.commit() def close(self): self.cur.close() self.db.close() def debug(self, width=70, printoid=True): for table in self.tables: fields = self.get_fields(table) #Decide whether to print the oid or not if printoid: fields = ('oid',) + tuple(fields) fieldIndices = range(0, len(fields)) else: fieldIndices = range(1, len(fields)) MAX_WIDTH = width FIELD_MAX_WIDTH = MAX_WIDTH/len(fields) # Print a header. padding = '-'*MAX_WIDTH print padding + "\nTABLE: %s\n" % table + padding for field in fields: print field.ljust(FIELD_MAX_WIDTH) , print "\n" + padding # For each row, print the value of each field left-justified within # the maximum possible width of that field. for row in self.select("SELECT * from %s" % table): for fieldIndex in fieldIndices: fieldValue = str(row[fieldIndex]) print fieldValue.ljust(FIELD_MAX_WIDTH) , print def get_fields(self, table): """ Returns the number of fields in the table EXCLUDING oid """ assert(self.tables.has_key(table)) return self.tables[table] def get_tables(self): return self.tables.keys() class ThreadSafeGenericDB(Thread, GenericDB): """ Threadsafe wrapper around GenericDB Abstraction layer. Serializes all requests into one thread using a queue """ def __init__(self, filename=":memory:", **kwargs): GenericDB.__init__(self,filename,**kwargs) Thread.__init__(self) self.reqs=Queue() self.stopped = False self.start() def _open(self): #open the db in the thread where it is used pass def _get_tables(self): db = sqlite.connect(self.filename) cur = db.cursor() #get the field names for all tables for name, in cur.execute("SELECT name FROM sqlite_master WHERE type='table' and name != 'sqlite_sequence'"): self.tables[str(name)] = [row[1] for row in cur.execute("PRAGMA table_info('%s')" % name) if row[1] != 'oid'] def run(self): GenericDB._open(self) self.broken = False while not self.stopped: req, args, res, operation = self.reqs.get() if req=='--stop--': self.stopped = True elif req=='--save--': self.db.commit() else: try: self.cur.execute(req, args) except sqlite.ProgrammingError: log.critical("sqlite syntax error: %s" % req, exc_info=True) self.stopped = True self.broken = True except: log.critical("unknown sqlite error", exc_info=True) self.stopped = True self.broken = True #res is used to return a result to the caller #in a blocking way if res: if operation == "SELECT": for rec in self.cur: res.put(rec) res.put('--no more--') elif operation == "INSERT": res.put(self.cur.lastrowid) else: assert(False) if not self.broken: self.cur.close() self.db.close() def execute(self, req, args=(), res=None, operation=""): if self.DEBUG: log.debug(req) if not self.stopped: self.reqs.put((req, args, res, operation)) def select(self, req, args=()): res=Queue() self.execute(req, args, res, "SELECT") while not self.stopped: rec=res.get() if rec=='--no more--': break yield rec def close(self): self.execute('--stop--') def save(self): self.execute('--save--') def insert(self, table, values=()): sql,values = self._build_insert_sql(table, *values) res=Queue() self.execute(sql, values, res, "INSERT") while not self.stopped: newId = res.get() self.emit("row-inserted",int(newId)) return newId conduit-0.3.17/conduit/defs.py.in0000644000175000017500000000063311321403566013540 00000000000000VERSION = "@VERSION@" PYTHONDIR = "@PYTHONDIR@" BIN_DIR = "@BINDIR@" LIB_DIR = "@LIBDIR@" LOCALE_DIR = "@LOCALEDIR@" SHARED_DATA_DIR = "@PKGDATADIR@" SHARED_MODULE_DIR = "@MODULEDIR@" DESKTOP_FILE_DIR = "@DESKTOPFILEDIR@" # # Platform specific implementations # #{GIO, Python} FILE_IMPL = "@FILE_IMPL@" #{gtkmozembed, webkit, system} BROWSER_IMPL = "@BROWSER_IMPL@" #{GConf,Python} SETTINGS_IMPL = "GConf" conduit-0.3.17/conduit/hildonui/0000777000175000017500000000000011326117104013530 500000000000000conduit-0.3.17/conduit/hildonui/Makefile.am0000644000175000017500000000021611172176633015512 00000000000000conduitdir = $(pythondir)/conduit/hildonui conduit_PYTHON = \ Canvas.py \ List.py \ __init__.py \ UI.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/hildonui/List.py0000644000175000017500000001171511172176633014751 00000000000000import gtk import logging log = logging.getLogger("hildonui.List") import conduit class DataProviderBox(gtk.VBox): DND_TARGETS = [ ('conduit/element-name', 0, 0) ] def __init__(self): gtk.VBox.__init__(self) # MODEL # keep a dict of category - dp list self.categories = {} self.combo = gtk.combo_box_new_text () self.dp_store = gtk.ListStore(gtk.gdk.Pixbuf, str, str) # populate with dataproviders self.add_dataproviders( conduit.GLOBALS.moduleManager.get_modules_by_type("source","sink","twoway") ) conduit.GLOBALS.moduleManager.connect("dataprovider-available", self.on_dataprovider_available) conduit.GLOBALS.moduleManager.connect("dataprovider-unavailable", self.on_dataprovider_unavailable) # VIEW # category combo self.combo.connect ("changed", self.on_combo_changed) self.pack_start(self.combo, False, False) # tree view self.tree = gtk.TreeView (self.dp_store) col = gtk.TreeViewColumn() render_pixbuf = gtk.CellRendererPixbuf() col.pack_start(render_pixbuf, expand=False) col.add_attribute(render_pixbuf, 'pixbuf', 0) render_text = gtk.CellRendererText() col.pack_start(render_text, expand=True) col.add_attribute(render_text, 'text', 1) self.tree.append_column (col) # Dnd self.tree.enable_model_drag_source( gtk.gdk.BUTTON1_MASK, self.DND_TARGETS, gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_MOVE) self.tree.drag_source_set( gtk.gdk.BUTTON1_MASK | gtk.gdk.BUTTON3_MASK, self.DND_TARGETS, gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_LINK) #self.connect('drag-begin', self.on_drag_begin) self.tree.connect('drag-data-get', self.on_drag_data_get) self.tree.connect('drag-data-delete', self.on_drag_data_delete) self.pack_start(self.tree, True, True) def on_dataprovider_available(self, loader, dataprovider): if dataprovider.enabled: self.add_dataprovider (dataprovider) def on_dataprovider_unavailable (self, loader, dataprovider): self.remove_dataprovider (dataprovider) def add_dataproviders(self, dpw=[]): """ Adds all enabled dataproviders to the model """ #Only display enabled modules module_wrapper_list = [m for m in dpw if m.enabled] #Add them to the module for mod in module_wrapper_list: self.add_dataprovider(mod) def add_dataprovider (self, dpw): """ Adds a new dataprovider """ log.debug("Adding dataprovider %s to List" % dpw) category_name = dpw.category.name if not self.categories.has_key(category_name): self.combo.append_text (category_name) self.categories[category_name] = [dpw] else: self.categories[category_name].append (dpw) self.reload_category_if_current(category_name) def remove_dataprovider (self, dpw): """ Remove dataprovider """ category_name = dpw.category.name if not self.categories.has_key (category_name): return self.categories[category_name].remove(dpw) self.reload_category_if_current (category_name) def on_combo_changed (self, combo): """ Reload the category if the combo changes """ self.reload_category () def on_drag_data_get (self, treeview, context, selection, target_id, etime): treeselection = treeview.get_selection() model, iter = treeselection.get_selected() #get the classname data = model.get_value(iter, 2) log.debug("Dragging %s" % data) selection.set(selection.target, 8, data) def on_drag_data_delete (self, context, etime): """ DnD magic. do not touch """ self.tree.emit_stop_by_name('drag-data-delete') def get_current_category (self): """ Return the currently selected category name """ iter = self.combo.get_active_iter () if not iter: return None return self.combo.get_model().get_value (iter, 0) def reload_category_if_current (self, category_name): """ Only reloads the category if the given name is the current one """ if category_name == self.get_current_category(): self.reload_category() def reload_category (self): """ Reloads the current category """ category_name = self.get_current_category() log.info("Loading category: %s" % category_name) self.dp_store.clear() for dp in self.categories[category_name]: self.dp_store.append ((dp.get_descriptive_icon(), dp.name, dp.get_key())) conduit-0.3.17/conduit/hildonui/UI.py0000644000175000017500000001732011172176633014351 00000000000000#!/usr/bin/env python2.5 import gtk import hildon import os import logging log = logging.getLogger("hildonui.UI") import conduit from conduit.hildonui.List import DataProviderBox # FIXME: we probably should share some code between these two from conduit.hildonui.Canvas import Canvas from gettext import gettext as _ class MainWindow(hildon.Program): def __init__(self, conduitApplication, moduleManager, typeConverter, syncManager): hildon.Program.__init__(self) #add some additional dirs to the icon theme search path so that #modules can provider their own icons icon_dirs = [ conduit.SHARED_DATA_DIR, conduit.SHARED_MODULE_DIR, os.path.join(conduit.SHARED_DATA_DIR,"icons"), os.path.join(conduit.USER_DIR, "modules") ] for i in icon_dirs: gtk.icon_theme_get_default().prepend_search_path(i) log.debug("Adding %s to icon theme search path" % (i)) self.conduitApplication = conduitApplication self.type_converter = typeConverter self.sync_manager = syncManager self.syncSet = None self.mainWindow = hildon.Window() self.mainWindow.set_icon_name("conduit") # self.mainWindow.resize (800, 480) self.mainWindow.connect("destroy", self.on_window_destroyed) self.add_window(self.mainWindow) self.provider_box = DataProviderBox () self.provider_box.combo.set_active (0) # FIXME: we should do something hildon specific self.canvas = Canvas( parentWindow=self.mainWindow, typeConverter=self.type_converter, syncManager=self.sync_manager) self.canvas.connect('drag-drop', self.drop_cb) self.canvas.connect("drag-data-received", self.drag_data_received_data) main_pane = gtk.HPaned () main_pane.add1(self.provider_box) main_pane.add2(self.canvas) self.mainWindow.add(main_pane) def set_model(self, syncSet): self.syncSet = syncSet self.toolbar = ConduitToolbar(self.syncSet, self.canvas) self.canvas.set_sync_set(syncSet) self.set_common_toolbar(self.toolbar) def present(self): """ Present the main window. Enjoy your window """ self.mainWindow.show_all () def minimize_to_tray(self): """ Iconifies the main window """ log.debug("Iconifying GUI") self.mainWindow.hide() def is_visible(self): """ Dummy for now """ return True def drop_cb(self, wid, context, x, y, time): """ drop cb """ self.canvas.drag_get_data(context, context.targets[0], time) return True def drag_data_received_data(self, treeview, context, x, y, selection, info, etime): """ DND """ dataproviderKey = selection.data #FIXME: DnD should be cancelled in the Treeview on the drag-begin #signal and NOT here if dataproviderKey != "": #Add a new instance if the dataprovider to the canvas. new = conduit.GLOBALS.moduleManager.get_module_wrapper_with_instance(dataproviderKey) self.canvas.add_dataprovider_to_canvas(dataproviderKey, new, x, y) context.finish(True, True, etime) return def on_window_destroyed(self, widget, event=None): """ Check if there are any synchronizations currently in progress and ask the user if they wish to cancel them """ busy = False quit = False if self.syncSet: for c in self.syncSet.get_all_conduits(): if c.is_busy(): busy = True if busy: dialog = gtk.MessageDialog( self.mainWindow, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO,_("Synchronization in progress. Do you want to cancel it?") ) response = dialog.run() if response == gtk.RESPONSE_YES: quit = True else: #Dont exit dialog.destroy() return True else: quit = True #OK, if we have decided to quit then call quit on the #DBus interface which will tidy up any pending running #non gui tasks if quit: log.debug("Quitting...") self.conduitApplication.Quit() def save_settings(self, widget): pass class ConduitToolbar(gtk.Toolbar): def __init__(self, syncSet, canvas): gtk.Toolbar.__init__(self) self.syncSet = syncSet # canvas self.canvas = canvas self.canvas.connect("position-changed", self.on_position_changed) # remove conduit button self.remove_button = gtk.ToolButton(gtk.STOCK_REMOVE) self.remove_button.connect("clicked", self.on_remove) # save settings button self.save_button = gtk.ToolButton(gtk.STOCK_SAVE) self.save_button.connect("clicked", self.on_settings_save) # sync all button image_widget = gtk.image_new_from_icon_name("conduit", 24) self.sync_button = gtk.ToolButton(icon_widget=image_widget) self.sync_button.connect("clicked", self.on_sync_all) # moving self.previous_button = gtk.ToolButton(gtk.STOCK_GO_BACK) self.previous_button.connect("clicked", self.on_previous) self.label = gtk.Label("0/0") self.next_button = gtk.ToolButton(gtk.STOCK_GO_FORWARD) self.next_button.connect("clicked", self.on_next) # add all items self.add_item (self.remove_button) self.add_item (gtk.SeparatorToolItem()) self.add_item (self.previous_button) self.add_item (self._create_toolitem(self.label)) self.add_item (self.next_button) self.add_item (gtk.SeparatorToolItem()) self.add_item (self.sync_button) self.add_item (self.save_button) self.show_all () def add_item(self, item): self.insert (item, -1) def on_remove (self, button): current = self.canvas.selectedConduitItem.model if not current: return self.syncSet.remove_conduit(current) def on_settings_save (self, button): self.syncSet.save_to_xml() def on_sync_all (self, button): self.conduitApplication.Synchronize() def on_previous (self, button): self.canvas.move_previous() def on_next (self, button): self.canvas.move_next() def on_position_changed(self, canvas): self.label.set_text (canvas.get_position_str()) def _create_toolitem (self, widget): toolitem = gtk.ToolItem() toolitem.add (widget) return toolitem class SplashScreen: def __init__(self): pass def show(self): pass def destroy(self): pass class StatusIcon: def __init__(self, conduitApplication): pass def on_conduit_added(self, syncset, cond): pass def on_conduit_removed(self, syncset, cond): pass def on_click(self, status): if self.conduitApplication.HasGUI(): if self.conduitApplication.gui.is_visible(): self.conduitApplication.gui.minimize_to_tray() else: self.conduitApplication.gui.present() else: self.conduitApplication.BuildGUI() self.conduitApplication.ShowGUI() conduit-0.3.17/conduit/hildonui/Canvas.py0000644000175000017500000003373711172176633015261 00000000000000""" Manages adding, removing, resizing and drawing the canvas The Canvas is the main area in Conduit, the area to which DataProviders are dragged onto. Copyright: John Stowers, 2006 Copyright: Thomas Van Machelen, 2007 License: GPLv2 """ import gobject import gtk import logging log = logging.getLogger("hildonui.Canvas") import conduit.gtkui.Canvas import conduit.gtkui.Util as GtkUtil LINE_WIDTH = 3.0 class Canvas(conduit.gtkui.Canvas.Canvas, gobject.GObject): """ This class manages many objects """ __gsignals__ = { "position-changed" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, []) # The canvas } def __init__(self, parentWindow, typeConverter, syncManager): """ Draws an empty canvas of the appropriate size """ #setup the canvas conduit.gtkui.Canvas.Canvas.__init__(self, parentWindow,typeConverter,syncManager, None,None, #menus are set in _setup_popup_menus None #no message hints in hildon ) self.position = -1 def _update_for_theme(self, *args): pass def _setup_popup_menus(self, dataproviderPopupXML, conduitPopupXML): # dp context menu self.dataproviderMenu = DataProviderMenu(self) # conduit context menu self.conduitMenu = ConduitMenu(self) def _resize_welcome(self, width): self.welcome.set_properties( x=width/2, y=width/3, width=3*width/5 ) def _create_welcome(self): c_x,c_y,c_w,c_h = self.get_bounds() self.welcome = goocanvas.Text( x=c_w/2, y=c_w/3, width=3*c_w/5, text=self.WELCOME_MESSAGE, anchor=gtk.ANCHOR_CENTER, alignment=pango.ALIGN_CENTER, font="Sans 10", fill_color="black", ) self.root.add_child(self.welcome,-1) def _on_conduit_button_press(self, view, target, event): log.debug("Clicked View: %s" % view.model) #single left click if event.type == gtk.gdk.BUTTON_PRESS and event.button == 1: if not view.model.is_busy(): self.conduitMenu.popup(None, None, None, event.button, event.time) #dont propogate the event return True def _on_dataprovider_button_press(self, view, target, event): """ Handle button clicks @param user_data_dataprovider_wrapper: The dpw that was clicked @type user_data_dataprovider_wrapper: L{conduit.Module.ModuleWrapper} """ log.debug("Clicked View: %s" % view.model) self.selectedDataproviderItem = view #single left click if event.type == gtk.gdk.BUTTON_PRESS and event.button == 1: if view.model.enabled and not view.model.module.is_busy(): self.dataproviderMenu.configureMenuItem.set_property("sensitive", view.model.configurable) self.dataproviderMenu.popup(None, None, None, event.button, event.time) #dont propogate the event return True def on_conduit_added(self, sender, conduitAdded): """ Creates a ConduitCanvasItem for the new conduit """ log.debug("Conduit added %s" % conduitAdded) self.set_position(self.model.index(conduitAdded)) def on_conduit_removed(self, sender, conduitRemoved): self.move_previous () def on_dataprovider_removed(self, sender, dataproviderRemoved, conduitCanvasItem): for item in self._get_child_dataprovider_canvas_items(): if item.model == dataproviderRemoved: conduitCanvasItem.delete_dataprovider_canvas_item(item) self._remove_overlap() def on_dataprovider_added(self, sender, dataproviderAdded, conduitCanvasItem): #check for duplicates to eliminate race condition in set_sync_set if dataproviderAdded in [i.model for i in self._get_child_dataprovider_canvas_items()]: return item = DataProviderCanvasItem( parent=conduitCanvasItem, model=dataproviderAdded ) item.connect('button-press-event', self._on_dataprovider_button_press) conduitCanvasItem.add_dataprovider_canvas_item(item) self._remove_overlap() def set_sync_set(self, syncSet): conduit.gtkui.Canvas.Canvas.set_sync_set(self, syncSet) if len(self.model.get_all_conduits()) > 0: self.set_position(0) def move_next(self): """ Moves the canvas to the next conduit """ self.set_position(self.position + 1) def move_previous(self): """ Moves the canvas to the previous conduit """ self.set_position(self.position - 1) def set_position (self, index): """ Sets the Canvas position to the index provided """ nr_of_conduits = self.model.num_conduits() if index > nr_of_conduits: return # get the old one if self.position == index: return # set new index self.position = index log.debug("Current position %d, Lenght: %d" % (self.position, nr_of_conduits)) # position cycling if self.position == nr_of_conduits: self.position = 0 elif self.position < 0: self.position = nr_of_conduits - 1 self._refresh_current_item() self.emit("position-changed") def get_position (self): """ Gets the position """ return self.position def get_position_str(self): """ Gets the position representation """ return "%s/%s" % (self.position + 1, self.model.num_conduits()) def _refresh_current_item(self): """ Refreshes the current item; only in drawing, not the conduit """ self._remove_current_item() try: conduit = self.model.get_conduit(self.position) self._create_item_for_conduit (conduit) except: self._show_welcome_message() def _remove_current_item (self): """ Clears the current conduit from the Canvas """ currentItem = self._get_child_conduit_canvas_item() if not currentItem: return #remove the canvas item idx = self.root.find_child(currentItem) if idx != -1: self.root.remove_child(idx) else: log.warn("Error finding item") self._remove_overlap() self._show_welcome_message() def _create_item_for_conduit (self, conduit): c_x,c_y,c_w,c_h = self.get_bounds() #Create the item and move it into position bottom = self._get_bottom_of_conduits_coord() conduitCanvasItem = ConduitCanvasItem( parent=self.root, model=conduit, width=c_w) conduitCanvasItem.translate( LINE_WIDTH/2.0, bottom+(LINE_WIDTH/2.0) ) # keep ref self.selectedConduitItem = conduitCanvasItem #FIXME Evilness to fix ConduitCanvasItems ending up too big (scrollbars suck!) #self.set_size_request(self.CANVAS_WIDTH, self.CANVAS_HEIGHT) #self.set_size_request(self.CANVAS_WIDTH, self.CANVAS_HEIGHT) conduitCanvasItem.connect('button-press-event', self._on_conduit_button_press) for dp in conduit.get_all_dataproviders(): self.on_dataprovider_added(None, dp, conduitCanvasItem) conduit.connect("dataprovider-added", self.on_dataprovider_added, conduitCanvasItem) conduit.connect("dataprovider-removed", self.on_dataprovider_removed, conduitCanvasItem) self._show_welcome_message() def _get_child_conduit_canvas_items(self): items = [] for i in range(0, self.root.get_n_children()): condItem = self.root.get_child(i) if isinstance(condItem, ConduitCanvasItem): items.append(condItem) return items def _get_child_conduit_canvas_item(self): for i in range(0, self.root.get_n_children()): condItem = self.root.get_child(i) if isinstance(condItem, ConduitCanvasItem): return condItem return None def _get_child_dataprovider_canvas_items(self): items = [] conduitItem = self._get_child_conduit_canvas_item() if conduitItem: for i in range(0, conduitItem.get_n_children()): dpItem = conduitItem.get_child(i) if isinstance(dpItem, DataProviderCanvasItem): items.append(dpItem) return items # def on_two_way_sync_toggle(self, widget): # """ # Enables or disables two way sync on dataproviders. # """ # if widget.get_active(): # self.selectedConduitItem.model.enable_two_way_sync() # else: # self.selectedConduitItem.model.disable_two_way_sync() # def on_slow_sync_toggle(self, widget): # """ # Enables or disables slow sync of dataproviders. # """ # if widget.get_active(): # self.selectedConduitItem.model.enable_slow_sync() # else: # self.selectedConduitItem.model.disable_slow_sync() class DataProviderCanvasItem(conduit.gtkui.Canvas.DataProviderCanvasItem): WIDGET_WIDTH = 160 WIDGET_HEIGHT = 85 LINE_WIDTH = 3.0 def get_styled_item_names(self): return () def get_style_properties(self, specifier): if specifier == "box": #color the box differently if it is pending if self.model.module == None: color = GtkUtil.TANGO_COLOR_BUTTER_LIGHT else: if self.model.module_type == "source": color = GtkUtil.TANGO_COLOR_ALUMINIUM1_MID elif self.model.module_type == "sink": color = GtkUtil.TANGO_COLOR_SKYBLUE_LIGHT elif self.model.module_type == "twoway": color = GtkUtil.TANGO_COLOR_BUTTER_MID else: color = None kwargs = { "line_width":LINE_WIDTH, "stroke_color":"black", "fill_color_rgba":color } elif specifier == "name": kwargs = { "font":"Sans 8" } elif specifier == "statusText": kwargs = { "font":"Sans 7", "fill_color_rgba":GtkUtil.TANGO_COLOR_ALUMINIUM2_MID } return kwargs class ConduitCanvasItem(conduit.gtkui.Canvas.ConduitCanvasItem): BUTTONS = False FLAT_BOX = False DIVIDER = False LINE_WIDTH = 3.0 def get_styled_item_names(self): return () def get_style_properties(self, specifier): if specifier == "boundingBox": kwargs = { "line_width":LINE_WIDTH, "fill_color_rgba":GtkUtil.TANGO_COLOR_ALUMINIUM1_LIGHT, "stroke_color":"black" } elif specifier == "progressText": kwargs = { "font":"Sans 7", "fill_color":"black" } else: kwargs = {} return kwargs class ConnectorCanvasItem(conduit.gtkui.Canvas.ConnectorCanvasItem): def get_styled_item_names(self): return () def get_style_properties(self, specifier): if specifier == "left_end_round": kwargs = { "fill_color":"black" } elif specifier in ("left_end_arrow", "right_end", "path"): kwargs = { "stroke_color":"black" } else: kwargs = {} return kwargs class ContextMenu(gtk.Menu): def __init__(self): gtk.Menu.__init__(self) def _add_menu_item (self, text, activate_cb): item = gtk.MenuItem(text) item.connect("activate", activate_cb) self.append(item) return item class ConduitMenu(ContextMenu): def __init__(self, canvas): ContextMenu.__init__(self) self.canvas = canvas self._add_menu_item("Refresh", self._on_conduit_refresh) self._add_menu_item("Synchronize", self._on_conduit_sync) self.show_all() def _on_conduit_refresh(self, menuItem): conduit = self.canvas.selectedConduitItem.model conduit.refresh() def _on_conduit_sync(self, menuItem): conduit = self.canvas.selectedConduitItem.model conduit.sync() class DataProviderMenu(ContextMenu): def __init__(self, canvas): ContextMenu.__init__(self) self.canvas = canvas self.configureMenuItem = self._add_menu_item("Configure", self._on_configure_activate) self._add_menu_item("Refresh", self._on_refresh_activate) self.append(gtk.SeparatorMenuItem()) self._add_menu_item("Delete", self._on_delete_activate) self.show_all() def _on_configure_activate(self, menuItem): dp = self.canvas.selectedDataproviderItem.model.module log.debug("Configuring %s " % dp) dp.configure(self.canvas.parentWindow) def _on_refresh_activate(self, menuItem): dp = self.canvas.selectedDataproviderItem.model cond = self.canvas.selectedConduitItem.model cond.refresh_dataprovider(dp) def _on_delete_activate(self, menuItem): dp = self.canvas.selectedDataproviderItem.model cond = self.canvas.selectedConduitItem.model cond.delete_dataprovider(dp) conduit-0.3.17/conduit/hildonui/Makefile.in0000644000175000017500000003203311326116726015523 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/hildonui DIST_COMMON = $(conduit_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduitdir)" py_compile = $(top_srcdir)/py-compile DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ conduitdir = $(pythondir)/conduit/hildonui conduit_PYTHON = \ Canvas.py \ List.py \ __init__.py \ UI.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/hildonui/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/hildonui/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduitPYTHON: $(conduit_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduitdir)" || $(MKDIR_P) "$(DESTDIR)$(conduitdir)" @list='$(conduit_PYTHON)'; dlist=; list2=; test -n "$(conduitdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduitdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduitdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduitdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduitdir)" $$dlist; \ fi; \ else :; fi uninstall-conduitPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_PYTHON)'; test -n "$(conduitdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduitdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduitdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduitdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduitdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduitdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduitdir)" && rm -f $$fileso tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(conduitdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-conduitPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-conduitPYTHON .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-conduitPYTHON \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am uninstall-conduitPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/hildonui/__init__.py0000644000175000017500000000000011172176633015556 00000000000000conduit-0.3.17/conduit/Exceptions.py0000644000175000017500000000421711172176633014343 00000000000000""" Exceptions used to convey information during the sync process Copyright: John Stowers, 2006 License: GPLv2 """ class ConversionError(Exception): """ Exception thrown by TypeConverter when it could not convert stuff due to an error in the conversion function """ def __init__(self, fromType, toType): self.fromType = fromType self.toType = toType Exception.__init__(self, "Could not convert: %s -> %s" % (self.fromType, self.toType) ) class ConversionDoesntExistError(Exception): """ Thrown when the typeconverter tries a conversion that does not exist """ def __init__(self, fromType, toType): self.fromType = fromType self.toType = toType Exception.__init__(self, "No conversion exists: %s -> %s" % (self.fromType, self.toType) ) class RefreshError(Exception): """ Exception thrown upon failure to refresh conduit """ pass class NotSupportedError(Exception): """ Exception thrown when a dataprovider cannot be loaded """ pass class SyncronizeError(Exception): """ Non-fatal, i.e. dont stop the whole sync process, just ignore this one particular attempt to get() a resource as failed """ pass class SyncronizeFatalError(Exception): """ Fatal error returned from sync. Do not attempt again """ pass class SynchronizeConflictError(Exception): """ Raised in the put() method when the input data conflicts with data already present and user intervention is needed to resolve """ def __init__(self, comparison, fromData, toData): self.comparison = comparison self.fromData = fromData self.toData = toData Exception.__init__(self, "Comparison=%s (From: %s, To:%s)" % (self.comparison, self.fromData, self.toData) ) class StopSync(Exception): """ Raised by the syncworker to tell the syncmanager to stop """ def __init__(self, step=0): self.step = step Exception.__init__(self, "Synchronization aborted at step %s" % self.step ) conduit-0.3.17/conduit/Configurator.py0000644000175000017500000000513411172176633014663 00000000000000""" Configuration interfaces Copyright: Alexandre Rosenfeld, 2009 License: GPLv2 """ import os.path import gobject import logging log = logging.getLogger("conduit.Configutator") from gettext import gettext as _ import conduit class BaseConfigContainer(gobject.GObject): """ Base configuration container class. """ __gsignals__ = { # Changed is called when the user modifies anything in the # configuration dialog. The bool property is True if the values # are in their initial state 'changed': (gobject.SIGNAL_RUN_FIRST, None, [bool]), 'apply': (gobject.SIGNAL_RUN_FIRST, None, []), 'cancel': (gobject.SIGNAL_RUN_FIRST, None, []), 'show': (gobject.SIGNAL_RUN_FIRST, None, []), 'hide': (gobject.SIGNAL_RUN_FIRST, None, []), } def __init__(self, dataprovider, configurator): gobject.GObject.__init__(self) self.showing = False self.dataprovider = dataprovider self.configurator = configurator self.name = None self.icon = None def get_name(self): ''' Returns the name for this container ''' #FIXME: This doesnt work, the dataprovider does not have a name, it's # module wrapper does. This is fixed by a hack inside the Canvas, by # assigning the name there, which is not ideal. return self.name or self.dataprovider and self.dataprovider.get_name() def get_icon(self): ''' Returns a path to this configurator icon ''' #FIXME: This doesnt work, the dataprovider does not have an icon, it's # module wrapper does. This is fixed by a hack inside the Canvas, by # assigning the icon there, which is not ideal. return self.icon or self.dataprovider and self.dataprovider.get_icon() def get_config_widget(self): ''' Returns the root configuration widget ''' pass def show(self): ''' Show the configuration widget ''' self.emit('show') self.showing = True def hide(self): ''' Hide the configuration widget ''' self.emit('hide') self.showing = False def apply_config(self): ''' Save the current configuration state to the dataprovider. ''' self.emit('apply') def cancel_config(self): ''' Cancel the configuration, reverting any changes the user might have done ''' self.emit('cancel') def is_modified(self): return False conduit-0.3.17/conduit/TypeConverter.py0000644000175000017500000002160211172176633015030 00000000000000""" Holds the TypeConverter class Copyright: John Stowers, 2006 License: GPLv2 """ import traceback import logging log = logging.getLogger("TypeConverter") import conduit.Exceptions as Exceptions import conduit.utils as Utils class Converter: _module_type_ = "converter" class TypeConverter: """ Maintains a dictionary of dictionaries, indexed by the type converted FROM which maps to a list of types that can be converted TO An example statically constructed conversion dictionary is:: self.convertables = { "from1" : { "to1":from1_to_to1_converter, "to2":from1_to_to2_converter }, "from2" : { "to3":from2_to_to3_converter, "to1":from2_to_to1_converter }, "from3" : { "to5":from3_to_to5_converter } } @ivar convertables: The name of the contained module @type convertables: C{dict of dicts}, see description in L{conduit.TypeConverter.TypeConverter} """ def __init__ (self, moduleManager): """ Builds the conversion dictionary @param dynamic_modules: The dynamically loaded converters """ #dict of dict of conversion functions self.convertables = {} moduleManager.make_modules_callable("converter") dynamic_modules = moduleManager.get_modules_by_type("converter") for d in dynamic_modules: self._add_converter(d) def _add_converter(self, converterWrapper): conv = getattr(converterWrapper.module,"conversions", {}) for c in conv: try: #Conversions are described as fromtype,totype fromtype = c.split(',')[0] totype = c.split(',')[1] #if the from source doesnt yet exist add an inner dict #containing the FROM type and conversion function if not self.convertables.has_key(fromtype): self.convertables[fromtype] = {totype:conv[c]} #Otherwise we already have an inner dict so can go #ahead and insert a new TO type and conversion function else: self.convertables[fromtype][totype] = conv[c] except IndexError: log.warn("Conversion dict (%s) wrong format. Should be fromtype,totype" % c) except KeyError, err: log.warn("Could not add conversion function from %s to %s\n%s" % (fromtype,totype,err)) except Exception: log.warn("BAD PROGRAMMER") def _retain_info_in_conversion(self, fromdata, todata): """ Retains the original datatype properties through a type conversion. Properties retained include; - gnome-open'able URI - modification time - original UID Call this function from a typeconverter """ if todata == None: log.warn("Conversion from %s returned None" % (fromdata)) else: todata.set_mtime(fromdata.get_mtime()) todata.set_open_URI(fromdata.get_open_URI()) todata.set_UID(fromdata.get_UID()) return todata def _get_conversions(self, from_type, to_type): """ Returns the conversions required fromtype -> totype. Considers if fromtype and/or totype are super/subclasses of each other. The args string is always taken from the destination, i.e. the totype. Does not check if the conversion actually exists. @returns: list of (fromtype, totype, args) tuples """ conversions = [] args = {} fromType = from_type toType = to_type #remove the args string of present at source try: fromType = from_type.split("?")[0] except ValueError: pass #args string is only considered for the destination try: toType,argString = to_type.split("?") args = Utils.decode_conversion_args(argString) except ValueError: pass if fromType != toType: #check first for and explicit conversion if self._conversion_exists(fromType, toType): conversions.append( (fromType, toType, args) ) else: froms = fromType.split("/") tos = toType.split("/") if froms[0] == tos[0]: #same base type, so only convert parent -> child e.g. #file/audio -> file = file -> file #file -> file/audio = file -> file/audio conversions.append( (froms[0],"/".join(tos),args) ) else: #different base type, e.g. #foo/bar -> bar/baz if len(tos) > 1: #Two conversions are needed, a main type, and a subtype #conversion. remains is any necessary subtype conversion conversions.append( (froms[0], tos[0], {}) ) conversions.append( (tos[0],"/".join(tos),args) ) else: #Just a main type conversion is needed (remember the args) conversions.append( (froms[0], tos[0], args) ) else: conversions.append( (fromType, toType, args) ) return conversions def _conversion_exists(self, from_type, to_type): if self.convertables.has_key(from_type): if self.convertables[from_type].has_key(to_type): return True return False def _convert(self, conversions, data): if data and len(conversions) > 0: from_type, to_type, args = conversions[0] message = "Converting" if from_type == to_type: message = "Transcoding" #No conversion needed, or module does not supply transcode. if args == {} or not self._conversion_exists(from_type, to_type): log.debug("Skipping %s -> %s" % (from_type, to_type)) return data log.debug("%s %s -> %s (args: %s)" % (message, from_type, to_type, args)) try: #recurse return self._convert( conversions[1:], self.convertables[from_type][to_type](data, **args) ) except Exception: log.debug(traceback.format_exc()) raise Exceptions.ConversionError(from_type, to_type) else: return data def conversion_exists(self, from_type, to_type): """ Checks if all conversion(s) exists to convert from from_type into to_type """ for f,t,a in self._get_conversions(from_type, to_type): if f != t and not self._conversion_exists(f,t): log.debug("Conversions %s -> %s doesnt exist" % (f,t)) return False return True def convert(self, from_type, to_type, data): """ Converts a L{conduit.DataType.DataType} (or derived) of type from_type into to_type and returns that newly converted type. If no conversion is needed, the original data is returned. @param from_type: The name of the type converted from @type from_type: C{string} @param to_type: The name of the type to convert to @type to_type: C{string} @param data: The DataType to convert @type data: L{conduit.DataType.DataType} """ conversions = self._get_conversions(from_type, to_type) log.debug("Convert %s -> %s using %s" % (from_type, to_type, conversions)) if self.conversion_exists(from_type, to_type): #recursively perform the needed conversions newdata = self._convert(conversions, data) else: raise Exceptions.ConversionDoesntExistError(from_type, to_type) return self._retain_info_in_conversion(fromdata=data, todata=newdata) def get_convertables_list(self): """ Returns a list of 2-tuples specifying conversions (from->to) """ l = [] for froms in self.convertables: for tos in self.convertables[froms]: l.append( (froms, tos) ) return l conduit-0.3.17/conduit/gtkui/0000777000175000017500000000000011326117104013040 500000000000000conduit-0.3.17/conduit/gtkui/Util.py0000644000175000017500000000522211172176633014257 00000000000000import gtk.gdk # # Tango colors taken from # http://tango.freedesktop.org/Tango_Icon_Theme_Guidelines # TANGO_COLOR_BUTTER_LIGHT = int("fce94fff",16) TANGO_COLOR_BUTTER_MID = int("edd400ff",16) TANGO_COLOR_BUTTER_DARK = int("c4a000ff",16) TANGO_COLOR_ORANGE_LIGHT = int("fcaf3eff",16) TANGO_COLOR_ORANGE_MID = int("f57900",16) TANGO_COLOR_ORANGE_DARK = int("ce5c00ff",16) TANGO_COLOR_CHOCOLATE_LIGHT = int("e9b96eff",16) TANGO_COLOR_CHOCOLATE_MID = int("c17d11ff",16) TANGO_COLOR_CHOCOLATE_DARK = int("8f5902ff",16) TANGO_COLOR_CHAMELEON_LIGHT = int("8ae234ff",16) TANGO_COLOR_CHAMELEON_MID = int("73d216ff",16) TANGO_COLOR_CHAMELEON_DARK = int("4e9a06ff",16) TANGO_COLOR_SKYBLUE_LIGHT = int("729fcfff",16) TANGO_COLOR_SKYBLUE_MID = int("3465a4ff",16) TANGO_COLOR_SKYBLUE_DARK = int("204a87ff",16) TANGO_COLOR_PLUM_LIGHT = int("ad7fa8ff",16) TANGO_COLOR_PLUM_MID = int("75507bff",16) TANGO_COLOR_PLUM_DARK = int("5c3566ff",16) TANGO_COLOR_SCARLETRED_LIGHT = int("ef2929ff",16) TANGO_COLOR_SCARLETRED_MID = int("cc0000ff",16) TANGO_COLOR_SCARLETRED_DARK = int("a40000ff",16) TANGO_COLOR_ALUMINIUM1_LIGHT = int("eeeeecff",16) TANGO_COLOR_ALUMINIUM1_MID = int("d3d7cfff",16) TANGO_COLOR_ALUMINIUM1_DARK = int("babdb6ff",16) TANGO_COLOR_ALUMINIUM2_LIGHT = int("888a85ff",16) TANGO_COLOR_ALUMINIUM2_MID = int("555753ff",16) TANGO_COLOR_ALUMINIUM2_DARK = int("2e3436ff",16) TRANSPARENT_COLOR = int("00000000",16) # # Color conversion utility functions # def str2gdk(name): return gtk.gdk.color_parse(name) def int2gdk(i): red = (i >> 24) & 0xff green = (i >> 16) & 0xff blue = (i >> 8) & 0xff return gtk.gdk.Color(red * 256, green * 256, blue * 256) def gdk2intrgba(color, a=0xff): return (color.red / 256 << 24) \ | (color.green / 256 << 16) \ | (color.blue / 256 << 8) \ | 0xff def gdk2intrgb(color): return (color.red / 256 << 16) \ | (color.green / 256 << 8) \ | (color.blue / 256 ) def gdk2rgb(color): return (color.red / 65535.0, color.green / 65535.0, color.blue / 65535.0) def gdk2rgba(color, a=1): return (color.red / 65535.0, color.green / 65535.0, color.blue / 65535.0, a) def convert(color, converter): if isinstance(color, gtk.gdk.Color): pass elif type(color) == type(0) or type(color) == type(0l): color = int2gdk(color) elif type(color) == type(''): color = str2gdk(color) else: raise TypeError('%s is not a known color type' % type(color)) return converter(color) def to_int(color): return convert(color, gdk2int) def to_rgb(color): return convert(color, gdk2rgb) def to_rgba(color): return convert(color, gdk2rgba) conduit-0.3.17/conduit/gtkui/ConfigItems.py0000644000175000017500000006745211321403566015560 00000000000000""" Gtk implementation to the configuration controller Copyright: Alexandre Rosenfeld, 2009 License: GPLv2 """ import sys import gobject import gtk import logging log = logging.getLogger("gtkui.Config") from gettext import gettext as _ import conduit.Vfs as Vfs class Error(Exception): """Base exception for all exceptions raised in this module.""" pass class Section(gobject.GObject): def __init__(self, container, title, order, enabled = True): ''' A section containing items and a title ''' gobject.GObject.__init__(self) self.container = container self.title = title self.order = order self.items = [] self.__enabled = enabled def add_item(self, item): ''' Adds an item to this section (this does not update the dialog) ''' self.items.append(item) def attach(self, table, row): if self.title: row += 1 label = gtk.Label("%s" % (self.title)) label.set_alignment(0.0, 0.5) label.set_use_markup(True) table.resize(row, 2) table.attach(label, 0, 2, row - 1, row, xoptions = gtk.FILL | gtk.SHRINK, yoptions = 0) for item in sorted(self.items, key = lambda item: item.order): row = item._attach(table, row, bool(self.title)) return row enabled = property(lambda self: self.__enabled, lambda self, v: self.set_enabled(v)) def set_enabled(self, enabled): ''' When enabled, widgets inside this section can be clicked or modified ''' for item in self.items: item.set_enabled(enabled) self.__enabled = enabled def apply(self): self.container.apply_config(sections = [self]) class ItemMeta(gobject.GObjectMeta): ''' Meta class to automatically register item classes. Based on http://www.djangosnippets.org/snippets/542/ ''' def __init__(cls, name, bases, attrs): gobject.GObjectMeta.__init__(cls, name, bases, attrs) if not hasattr(cls, 'items'): # This branch only executes when processing the mount point itself. # So, since this is a new plugin type, not an implementation, this # class shouldn't be registered as a plugin. Instead, it sets up a # list where plugins can be registered later. cls.items = {} else: # This must be a plugin implementation, which should be registered. # Simply appending it to the list is all that's needed to keep # track of it later. if hasattr(cls, '__item_name__'): cls.items[cls.__item_name__] = cls class ItemBase(gobject.GObject): ''' A config item is basically a wrapper to a widget. It works by exposing a value that should be translated to the underlying widget. The type of the value depends on the item. Subclasses should implement _build_widget, _set_value and _get_value. If they include choices, they also must implement _set_choices or _clear_choices and _build_choices. Signals emitted: :value-changed: Emitted everytime the value changes. It's signature is ``function(is_initial_value, value)`` or ``method(self, is_initial_value, value)``. See the is_initial_value function below. ''' __metaclass__ = ItemMeta __gsignals__ = { 'value-changed': (gobject.SIGNAL_RUN_FIRST, None, [bool, object]), } def __init__(self, container, title, order, config_name = None, config_type = None, choices = None, needs_label = True, needs_space = None, initial_value = None, initial_value_callback = None, save_callback = None, fill = False, enabled = True, disable_check = False, disabled_value = None): ''' Creates a config item. The parameters customize how the item behaves and/or looks: @param config_name: Used in the configuration dict that saves and restores this item value. @param config_type: ``function(value)`` that converts the config value into something a dataprovider will accept. This could be something like int, str, etc., or a custom function. @param initial_value: When the item is created or cancel is called, the item returns to this value. Changes to the current value when apply is called. @param initial_value_callback: It's a function that should return a value to initial value, called when the item is created or when cancel is called. It is especially useful for items that keep their state somewhere else. @param choices: Valid when the user needs to select a value from a list. It has to be a tuple with ``(value, label)``. @param needs_label: If True, the widget will have a label with title as the text. Items such as list sets this to False. @param needs_space: If ``needs_label`` is False, but the widget still wants to be aligned to the right in the window, set this to True. @param enabled: If the widget can be edited by the user. @param save_callback: A ``function(item, value)`` called when apply is selected and the value must be saved. @param disable_check: When true a checkmark to disable the item is added @param disabled_value: A value returned when the item is disabled ''' gobject.GObject.__init__(self) # These properties should not be changed self.container = container self.read_only = False # Properties that take in effect while the configuration is running # Access then using their public attributes (as implemented # with properties below), such as ``item.enabled = False`` self.__widget = None self.__label = None self.__enabled = enabled if not choices: choices = [] self.__choices = choices # These properties do not need any special processing when changed, # they can probably be directly assigned to another value self.config_name = config_name self.config_type = config_type self.save_callback = save_callback self.initial_value = initial_value self.initial_value_callback = initial_value_callback self.disabled_value = disabled_value # These properties takes no effect while the configuration is running, # unless the widgets are rebuilt (there are no provisions to make that # happen at the moment) self.title = title self.order = order if needs_space is None and title is None: needs_space = False needs_label = False self.needs_label = needs_label self.needs_space = needs_space self.fill = fill self.disable_check = disable_check def _value_changed(self, *args): ''' Should be called everytime the value changes. Emits the value-changed signal. This method can be chained into widget signals. It will safely ignore any argument passed to it. ''' #if self.is_initial_value(): # self.emit('initial-state') self.emit('value-changed', self.is_initial_value(), self.value) def _get_choices_labels(self): for value, label in self._get_choices_all(): yield label def _get_choices_values(self): for value, label in self._get_choices_all(): yield value def _get_choices_all(self): try: for choice in self.choices: if isinstance(choice, tuple): if len(choice) != 2: raise ValueError yield choice else: yield choice, str(choice) except (ValueError, TypeError): raise Error("Choices '%s' for '%s' is not valid, it should be a (value, label) list or a list of labels" % (self.choices, self.title)) def _build_choices(self): ''' Implement this when you need to build the choices of a widget. ''' pass def _clear_choices(self): ''' Implement this to clear the choices on the widget. ''' pass def _set_choices(self, choices): ''' Should set choices and reassign it's old value. Subclasses do not need no implement this, they should implement _build_choices and _clear_choices. If they do implement it, they should not call this method, unless they know what they are doing. ''' value = self.get_value() self.__choices = choices self._clear_choices() self._build_choices() self.set_value(value) def set_choices(self, choices): ''' Set the choices and recovers the old state if possible. ''' self._set_choices(choices) choices = property(lambda self: self.__choices, set_choices) def _attach(self, table, row, in_section): ''' Attach this item's widget to a table. ''' widget = self.get_widget() label = self.get_label() row += 1 table.resize(row, 2) align = gtk.Alignment(0.5, 0.5, 1.0, 1.0) if in_section: align.set_padding(0, 0, 12, 0) #FIXME: This would allow the configurator widget to shrink more then # it's original size. It might be useful for PaneConfigurator, but # it feels weird. And it screws the size requisition, so it's smaller # then it should be. #if label: # label.set_ellipsize(pango.ELLIPSIZE_END) right_align = label or self.needs_space if self.fill: yoptions = gtk.FILL | gtk.EXPAND else: yoptions = 0 if right_align: if label: align.add(label) table.attach(align, 0, 1, row - 1, row, xoptions = gtk.SHRINK | gtk.FILL, yoptions = 0) table.attach(widget, 1, 2, row - 1, row, xoptions = gtk.FILL | gtk.EXPAND, yoptions = yoptions) else: align.add(widget) table.attach(align, 0, 2, row - 1, row, xoptions = gtk.FILL | gtk.EXPAND, yoptions = yoptions) return row def _enabled_check_toggled(self, widget): self.set_enabled(widget.get_active()) self.emit('value-changed') def get_label(self): ''' Returns the gtk.Label to this item (if needed) ''' if self.needs_label and not self.__label: label_text = self.title if label_text and not label_text.rstrip().endswith(':'): label_text += ':' if not self.disable_check: self.__label = gtk.Label(label_text) self.__label.set_alignment(0.0, 0.5) else: self.__label = gtk.CheckButton() self.__label.set_label(self.title) self.__label.set_active(self.__enabled) self.__label.connect("toggled", lambda widget: self.set_enabled(widget.get_active())) return self.__label def set_label(self, label): ''' Sets the label widget ''' self.__label = label label = property(lambda self: self.get_label(), lambda self, v: self.set_label(v)) def get_widget(self): ''' Return the widget, building it as needed. ''' if not self.__widget: self._build_widget() if not self.__widget: raise Error("Widget could not be built") self.reset() return self.__widget def set_widget(self, widget): ''' Sets the widget ''' self.__widget = widget widget = property(lambda self: self.get_widget(), lambda self, v: self.set_widget(v)) def get_value(self): ''' Gets the value from the widget. If the widget does not exist yet (the container was not built) the initial_value is returned instead. This is a public interface method, should not be overriden by descendants. Implement _get_value instead. Note that this method is expected to be cheap. Take care of not having heavy processing in this method. It is called every time the user changes the value. ''' #FIXME: This is a hack to allow the Youtube configuration to work. # The way this should be implemented is adding a callback to this function # or something similar. But because we already have too much callbacks # this way is simpler if (not self.enabled) and (self.disabled_value is not None): return self.disabled_value if not self.__widget: return self.initial_value return self._get_value() def set_value(self, value): ''' Sets the value of the widget. This is a public interface method, should not be overriden by descendants. Implement _set_value instead. ''' #FIXME: We should probably check for exceptions here, to avoid not # showing the configuration dialog because a value was invalid, # which could occur with invalid config values. # We should probably assign the initial value here in case of an # Exception. In case of another Exception, then it's the module fault, # and no exception handling should be done. self.initial_value = value if not self.__widget: return self._set_value(value) #Set value as a property value = property(get_value, set_value) def get_config_value(self): ''' Returns a dict suitable to a dataprovider set_configuration. Returning a dict allows subclasses to provide more then one configuration value if needed. ''' if not self.config_name: return None value = self.get_value() try: if self.config_type: self.config_type(value) except: log.warning("Value %s could not be translated with %s" % (value, self.config_type)) #raise TypeError() else: return {self.config_name: value} def is_initial_value(self): ''' Returns True if the current value is the initial value. ''' return self.initial_value == self.value def _set_enabled(self, enabled): self.widget.set_sensitive(enabled) if self.label: if self.disable_check: self.__label.set_active(enabled) else: self.label.set_sensitive(enabled) def set_enabled(self, enabled): ''' Set the widget sensibility. ''' self.__enabled = enabled if self.__widget: self._set_enabled(enabled) if self.disabled_value is not None: log.critical("Toggling enabled") self._value_changed() enabled = property(lambda self: self.__enabled, lambda self, enabled: self.set_enabled(enabled)) def reset(self): ''' Resets the widget to it's initial value. ''' if self.__widget: #self.emit('reset') #self.widget.set_sensitive(self.enabled) self.set_enabled(self.enabled) if self.initial_value_callback: self.initial_value = self.initial_value_callback(self) self.value = self.initial_value def save_state(self): ''' Save the current value as the initial value. ''' value = self.get_value() self.initial_value = value if self.save_callback: self.save_callback(self, value) def apply(self): ''' Seve the current value as the initial value and calls the dataprovider to save the current value. ''' self.save_state() self.container.apply_config([self]) class ConfigLabel(ItemBase): __item_name__ = 'label' def __init__(self, xalignment = 0.0, yalignment = 0.5, use_markup = False, **kwargs): ItemBase.__init__(self, **kwargs) self.xalignment = xalignment #kwargs.get('xalignment', 0.0) self.yalignment = yalignment #kwargs.get('yalignment', 0.5) self.use_markup = use_markup #kwargs.get('use_markup', False) self.read_only = True def _build_widget(self): self.widget = gtk.Label() self.widget.set_alignment(self.xalignment, self.yalignment) self.widget.set_use_markup(self.use_markup) def _get_value(self): return self.widget.get_text() def _set_value(self, value): if self.use_markup: self.widget.set_markup(str(value)) else: self.widget.set_text(str(value)) class ConfigButton(ItemBase): __item_name__ = 'button' def __init__(self, *args, **kwargs): action = kwargs.pop('action', None) self.image = kwargs.pop('image', None) ItemBase.__init__(self, *args, **kwargs) self.callback = None self.needs_space = kwargs.get('needs_space', False) self.needs_label = kwargs.get('needs_label', False) if action: self.initial_value = action self.read_only = True def _button_clicked(self, button_widget): if self.callback: self.callback(self) def _build_widget(self): self.widget = gtk.Alignment(1.0, 0.5, 0.0, 1.0) button_widget = gtk.Button(self.title) if self.image: button_widget.set_image(gtk.image_new_from_icon_name(self.image, gtk.ICON_SIZE_BUTTON)) button_widget.connect("clicked", self._button_clicked) self.widget.add(button_widget) def _set_value(self, value): if value is not None and not callable(value): raise Error("Button callback must be callable (%s is not)" % (value)) self.callback = value def _get_value(self): return self.callback class ConfigFileButton(ItemBase): __item_name__ = 'filebutton' def __init__(self, *args, **kwargs): self.directory = kwargs.pop('directory', False) ItemBase.__init__(self, *args, **kwargs) self._current_uri = None def _selection_changed(self, filechooser): uri = filechooser.get_uri() #if in folder mode, and no directory is selected, then #default to the current directory. This hack was necessary in some #old pygtk version, I am not sure if it is still required, as the #filechooser seems to behave better now if self.directory and not uri: uri = filechooser.get_current_folder_uri() if uri and self._current_uri != uri: self._current_uri = uri self._value_changed() def _build_widget(self): self.widget = gtk.FileChooserButton(self.title) self.widget.props.local_only = not Vfs.backend_supports_remote_uri_schemes() self.widget.connect("selection-changed", self._selection_changed) if self.directory: self.widget.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER) else: self.widget.set_action(gtk.FILE_CHOOSER_ACTION_OPEN) def _set_value(self, value): self.widget.set_uri(str(value)) def _get_value(self): return self._current_uri class ConfigRadio(ItemBase): __item_name__ = 'radio' def __init__(self, container, title, order, **kwargs): ItemBase.__init__(self, container, title, order, **kwargs) self.needs_label = title is not None self.buttons = {} self._active_button = None def _button_changed(self, button): if button.get_active(): self._active_button = button self._value_changed() def _clear_choices(self): for widget in self.widget.get_children(): self.widget.remove(widget) self.buttons = {} def _build_choices(self): last_button = None for value, text in self._get_choices_all(): last_button = gtk.RadioButton(last_button, text) last_button.connect("toggled", self._button_changed) last_button.show() self.buttons[value] = last_button self.widget.pack_start(last_button) def _build_widget(self): self.widget = gtk.VBox() self._build_choices() def _get_value(self): for value, button in self.buttons.iteritems(): if button == self._active_button: return value return None def _set_value(self, new_value): if new_value in self.buttons: self.buttons[new_value].set_active(True) self._active_button = self.buttons[new_value] else: log.warn("Value %s could not be applied to config %s" % (new_value, self.title)) class ConfigSpin(ItemBase): __item_name__ = 'spin' def __init__(self, *args, **kwargs): self.maximum = kwargs.pop('maximum', sys.maxint) self.minimum = kwargs.pop('minimum', 0) self.step = kwargs.pop('step', 1) ItemBase.__init__(self, *args, **kwargs) def _build_widget(self): self.adjust = gtk.Adjustment(lower = self.minimum, upper = self.maximum, step_incr = self.step) self.widget = gtk.SpinButton(self.adjust) self.widget.connect("value-changed", self._value_changed) def _get_value(self): return float(self.widget.get_value()) def _set_value(self, value): try: value = float(value) self.widget.set_value(value) except: log.warn("Value %s could not be applied to config %s" % (repr(self.title), value)) class ConfigCombo(ItemBase): __item_name__ = 'combo' def _build_choices(self): for label in self._get_choices_labels(): self.widget.append_text(label) def _clear_choices(self): self.widget.get_model().clear() def _build_widget(self): self.widget = gtk.combo_box_new_text() self._build_choices() self.widget.connect("changed", self._value_changed) def _get_value(self): active = self.widget.get_active() if len(self.choices) > active and active >= 0: return [value for value in self._get_choices_values()][active] else: log.warn("No value selected in combo") return None def _set_value(self, new_value): for idx, value in enumerate(self._get_choices_values()): if value == new_value: self.widget.set_active(idx) return log.warn("Value %s not found in config %s" % (new_value, self.title)) class ConfigComboText(ConfigCombo): __item_name__ = 'combotext' def _build_widget(self): self.widget = gtk.combo_box_entry_new_text() self._build_choices() self.widget.connect("changed", self._value_changed) def _get_value(self): return self.widget.child.get_text() def _set_value(self, value): self.widget.child.set_text(str(value)) class ConfigText(ItemBase): __item_name__ = 'text' def __init__(self, password = False, **kwargs): self.password = password #kwargs.pop('password', False) ItemBase.__init__(self, **kwargs) def _build_widget(self): self.widget = gtk.Entry() self.widget.connect("notify::text", self._value_changed) self.widget.set_visibility(not self.password) def _get_value(self): return self.widget.get_text() def _set_value(self, value): self.widget.set_text(str(value)) class ConfigList(ItemBase): __item_name__ = 'list' CHECKED_COLUMN, LABEL_COLUMN, VALUE_COLUMN = range(3) def __init__(self, *args, **kwargs): ItemBase.__init__(self, *args, **kwargs) self.needs_label = kwargs.get('needs_label', False) if self.initial_value: try: self.initial_value = sorted(self.initial_value) except TypeError: raise Error("List only supports iterables as value (%s is not)" % (self.initial_value)) self.fill = kwargs.get('fill', True) self._checked_items = None self.model = gtk.ListStore(gobject.TYPE_BOOLEAN, gobject.TYPE_STRING, object) def _cellcheck_cb(self, cell, path, model): model[path][self.CHECKED_COLUMN] = not cell.get_active() #FIXME: Use _checked_items here too, so it's faster to get the values #But we should take care that this list must be always sorted self._checked_items = None self._value_changed() def _build_choices(self): for value, label in self._get_choices_all(): self.model.append((False, str(label), value)) def _clear_choices(self): self.model.clear() def _set_enabled(self, enabled): self.list.set_sensitive(enabled) def _build_widget(self): self.vbox = gtk.VBox() self.vbox.set_spacing(4) self.scrolled_window = gtk.ScrolledWindow() self.scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.vbox.pack_start(self.scrolled_window) self.total_label = gtk.Label() self.total_label.set_alignment(0.0, 0.0) self.vbox.pack_start(self.total_label, False, False) self.list = gtk.TreeView() self.list.set_property('headers-visible', False) self.list.set_property('rules-hint', True) self.list.set_model(self.model) check_renderer = gtk.CellRendererToggle() check_renderer.set_property('activatable', True) check_renderer.connect('toggled', self._cellcheck_cb, self.model) #FIXME: We could probably support more columns, maybe by automatically # detecting if choices include tuples, and which types are inside the # tuple. self.list.append_column(gtk.TreeViewColumn("Enabled", check_renderer, active = self.CHECKED_COLUMN)) self.list.append_column(gtk.TreeViewColumn("Label", gtk.CellRendererText(), text = self.LABEL_COLUMN)) self._clear_choices() self._build_choices() self.scrolled_window.add(self.list) self.widget = self.vbox self.widget.set_size_request(-1, 150) def _update_total(self): self.total_label.set_text(_("Total: %d") % len(self._checked_items)) def _get_value(self): if not self._checked_items: self._checked_items = sorted([row[self.VALUE_COLUMN] for row in self.model if row[self.CHECKED_COLUMN]]) self._update_total() return self._checked_items def _set_value(self, value): self._checked_items = [] try: self._checked_items = sorted(value) for row in self.model: row[self.CHECKED_COLUMN] = (row[self.VALUE_COLUMN] in self._checked_items) except: log.warn("Value %s could not be added to list %s" % (value, repr(self.title))) self._update_total() class ConfigCheckBox(ItemBase): __item_name__ = 'check' def __init__(self, *args, **kwargs): ItemBase.__init__(self, *args, **kwargs) self.needs_label = False def _build_widget(self): self.widget = gtk.CheckButton() self.widget.set_label(self.title) self.widget.connect("toggled", self._value_changed) def _get_value(self): return self.widget.get_active() def _set_value(self, value): self.widget.set_active(bool(value)) conduit-0.3.17/conduit/gtkui/Tree.py0000644000175000017500000003457311322712533014244 00000000000000""" Cotains treeview and treemodel classes for displaying the dataproviders Copyright: John Stowers, 2006 License: GPLv2 """ import gtk import logging log = logging.getLogger("gtkui.Tree") import conduit from conduit.ModuleWrapper import ModuleWrapper from gettext import gettext as _ class CategoryWrapper(ModuleWrapper): """ Represents a category stored in the treemodel. Not generally intended to be used outside of C{conduit.Tree.DataProviderTreeModel} """ def __init__(self, category): ModuleWrapper.__init__( self, klass=None, initargs=(), category=category ) self.name=category.name self.classname=category.name self.icon_name=category.icon self.module_type="category" def get_UID(self): return self.name IDX_ICON = 0 IDX_NAME = 1 IDX_DESCRIPTION = 2 IDX_DND_KEY = 3 COLUMN_TYPES = (gtk.gdk.Pixbuf, str, str, str) class DataProviderTreeModel(gtk.GenericTreeModel): """ A treemodel for managing dynamically loaded modules. Manages an internal list of L{conduit.ModuleManager.ModuleWrapper} @ivar modules: The array of modules under this treeviews control. @type modules: L{conduit.ModuleManager.ModuleWrapper}[] """ def __init__(self): """ TreeModel constructor Ignores modules which are not enabled """ gtk.GenericTreeModel.__init__(self) #A dictionary mapping wrappers to paths self.pathMappings = {} #2D array of wrappers at their path indexes self.dataproviders = [] #Array of wrappers at their path indexes self.cats = [] #Add dataproviders self.add_dataproviders( conduit.GLOBALS.moduleManager.get_modules_by_type("source","sink","twoway") ) conduit.GLOBALS.moduleManager.connect("dataprovider-available",self._on_dataprovider_available) conduit.GLOBALS.moduleManager.connect("dataprovider-unavailable", self._on_dataprovider_unavailable) def _is_category_heading(self, rowref): return rowref.module_type == "category" def _get_category_index_by_name(self, category_name): i = 0 for j in self.cats: if j.category == category_name: return i i += 1 return None def _get_category_by_name(self, category_name): idx = self._get_category_index_by_name(category_name) return self.cats[idx] def _rebuild_path_mappings(self): self.pathMappings = {} for i, cat in enumerate(self.cats): self.pathMappings[cat] = (i, ) for j, dp in enumerate(self.dataproviders[i]): self.pathMappings[dp] = (i, j) def _on_dataprovider_available(self, loader, dataprovider): if dataprovider.enabled == True: self.add_dataprovider(dataprovider) def _on_dataprovider_unavailable(self, unloader, dataprovider): self.remove_dataprovider(dataprovider) def add_dataproviders(self, dpw=[]): """ Adds all enabled dataproviders to the model """ #Only display enabled modules module_wrapper_list = [m for m in dpw if m.enabled] #Add them to the module for mod in module_wrapper_list: #dont signal the GUI to update, providing this model #is added to a view after it has finished being constructed self.add_dataprovider(mod, False) def add_dataprovider(self, dpw, signal=True): """ Adds a dataprovider to the model. Creating a category for it if it does not exist @param dpw: The dataproviderwrapper to add @param signal: Whether the associated treeview should be signaled to update the GUI. Set to False for the first time the model is built (in the constructor) @type signal: C{bool} """ #Do we need to create a category first? i = self._get_category_index_by_name(dpw.category) if i == None: new_cat = CategoryWrapper(dpw.category) self.cats.append(new_cat) i = self.cats.index(new_cat) self.pathMappings[new_cat] = (i,) #Signal the treeview to redraw if signal: path=self.on_get_path(new_cat) self.row_inserted(path, self.get_iter(path)) #Now add the dataprovider to the categories children try: self.dataproviders[i].append(dpw) except IndexError: #Doesnt have any kids... yet! self.dataproviders.insert(i, [dpw]) #Store the index j = self.dataproviders[i].index(dpw) self.pathMappings[dpw] = (i,j) #Signal the treeview to redraw if signal: path=self.on_get_path(dpw) self.row_inserted(path, self.get_iter(path)) def remove_dataprovider(self, dpw, signal=True): """ Removes the dataprovider from the treemodel. Also removes the category that it was in if there is no remaining dataproviders in that category """ path = self.on_get_path(dpw) self.row_deleted(path) del self.dataproviders[path[0]][path[1]] #del (self.childrencache[parent]) i = self._get_category_index_by_name(dpw.category) if len(self.dataproviders[i]) == 0: log.info("Category %s empty - removing." % dpw.category) self.row_deleted((i, )) del self.dataproviders[i] del self.cats[i] self._rebuild_path_mappings() def on_get_flags(self): """ on_get_flags( """ return gtk.TREE_MODEL_ITERS_PERSIST def on_get_n_columns(self): """ on_get_n_columns( """ return len(COLUMN_TYPES) def on_get_column_type(self, n): """ on_get_column_type( """ return COLUMN_TYPES[n] def on_get_iter(self, path, debug=False): """ on_get_iter( """ if len(self.cats) == 0: return None #Check if this is a toplevel row if len(path) == 1: if path[0] > len(self.cats): return None if debug: print "on_get_iter: path = %s cat = %s" % (path, self.cats[path[0]]) try: return self.cats[path[0]] except IndexError: #I cannot reproducibly hit this code path. This bug just seems to occur #on Ubuntu Lucid #https://bugs.launchpad.net/bugs/506110 log.critical("Strange bug, cannot get iter...") return None else: try: if debug: print "on_get_iter: path = %s dataprovider = %s" % (path, self.dataproviders[path[0]][path[1]]) return self.dataproviders[path[0]][path[1]] except IndexError: #no modules loaded if debug: print "on_get_iter: No modules loaded path = ", path return None def on_get_path(self, rowref): """ on_get_path( """ #print "on_get_path: rowref = ", rowref path = self.pathMappings[rowref] #print "PATH = ", path return path def on_get_value(self, rowref, column): """ on_get_value( """ #print "on_get_value: rowref = %s column = %s" % (rowref, column) if column is IDX_ICON: return rowref.get_descriptive_icon() elif column is IDX_NAME: if self._is_category_heading(rowref): return ""+rowref.name+"" else: return rowref.name elif column is IDX_DESCRIPTION: return rowref.description #Used internally from the TreeView to get the key used by the canvas to #reinstantiate new dataproviders elif column is IDX_DND_KEY: if self._is_category_heading(rowref): return "" else: return rowref.get_dnd_key() #Used internally from the TreeView to see if this is a category heading #and subsequently cancel the drag and drop elif column is IDX_IS_CATEGORY: return self._is_category_heading(rowref) def on_iter_next(self, rowref): """ on_iter_next( """ path = self.on_get_path(rowref) try: #print "on_iter_next: current rowref = %s, path = %s" % (rowref, path) #Check if its a toplevel row if len(path) == 1: return self.cats[path[0]+1] else: return self.dataproviders[path[0]][path[1]+1] except IndexError: #print "on_iter_next: index error iter next" return None def on_iter_children(self, rowref): """ on_iter_children( """ #print "on_iter_children: parent = ", rowref if rowref is None: return self.cats[0] else: path = self.on_get_path(rowref) #print "on_iter_children: children = ", self.dataproviders[path[0]][0] return self.dataproviders[path[0]][0] def on_iter_has_child(self, rowref): """ on_iter_has_child( """ #print "on_iter_has_child: rowref = %s, has child = %s" % (rowref,self._is_category_heading(rowref)) return self._is_category_heading(rowref) def on_iter_n_children(self, rowref): """ on_iter_n_children( """ #print "on_iter_n_children: parent = ", rowref if rowref: path = self.on_get_path(rowref) return len(self.dataproviders[path[0]]) return len(self.cats) def on_iter_nth_child(self, rowref, n): """ on_iter_nth_child( """ #print "on_iter_nth_child: rowref = %s n = %s" % (rowref, n) if rowref is None: return self.cats[n] else: path = self.on_get_path(rowref) try: return self.dataproviders[path[0]][n] except IndexError: return None def on_iter_parent(self, rowref): """ on_iter_parent( """ #print "on_iter_parent: child = ", rowref if self._is_category_heading(rowref): #print "on_iter_parent: parent = None" return None else: cat = self._get_category_by_name(rowref.category) path = self.on_get_path(cat) #print "on_iter_parent: parent = ", self.cats[path[0]] return self.cats[path[0]] class DataProviderTreeView(gtk.TreeView): """ Handles DND of DataProviders onto canvas """ DND_TARGETS = [ ('conduit/element-name', 0, 0) ] def __init__(self, model): """ Constructor """ gtk.TreeView.__init__(self, model) self.set_property("enable-search", False) if gtk.pygtk_version >= (2,10,0) and conduit.GLOBALS.settings.get("gui_show_treeview_lines"): self.set_property("enable-tree-lines", True) #First column is an image and name pixbufRenderer = gtk.CellRendererPixbuf() textRenderer = gtk.CellRendererText() tvcolumn0 = gtk.TreeViewColumn(_("Name")) tvcolumn0.pack_start(pixbufRenderer, False) tvcolumn0.add_attribute(pixbufRenderer, 'pixbuf', IDX_ICON) tvcolumn0.pack_start(textRenderer, True) tvcolumn0.add_attribute(textRenderer, 'markup', IDX_NAME) self.append_column(tvcolumn0) # Second column is a description if conduit.GLOBALS.settings.get("show_dp_description"): tvcolumn1 = gtk.TreeViewColumn(_("Description"), gtk.CellRendererText(), text=IDX_DESCRIPTION) self.append_column(tvcolumn1) self.set_headers_visible(True) else: self.set_headers_visible(False) # DND info: # drag self.enable_model_drag_source( gtk.gdk.BUTTON1_MASK, self.DND_TARGETS, gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_MOVE) self.drag_source_set( gtk.gdk.BUTTON1_MASK | gtk.gdk.BUTTON3_MASK, self.DND_TARGETS, gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_LINK) self.connect('drag-data-get', self.on_drag_data_get) self.connect('drag-data-delete', self.on_drag_data_delete) def get_expanded_rows(self): model = self.get_model() expanded = [] for c in model.cats: try: path = model.on_get_path(c) if self.row_expanded(model.on_get_path(c)): expanded.append(c.get_UID()) except KeyError: pass return expanded def set_expand_rows(self): if conduit.GLOBALS.settings.get("gui_restore_expanded_rows") == True: model = self.get_model() cols = conduit.GLOBALS.settings.get("gui_expanded_rows") for c in model.cats: try: path = model.on_get_path(c) if c.get_UID() in cols: self.expand_row(path, False) else: self.collapse_row(path) except KeyError: #expand all break return #Work around a (py)gtk 2.8 bug if gtk.pygtk_version >= (2,10,0): gtk.TreeView.expand_all(self) def on_drag_data_get(self, treeview, context, selection, target_id, etime): """ Get the data to be dropped by on_drag_data_received(). We send the id of the dragged element. """ treeselection = treeview.get_selection() model, iter = treeselection.get_selected() #get the classname data = model.get_value(iter, IDX_DND_KEY) selection.set(selection.target, 8, data) def on_drag_data_delete (self, context, etime): """ DnD magic. do not touch """ self.emit_stop_by_name('drag-data-delete') #context.finish(True, True, etime) conduit-0.3.17/conduit/gtkui/Makefile.am0000644000175000017500000000041311172176633015021 00000000000000conduitdir = $(pythondir)/conduit/gtkui conduit_PYTHON = \ Canvas.py \ ConfigContainer.py \ ConfigItems.py \ ConflictResolver.py \ Database.py \ __init__.py \ MsgArea.py \ Tree.py \ Util.py \ UI.py \ WindowConfigurator.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/gtkui/ConfigContainer.py0000644000175000017500000002354011321403566016407 00000000000000'''Manages configuration items for a dataprovider. The ConfigContainer should handle all widgets in a configurator, including adding, removing and handling such as applying and cancelling the configuration. Copyright: Alexandre Rosenfeld, 2009 License: GPLv2 ''' import gobject import gtk import logging log = logging.getLogger("gtkui.ConfigContainer") from gettext import gettext as _ import conduit.gtkui.ConfigItems as ConfigItems import conduit.Configurator as Configurator class Error(Exception): """Base exception for all exceptions raised in this module.""" pass class ConfigContainer(Configurator.BaseConfigContainer): """ Gtk implementation to the ConfigController. A dataprovider usually does not need to instantiate this class. """ __gsignals__ = { 'item-changed' : (gobject.SIGNAL_RUN_FIRST, None, (gobject.TYPE_OBJECT,)), } def __init__(self, dataprovider, configurator): super(ConfigContainer, self).__init__(dataprovider, configurator) # Current section self.section = None self.sections = [] self.items = [] self.item_names = {} self.built_items = False self.config_values = None self.__modified_items = None #the child widget to contain the custom settings self.widgetTable = gtk.Table(rows=1, columns=2) self.widgetTable.set_row_spacings(6) self.widgetTable.set_col_spacings(12) self.config_widget = self.widgetTable self.firstRow = True def __len__(self): return len(self.item_names) def __getitem__(self, key): return self.item_names[key] def _reset_modified_items(self, empty = True): ''' Reset the list of modified items. If empty is True, just create a new empty list of modified items (so that no item is modified). If empty is False, set the list to None, so that it will be recreated next time get_modified_items is called. ''' if empty: self.modified_items = set() else: self.modified_items = None def _item_changed(self, item, initial_state, value): self.emit("item-changed", item) if not initial_state: self.modified_items.add(item) elif item in self.modified_items: self.modified_items.remove(item) self.emit('changed', self.is_modified()) def _rebuild_widgets(self): ''' Rebuild widgets if needed. ''' self.modified_items = None if self.showing: self._build_widgets() def _build_widgets(self): ''' Creates all necessary widgets. ''' table = self.widgetTable if self.showing: table.foreach(lambda widget: table.remove(widget)) table.resize(1, 2) rows = 0 elif self.firstRow: self.firstRow = False rows = 0 else: rows = table.get_property('n-rows') for section in sorted(self.sections, key = lambda section: section.order): rows = section.attach(table, rows) if rows != 1: table.set_row_spacing(rows - 1, 16) self.widgetTable.show_all() def _reset(self): ''' Set all items to their initial state ''' for item in self.items: item.reset() def add_section(self, title = None, order = 0, use_existing = True, **kwargs): ''' Add a section. Returns the Section object. ''' if (not title and self.section and not self.section.title) or \ (use_existing and self.section and title is self.section.title): return self.section found = False if use_existing and title: for section in self.sections: if section.title == title: self.section = section found = True break if not use_existing or not found: self.section = ConfigItems.Section(self, title, order, **kwargs) self.sections.append(self.section) self._rebuild_widgets() return self.section def add_item(self, title, kind, order = 0, name = None, **kwargs): ''' Add a configuration item. Returns the Item object. Title is used for the label next to this item. Kind is the type of item used for the widget. See the ConfigItems file for a list of default kinds provided. Descendants of ItemBase are auto- matically registered and can be used here. Name is used to access this item via __getitem__ or with config[name]. If name is not specified here it will use the config_name defined in kwargs, if availiable. You can pass other properties to the configuration item in kwargs. For documentation on which properties to use, check the ConfigItems file. ''' # Check if this kind of item is registered if kind not in ConfigItems.ItemBase.items: raise Error("Config kind %s not found" % kind) # We only add a Section for this item if no previous section is defined. if not self.section: self.add_section() # If we have a saved configuration in the config dict from the # dataprovider use it as initial value. # Note that we only get the configuration dict once for this # dataprovider, so that next items will get this cached version. # Because dataproviders usually add several items in a row, this is # usually faster then retrieving it every time. if self.config_values is None: if self.dataprovider: self.config_values = self.dataprovider.get_configuration() else: self.config_values = {} config_name = kwargs.get('config_name', None) if config_name: if config_name in self.config_values: kwargs['initial_value'] = self.config_values[config_name] else: raise Error("Value for %s (configuration item %s) not found in dataprovider" % (config_name, title)) # The name of this item will be either the explicitely defined name or # the config_name value. name = name or config_name if 'enabled' not in kwargs: kwargs['enabled'] = self.section.enabled item_cls = ConfigItems.ItemBase.items[kind] item = item_cls(container = self, title = title, order = order, **kwargs) item.connect("value-changed", self._item_changed) self.items.append(item) if name: self.item_names[name] = item self.section.add_item(item) # If we are already showing the configuration dialog, we need to # recreate the table of items. self._rebuild_widgets() return item def get_modified_items(self): ''' Return a list of items that has been modified ''' if self.__modified_items is None: self.__modified_items = set([item for item in self.items if not item.is_initial_value()]) return self.__modified_items def set_modified_items(self, value): self.__modified_items = value modified_items = property(get_modified_items, set_modified_items) def is_modified(self): ''' Returns true if any item has been modified ''' return len(self.modified_items) != 0 def get_config_values(self, items): ''' Returns a dict suitable to set_configuration in a data-provider. ''' values = {} for item in items: config_value = item.get_config_value() if config_value: values.update(config_value) return values def get_config_widget(self): ''' Returns the root configuration widget and builds the configuration widgets if needed ''' if not self.built_items: self._build_widgets() self.built_items = True return self.config_widget def show(self): ''' Show the configuration widget ''' super(ConfigContainer, self).show() self.config_widget.show_all() def set_busy(self, busy): self.__busy = busy self.configurator.set_busy(busy) def apply_config(self, items = None, sections = None): ''' Save the current configuration state to the dataprovider and to each item, saving any changes the user might have done. If items is None, all items will be applied. If sections or items are supplied, only these items will be applied. ''' super(ConfigContainer, self).apply_config() if not items and not sections: items = self.items elif not items and sections: items = [] if sections: for section in sections: items.extend([item for item in section.items if item not in items]) config_values = self.get_config_values(items) if config_values: #FIXME: Remove this messsage on production log.debug("Applying configuration: %s" % (config_values)) self.dataprovider.set_configuration(config_values) for item in items: item.save_state() if items or sections: self._reset_modified_items(empty = False) else: self._reset_modified_items(empty = True) self.emit('changed', self.is_modified()) def cancel_config(self): ''' Cancel the configuration, reverting any changes the user might have done ''' super(ConfigContainer, self).cancel_config() self._reset() self._reset_modified_items() conduit-0.3.17/conduit/gtkui/Database.py0000644000175000017500000002266011321403566015045 00000000000000""" GtkListStore wrapping around Generic DB Abstraction layer, including a lru cache to speed up operation. Copyright (C) John Stowers 2007 Based on http://vwdude.com/dropbox/pystore/ Copyright (C) Christian Hergert 2007 You may 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. main.c 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 main.c. If not, write to: The Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301, USA. """ import gobject import gtk import logging log = logging.getLogger("gtkui.Database") import conduit.Database as DB import conduit.utils as Utils class GenericDBListStore(gtk.GenericTreeModel): """ gtk.TreeModel implementation that saves and stores data directly to and from a sqlite database. A simple LRU cache is included to lower the number of required SQL queries. """ OID_CACHE = True def __init__(self, table, genericDB): """ Creates a new GenericDBListStore. Parameters: filename -- the filename of the sqlite database. table -- the name of the table to manage. """ gtk.GenericTreeModel.__init__(self) genericDB.connect("row-inserted",self._on_inserted) genericDB.connect("row-deleted",self._on_deleted) genericDB.connect("row-modified",self._on_modified) self.table = table self.db = genericDB self.oidcache = [] self.columns = self._get_columns() def _on_inserted(self, db, oid): self.oidcache = [] offset = self._get_offset(oid) try: rowref = self.get_iter(offset) path = self.get_path(rowref) self.row_inserted(path, rowref) except ValueError: #not a valid rowref pass def _on_modified(self, db, oid): self.oidcache = [] offset = self._get_offset(oid) try: rowref = self.get_iter(offset) path = self.get_path(rowref) self.row_changed(path, rowref) except ValueError: #not a valid rowref pass def _on_deleted(self, db, oid): self.oidcache = [] offset = self._get_offset(oid) try: rowref = self.get_iter(offset) path = self.get_path(rowref) self.row_deleted(path) except ValueError: #not a valid rowref pass def _get_n_rows(self): """ Returns the number of rows found in our loaded table inside the sqlite database. """ (rows,) = self.db.select_one("SELECT COUNT(oid) FROM %s" % self.table) return rows def _get_columns(self): """ Returns the number of columns found in our sqlite table. """ return ('oid',) + tuple(self.db.get_fields(self.table)) @DB.lru_cache(0) def _get_oid(self, offset): """ Returns the oid of the row at offset. Parameters: offset -- the rows offset from 0. """ try: (oid,) = self.db.select_one("SELECT oid FROM %s LIMIT 1 OFFSET %d" % (self.table, offset)) except TypeError: #Stops a crash at exit when the db is closed before the UI oid = None return oid @DB.lru_cache(0) def _get_value(self, oid, index): """ Returns the value for a column in the table with a row id of oid. Parameters: oid -- the rows internal oid. column -- the column index. """ (value,) = self.db.select_one("SELECT %s FROM %s WHERE oid = %d" % (self.columns[index], self.table, oid)) return value @DB.lru_cache(0) def _get_next_oid(self, oid): """ Returns the next oid after passed oid. Note: for some reason unknown to me, gtk.TreeView or perhaps the GenericTreeModel finds it neccessary to iterate through every iter from the root node through n_children. Because of this, we will fetch row ids in sets of 1024 and cache them to speed things up. Parameters: oid -- the current oid. """ #first call is when oid=None if not oid: oid = -1 if GenericDBListStore.OID_CACHE: try: index = self.oidcache.index(oid) return self.oidcache[index+1] except (ValueError, IndexError): sql = "SELECT oid FROM %s WHERE oid >= %d LIMIT 1024" % (self.table, oid) oids = [oid for (oid,) in self.db.select(sql)] self.oidcache.extend(oids) self.oidcache = Utils.unique_list(self.oidcache) #if we can only get one result, we must be the last oid if len(oids) > 1: oid = oids[1] else: oid = None else: try: (oid,) = self.db.select_one("SELECT oid FROM %s WHERE oid > %d LIMIT 1" % (self.table, oid)) except TypeError: oid = None return oid def _get_offset(self, oid): """ Returns the offset of oid in the sqlite table. Parameters: oid -- the oid of the row to check """ (offset,) = self.db.select_one("SELECT COUNT(oid) FROM %s WHERE oid < %d" % (self.table, oid)) return offset def on_get_flags(self): """ Returns the gtk.TreeModelFlags for the gtk.TreeModel implementation. The gtk.TreeIter data is derived from the database oids for records and therefore is persistant across row deletion and inserts. """ return gtk.TREE_MODEL_LIST_ONLY | gtk.TREE_MODEL_ITERS_PERSIST def on_get_n_columns(self): """ Returns the number of columns found in the table metadata. """ return len(self.columns) def on_get_column_type(self, index): """ All columns in sqlite are accessed via (char*). Therefore, all of our column types will pass that right along and allow the consumers to typecast as needed. """ return gobject.TYPE_STRING def on_get_iter(self, path): """ Traslates a gtk.TreePath to a gtk.TreeIter. This is done by finding the oid for the row in the database at the same offset as the path. """ if len(path) > 1: return None #We are a list not a tree try: return self._get_oid(path[0]) except TypeError: return None #DB is empty def on_get_path(self, rowref): """ Returns the rowrefs offset in the table which is used to generate the gtk.TreePath. """ return self._get_offset(rowref) def on_get_value(self, rowref, column): """ Returns the data for a rowref at the givin column. Parameters: rowref -- the rowref passed back in the on_get_iter method. column -- the integer offset of the column desired. """ if column > len(self.columns): return None if column == 0: return rowref return self._get_value(rowref, column) def on_iter_next(self, rowref): """ Returns the next oid found in the sqlite table. Parameters: rowref -- the oid of the current iter. """ return self._get_next_oid(rowref) def on_iter_children(self, rowref): """ Retruns children for a given rowref. This will always be None unless the rowref is None, which is our root node. Parameters: rowref -- the oid of the desired row. """ if rowref: return None return self._get_next_oid(-1) def on_iter_has_child(self, rowref): """ Always returns False as List based TreeModels do not have children. """ return False def on_iter_n_children(self, rowref): """ Returns the number of children a row has. Since only the root node may have children, we return 0 unless the request is made for the count of all rows. Requesting the row count is done by passing None as the rowref. """ if rowref: return 0 return self._get_n_rows() def on_iter_nth_child(self, rowref, n): """ Returns the oid of the nth child from rowref. This will only return a value if rowref is None, which is the root node. Parameters: rowref -- the oid of the row. n -- the row offset to retrieve. """ if rowref: return None return self._get_oid(n) def on_iter_parent(self, child): """ Always returns None as lists do not have parent nodes. """ return None conduit-0.3.17/conduit/gtkui/MsgArea.py0000644000175000017500000002155111172176633014664 00000000000000# This file is part of the Hotwire Shell user interface. # # Copyright (C) 2007,2008 Colin Walters # # 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 import os, sys, re, logging, string import gtk, gobject, pango #from hotssh.hotlib.logutil import log_except #_logger = logging.getLogger("hotwire.ui.MsgArea") # This file is a Python translation of gedit/gedit/gedit-message-area.c class MsgArea(gtk.HBox): __gsignals__ = { "response" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_INT,)), "close" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, []) } def __init__(self, buttons, **kwargs): super(MsgArea, self).__init__(**kwargs) self.__contents = None self.__changing_style = False self.__main_hbox = gtk.HBox(False, 16) # FIXME: use style properties self.__main_hbox.show() self.__main_hbox.set_border_width(8) # FIXME: use style properties self.__action_area = gtk.HBox(True, 4); # FIXME: use style properties self.__action_area.show() #Pack the buttons into a VBox so they remain the same height and do #not expand to be the same size as the Primary + Secondary text vb = gtk.VBox() vb.pack_end(self.__action_area, False, False) self.__main_hbox.pack_end (vb, False, False, 0) self.pack_start(self.__main_hbox, True, True, 0) self.set_app_paintable(True) self.connect("expose-event", self.__paint) # Note that we connect to style-set on one of the internal # widgets, not on the message area itself, since gtk does # not deliver any further style-set signals for a widget on # which the style has been forced with gtk_widget_set_style() self.__main_hbox.connect("style-set", self.__on_style_set) self.add_buttons(buttons) def __get_response_data(self, w, create): d = w.get_data('hotwire-msg-area-data') if (d is None) and create: d = {'respid': None} w.set_data('hotwire-msg-area-data', d) return d def __find_button(self, respid): children = self.__actionarea.get_children() for child in children: rd = self.__get_response_data(child, False) if rd is not None and rd['respid'] == respid: return child def __close(self): cancel = self.__find_button(gtk.RESPONSE_CANCEL) if cancel is None: return self.response(gtk.RESPONSE_CANCEL) def __paint(self, w, event): gtk.Style.paint_flat_box(w.style, w.window, gtk.STATE_NORMAL, gtk.SHADOW_OUT, None, w, "tooltip", w.allocation.x + 1, w.allocation.y + 1, w.allocation.width - 2, w.allocation.height - 2) return False def __on_style_set(self, w, style): if self.__changing_style: return # This is a hack needed to use the tooltip background color window = gtk.Window(gtk.WINDOW_POPUP); window.set_name("gtk-tooltip") window.ensure_style() style = window.get_style() self.__changing_style = True self.set_style(style) self.__changing_style = False window.destroy() self.queue_draw() def __get_response_for_widget(self, w): rd = self.__get_response_data(w, False) if rd is None: return gtk.RESPONSE_NONE return rd['respid'] def __on_action_widget_activated(self, w): response_id = self.__get_response_for_widget(w) self.response(response_id) def add_action_widget(self, child, respid): rd = self.__get_response_data(child, True) rd['respid'] = respid if not isinstance(child, gtk.Button): raise ValueError("Can only pack buttons as action widgets") child.connect('clicked', self.__on_action_widget_activated) if respid != gtk.RESPONSE_HELP: self.__action_area.pack_start(child, False, False, 0) else: self.__action_area.pack_end(child, False, False, 0) def set_contents(self, contents): self.__contents = contents self.__main_hbox.pack_start(contents, True, True, 0) def add_button(self, btext, respid): button = gtk.Button(stock=btext) button.set_focus_on_click(False) button.set_flags(gtk.CAN_DEFAULT) button.show() self.add_action_widget(button, respid) return button def add_buttons(self, args): #_logger.debug("init buttons: %r", args) for (btext, respid) in args: self.add_button(btext, respid) def set_response_sensitive(self, respid, setting): for child in self.__action_area.get_children(): rd = self.__get_response_data(child, False) if rd is not None and rd['respid'] == respid: child.set_sensitive(setting) break def set_default_response(self, respid): for child in self.__action_area.get_children(): rd = self.__get_response_data(child, False) if rd is not None and rd['respid'] == respid: child.grab_default() break def response(self, respid): self.emit('response', respid) def add_stock_button_with_text(self, text, stockid, respid): b = gtk.Button(label=text) b.set_focus_on_click(False) img = gtk.Image() img.set_from_stock(stockid, gtk.ICON_SIZE_BUTTON) b.set_image(img) b.show_all() self.add_action_widget(b, respid) return b def set_text_and_icon(self, stockid, primary_text, secondary_text=None): hbox_content = gtk.HBox(False, 8) hbox_content.show() image = gtk.Image() image.set_from_stock(stockid, gtk.ICON_SIZE_BUTTON) image.show() hbox_content.pack_start(image, False, False, 0) image.set_alignment(0.5, 0.5) vbox = gtk.VBox(False, 6) vbox.show() hbox_content.pack_start (vbox, True, True, 0) primary_markup = "%s" % (primary_text,) primary_label = gtk.Label(primary_markup) primary_label.show() vbox.pack_start(primary_label, True, True, 0) primary_label.set_use_markup(True) primary_label.set_line_wrap(True) primary_label.set_alignment(0, 0.5) primary_label.set_flags(gtk.CAN_FOCUS) primary_label.set_selectable(True) if secondary_text: secondary_markup = "%s" % (secondary_text,) secondary_label = gtk.Label(secondary_markup) secondary_label.show() vbox.pack_start(secondary_label, True, True, 0) secondary_label.set_flags(gtk.CAN_FOCUS) secondary_label.set_use_markup(True) secondary_label.set_line_wrap(True) secondary_label.set_selectable(True) secondary_label.set_alignment(0, 0.5) self.set_contents(hbox_content) class MsgAreaController(gtk.HBox): def __init__(self): super(MsgAreaController, self).__init__() self.__msgarea = None def _timeout(self, msgarea): if msgarea == self.__msgarea: self.clear() def clear(self): if self.__msgarea is not None: self.remove(self.__msgarea) self.__msgarea.destroy() self.__msgarea = None def new_from_text_and_icon(self, stockid, primary, secondary=None, buttons=[], timeout=0): self.clear() msgarea = self.__msgarea = MsgArea(buttons) msgarea.set_text_and_icon(stockid, primary, secondary) self.pack_start(msgarea, expand=True) if timeout: gobject.timeout_add(timeout*1000, self._timeout, msgarea) return msgarea conduit-0.3.17/conduit/gtkui/UI.py0000644000175000017500000007656411321403566013672 00000000000000""" Draws the applications main window Also manages the callbacks from menu and GUI items Copyright: John Stowers, 2006 License: GPLv2 """ import thread import gobject import gtk import os.path import gettext import threading from gettext import gettext as _ import logging log = logging.getLogger("gtkui.UI") import conduit import conduit.Web as Web import conduit.Conduit as Conduit import conduit.utils.AutostartManager as AutostartManager import conduit.gtkui.Canvas as Canvas import conduit.gtkui.MsgArea as MsgArea import conduit.gtkui.Tree as Tree import conduit.gtkui.ConflictResolver as ConflictResolver import conduit.gtkui.Database as Database def N_(message): return message DEVELOPER_WEB_LINKS = ( #name, #url (N_("Introduction"), "http://www.conduit-project.org/wiki/Development"), (N_("Writing a Data Provider"), "http://www.conduit-project.org/wiki/WritingADataProvider"), (N_("API Documentation"), "http://doc.conduit-project.org/conduit/"), (N_("Test Results"), "http://tests.conduit-project.org/") ) #set up the gettext system and locales for module in (gettext,): module.bindtextdomain('conduit', conduit.LOCALE_DIR) module.textdomain('conduit') if hasattr(module, 'bind_textdomain_codeset'): module.bind_textdomain_codeset('conduit','UTF-8') class _PreconfiguredConduitMenu: """ Manages the list of preconfigured conduits examples """ def __init__(self): self.menu = gtk.Menu() self.item = gtk.ImageMenuItem(_("Examples")) self.item.set_image( gtk.image_new_from_stock(gtk.STOCK_OPEN,gtk.ICON_SIZE_MENU)) self.item.set_submenu(self.menu) #FIXME: Add remove items when dps become availalbe # self._items = {} # conduit.GLOBALS.moduleManager.connect("dataprovider-available", self._dp_added) # conduit.GLOBALS.moduleManager.connect("dataprovider-unavailable", self._dp_removed) preconfigured = conduit.GLOBALS.moduleManager.list_preconfigured_conduits() if preconfigured: for sok,sik,desc,w in preconfigured: item = gtk.MenuItem(desc) item.connect("activate", self._create, sok, sik, w) item.show() self.menu.append(item) else: self.item.set_sensitive(False) def _create(self, menu, sok, sik, w): self.syncSet.create_preconfigured_conduit(sok,sik,w) def _dp_added(self, manager, dpw): item = gtk.MenuItem(dpw.get_key()) self._items[dpw] = item self.menu.append(item) item.show() def _dp_removed(self, manager, dpw): self.menu.remove(self._items[dpw]) def set_sync_set(self, syncSet): self.syncSet = syncSet class _GtkBuilderWrapper(gtk.Builder): def __init__(self, *path): gtk.Builder.__init__(self) self.add_from_file(os.path.join(*path)) self._resources = {} def set_instance_resources(self, obj, *resources): for r in resources: setattr(obj, "_%s" % r.lower(), self.get_resource(r)) def get_object(self, name): if name not in self._resources: w = gtk.Builder.get_object(self,name) if not w: raise Exception("Could not find widget: %s" % name) self._resources[name] = w return self._resources[name] def connect_signals(self, obj): #FIXME: connect_signals seems to be only able to be called once missing = gtk.Builder.connect_signals(self, obj) if missing: log.critical("Failed to connect signals: %s" % ",".join(missing)) class PreferencesWindow: NOTEBOOK_FIXED_PAGES = 3 def __init__(self, gtkbuilder): self._gtkbuilder = gtkbuilder self._extra_pages = [] self._notebook = self._gtkbuilder.get_object("prop_notebook") self._autostartmanager = AutostartManager.AutostartManager() def _add_page(self, widget, label): self._notebook.append_page(widget,label) self._extra_pages.append(widget) def _remove_extra_pages(self): for w in self._extra_pages: pn = self._notebook.page_num(w) if pn >= self.NOTEBOOK_FIXED_PAGES: self._notebook.remove_page( pn ) def show(self, parent): def on_clear_button_clicked(sender, treeview, sqliteListStore): treeview.set_model(None) conduit.GLOBALS.mappingDB.delete() treeview.set_model(sqliteListStore) #Build some liststores to display CONVERT_FROM_MESSAGE = _("Convert from") CONVERT_INTO_MESSAGE = _("into") #reset the prefs window, removing all dynamically added pages self._remove_extra_pages() convertables = conduit.GLOBALS.typeConverter.get_convertables_list() converterListStore = gtk.ListStore( str ) for froms,tos in convertables: string = "%s %s %s %s" % (CONVERT_FROM_MESSAGE, froms, CONVERT_INTO_MESSAGE, tos) converterListStore.append( (string,) ) dataProviderListStore = gtk.ListStore( str, bool ) #get all dataproviders for i in conduit.GLOBALS.moduleManager.get_modules_by_type("sink","source","twoway"): dataProviderListStore.append(("Name: %s\nDescription: %s)" % (i.name, i.description), True)) #include files that could not be loaded for f in conduit.GLOBALS.moduleManager.invalidFiles: dataProviderListStore.append(("Error loading file: %s" % f, False)) #Show the DB contents to help debugging if conduit.IS_DEVELOPMENT_VERSION: vbox = gtk.VBox(False,5) #build the treeview to show all column fields. For performance #reasons it is fixed_height and fixed_FIXE treeview = gtk.TreeView() treeview.set_headers_visible(True) treeview.set_fixed_height_mode(True) index = 1 db = conduit.GLOBALS.mappingDB._db for name in db.get_fields("mappings"): column = gtk.TreeViewColumn( name, gtk.CellRendererText(), text=index) column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) column.set_fixed_width(250) treeview.append_column(column) index = index + 1 store = Database.GenericDBListStore("mappings", db) treeview.set_model(store) sw = gtk.ScrolledWindow() sw.add(treeview) vbox.pack_start(sw,True,True) clear = gtk.Button(None,gtk.STOCK_CLEAR) clear.connect("clicked", on_clear_button_clicked, treeview, store) vbox.pack_start(clear, False, False) self._add_page(vbox,gtk.Label(_('Relationship Database'))) converterTreeView = self._gtkbuilder.get_object("dataConversionsTreeView") converterTreeView.set_model(converterListStore) converterTreeView.append_column(gtk.TreeViewColumn(_("Conversions Available"), gtk.CellRendererText(), text=0) ) dataproviderTreeView = self._gtkbuilder.get_object("dataProvidersTreeView") dataproviderTreeView.set_model(dataProviderListStore) dataproviderTreeView.append_column(gtk.TreeViewColumn(_("Name"), gtk.CellRendererText(), text=0) ) dataproviderTreeView.append_column(gtk.TreeViewColumn(_("Loaded"), gtk.CellRendererToggle(), active=1) ) #fill out the configuration tab save_settings_check = self._gtkbuilder.get_object("save_settings_check") save_settings_check.set_active(conduit.GLOBALS.settings.get("save_on_exit")) status_icon_check = self._gtkbuilder.get_object("status_icon_check") status_icon_check.set_active(conduit.GLOBALS.settings.get("show_status_icon")) minimize_to_tray_check = self._gtkbuilder.get_object("minimize_to_tray_check") minimize_to_tray_check.set_active(conduit.GLOBALS.settings.get("gui_minimize_to_tray")) show_hints_check = self._gtkbuilder.get_object("show_hints_check") show_hints_check.set_active(conduit.GLOBALS.settings.get("gui_show_hints")) #special case start at login. Because we copy the desktop file from the #system to ~/.config/autostart, we require conduit to be installed start_at_login_check = self._gtkbuilder.get_object("start_at_login") if conduit.IS_INSTALLED: start_at_login_check.set_active(self._autostartmanager.is_start_at_login_enabled()) else: start_at_login_check.set_sensitive(False) #restore the current policy for policyName in Conduit.CONFLICT_POLICY_NAMES: currentValue = conduit.GLOBALS.settings.get("default_policy_%s" % policyName) for policyValue in Conduit.CONFLICT_POLICY_VALUES: name = "%s_%s" % (policyName,policyValue) widget = self._gtkbuilder.get_object(name+"_radio") widget.set_image( gtk.image_new_from_icon_name( Conduit.CONFLICT_POLICY_VALUE_ICONS[name], gtk.ICON_SIZE_MENU)) if currentValue == policyValue: widget.set_active(True) #The dataprovider factories can provide a configuration widget which is #packed into the notebook for i in conduit.GLOBALS.moduleManager.dataproviderFactories:#get_modules_by_type("dataprovider-factory"): widget = i.setup_configuration_widget() if widget: self._add_page( widget, gtk.Label(i.get_name())) #Show the dialog dialog = self._gtkbuilder.get_object("PreferencesDialog") dialog.show_all() dialog.set_transient_for(parent) response = dialog.run() if response == gtk.RESPONSE_OK: conduit.GLOBALS.settings.set("save_on_exit", save_settings_check.get_active()) conduit.GLOBALS.settings.set("show_status_icon", status_icon_check.get_active()) conduit.GLOBALS.settings.set("gui_minimize_to_tray", minimize_to_tray_check.get_active()) conduit.GLOBALS.settings.set("gui_show_hints", show_hints_check.get_active()) self._autostartmanager.update_start_at_login(start_at_login_check.get_active()) #save the current policy for policyName in Conduit.CONFLICT_POLICY_NAMES: for policyValue in Conduit.CONFLICT_POLICY_VALUES: name = "%s_%s" % (policyName,policyValue) if self._gtkbuilder.get_object(name+"_radio").get_active() == True: conduit.GLOBALS.settings.set( "default_policy_%s" % policyName, policyValue) #give the dataprovider factories to ability to save themselves for factory in conduit.GLOBALS.moduleManager.dataproviderFactories: factory.save_configuration(response == gtk.RESPONSE_OK) dialog.hide() class MainWindow: """ The main conduit window. """ def __init__(self, conduitApplication, moduleManager, typeConverter, syncManager): """ Constructs the mainwindow. Throws up a splash screen to cover the most time consuming pieces """ #add some additional dirs to the icon theme search path so that #modules can provider their own icons icon_dirs = [ conduit.SHARED_DATA_DIR, conduit.SHARED_MODULE_DIR, os.path.join(conduit.SHARED_DATA_DIR,"icons"), os.path.join(conduit.USER_DIR, "modules") ] for i in icon_dirs: gtk.icon_theme_get_default().prepend_search_path(i) gtk.window_set_default_icon_name("conduit") signals = { "on_mainwindow_delete" : self.on_window_closed, "on_mainwindow_state_event" : self.on_window_state_event, "on_synchronize_activate" : self.on_synchronize_all_clicked, "on_cancel_activate" : self.on_cancel_all_clicked, "on_quit_activate" : self.on_window_closed, "on_clear_canvas_activate" : self.on_clear_canvas, "on_preferences_activate" : self.on_conduit_preferences, "on_about_activate" : self.on_about_conduit, "on_contents_activate" : self.on_help, "on_save1_activate" : self.save_settings, } self.conduitApplication = conduitApplication self.builder = _GtkBuilderWrapper(conduit.SHARED_DATA_DIR, "conduit.ui") self.builder.connect_signals(signals) #type converter and sync manager self.type_converter = typeConverter self.sync_manager = syncManager #Initialize the mainWindow self.mainWindow = self.builder.get_object("MainWindow") #Enable RGBA colormap if conduit.GLOBALS.settings.get("gui_use_rgba_colormap") == True: screen = self.mainWindow.get_screen() colormap = screen.get_rgba_colormap() if colormap: gtk.widget_set_default_colormap(colormap) self.mainWindow.set_position(gtk.WIN_POS_CENTER) title = "Conduit" if conduit.IS_DEVELOPMENT_VERSION: title = title + _(" - %s (Development Version)") % conduit.VERSION if not conduit.IS_INSTALLED: title = title + _(" - Running Uninstalled") self.mainWindow.set_title(title) #Configure canvas self.canvasSW = self.builder.get_object("canvasScrolledWindow") self.hpane = self.builder.get_object("hpaned1") #start up the canvas msg = MsgArea.MsgAreaController() self.builder.get_object("mainVbox").pack_start(msg, False, False) self.canvas = Canvas.Canvas( parentWindow=self.mainWindow, typeConverter=self.type_converter, syncManager=self.sync_manager, gtkbuilder=self.builder, msg=msg ) self.canvasSW.add(self.canvas) self.canvas.connect('drag-drop', self.drop_cb) self.canvas.connect("drag-data-received", self.drag_data_received_data) # Populate the tree model self.dataproviderTreeModel = Tree.DataProviderTreeModel() dataproviderScrolledWindow = self.builder.get_object("scrolledwindow2") self.dataproviderTreeView = Tree.DataProviderTreeView(self.dataproviderTreeModel) dataproviderScrolledWindow.add(self.dataproviderTreeView) #Set up the expander used for resolving sync conflicts self.conflictResolver = ConflictResolver.ConflictResolver(self.builder) #Preferences manager self.preferences = PreferencesWindow(self.builder) #add the preconfigured Conduit menu if conduit.GLOBALS.settings.get("gui_show_hints"): self.preconfiguredConduitsMenu = _PreconfiguredConduitMenu() self.builder.get_object("file_menu").insert(self.preconfiguredConduitsMenu.item, 3) else: self.preconfiguredConduitsMenu = None #if running a development version, add some developer specific links #to the help menu if conduit.IS_DEVELOPMENT_VERSION: helpMenu = self.builder.get_object("help_menu") developersMenuItem = gtk.ImageMenuItem(_("Developers")) developersMenuItem.set_image( gtk.image_new_from_icon_name( "applications-development", gtk.ICON_SIZE_MENU)) developersMenu = gtk.Menu() developersMenuItem.set_submenu(developersMenu) helpMenu.prepend(developersMenuItem) for name,url in DEVELOPER_WEB_LINKS: item = gtk.ImageMenuItem(_(name)) item.set_image( gtk.image_new_from_icon_name( "applications-internet", gtk.ICON_SIZE_MENU)) item.connect("activate",self.on_developer_menu_item_clicked,_(name),url) developersMenu.append(item) #final GUI setup self.cancelSyncButton = self.builder.get_object('cancel') self.hpane.set_position(conduit.GLOBALS.settings.get("gui_hpane_postion")) self.dataproviderTreeView.set_expand_rows() self.window_state = 0 log.info("Main window constructed (thread: %s)" % thread.get_ident()) def _ui_get_resource(self, name): if name not in self.builder_resources: w = self.builder.get_object(name) if not w: raise Exception("Could not find widget: %s" % name) self.builder_resources[name] = w return self.builder_resources[name] def on_developer_menu_item_clicked(self, menuitem, name, url): threading.Thread( target=Web.LoginMagic, args=(name, url), kwargs={"login_function":lambda: True} ).start() def on_conduit_added(self, syncset, cond): cond.connect("sync-started", self.on_sync_started) cond.connect("sync-completed", self.on_sync_completed) cond.connect("sync-conflict", self.conflictResolver.on_conflict) def set_model(self, syncSet): self.syncSet = syncSet self.syncSet.connect("conduit-added", self.on_conduit_added) self.canvas.set_sync_set(syncSet) if self.preconfiguredConduitsMenu: self.preconfiguredConduitsMenu.set_sync_set(syncSet) def present(self): """ Present the main window. Enjoy your window """ log.debug("Presenting GUI") self.mainWindow.show_all() self.mainWindow.present() def minimize_to_tray(self): """ Iconifies the main window """ log.debug("Iconifying GUI") self.mainWindow.hide() def is_visible(self): """ Returns True if mainWindow is visible (not minimized or withdrawn) """ minimized = self.window_state & gtk.gdk.WINDOW_STATE_ICONIFIED return (not minimized) and self.mainWindow.get_property('visible') def on_sync_started(self, thread): self.cancelSyncButton.set_property("sensitive", True) def on_sync_completed(self, thread, aborted, error, conflict): self.cancelSyncButton.set_property( "sensitive", conduit.GLOBALS.syncManager.is_busy() ) def on_synchronize_all_clicked(self, widget): """ Synchronize all valid conduits on the canvas """ self.conduitApplication.Synchronize() def on_cancel_all_clicked(self, widget): """ Cancels all currently runnings syncs """ self.conduitApplication.Cancel() def on_clear_canvas(self, widget): """ Clear the canvas and start a new sync set """ self.canvas.clear_canvas() def on_conduit_preferences(self, widget): """ Show the properties of the current sync set (status, conflicts, etc Edit the sync specific properties """ self.preferences.show(self.mainWindow) def on_about_conduit(self, widget): """ Display about dialog """ dialog = AboutDialog() dialog.set_transient_for(self.mainWindow) dialog.run() dialog.destroy() def on_help(self, widget): """ Display help """ if conduit.IS_INSTALLED: uri = "ghelp:conduit" else: #if we are not installed then launch the ghelp uri with a full path uri = "ghelp:%s" % os.path.join(conduit.DIRECTORY,"help","C","conduit.xml") log.debug("Launching help: %s" % uri) if gtk.gtk_version >= (2,14,0): gtk.show_uri( self.mainWindow.get_screen(), uri, gtk.get_current_event_time()) else: gobject.spawn_async( argv=("xdg-open",uri), flags=gobject.SPAWN_SEARCH_PATH | gobject.SPAWN_STDOUT_TO_DEV_NULL | gobject.SPAWN_STDERR_TO_DEV_NULL ) def on_window_state_event(self, widget, event): visible = self.is_visible() self.window_state = event.new_window_state if self.window_state & gtk.gdk.WINDOW_STATE_ICONIFIED and visible: if conduit.GLOBALS.settings.get("gui_minimize_to_tray"): self.minimize_to_tray() def on_window_closed(self, widget, event=None): """ Check if there are any synchronizations currently in progress and ask the user if they wish to cancel them """ busy = False quit = False for c in self.syncSet.get_all_conduits(): if c.is_busy(): busy = True if busy: dialog = gtk.MessageDialog( self.mainWindow, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO,_("Synchronization in progress. Do you want to cancel it?") ) response = dialog.run() if response == gtk.RESPONSE_YES: quit = True else: #Dont exit dialog.destroy() return True else: quit = True #OK, if we have decided to quit then call quit on the #DBus interface which will tidy up any pending running #non gui tasks if quit: self.conduitApplication.Quit() def drop_cb(self, wid, context, x, y, time): """ drop cb """ if context.targets: target = context.targets[0] else: # FIXME: work-around for a bug in PyGTK on OSX: # http://bugzilla.gnome.org/show_bug.cgi?id=588643 target = 'conduit/element-name' self.canvas.drag_get_data(context, target, time) return True def drag_data_received_data(self, treeview, context, x, y, selection, info, etime): """ DND """ dataproviderKey = selection.data #FIXME: DnD should be cancelled in the Treeview on the drag-begin #signal and NOT here if dataproviderKey != "": #adjust for scrolled window offset scroll = self.canvasSW.get_vadjustment().get_value() #Add a new instance if the dataprovider to the canvas. new = conduit.GLOBALS.moduleManager.get_module_wrapper_with_instance(dataproviderKey) self.canvas.add_dataprovider_to_canvas( dataproviderKey, new, x, int(scroll) + y ) context.finish(True, True, etime) return def save_settings(self, widget): """ Saves the application settings to an XML document. Saves the GUI settings (window state, position, etc to gconf) """ #save the canvas self.syncSet.save_to_xml() #GUI settings conduit.GLOBALS.settings.set( "gui_hpane_postion", self.hpane.get_position()) conduit.GLOBALS.settings.set( "gui_window_size", self.mainWindow.get_size()) conduit.GLOBALS.settings.set( "gui_expanded_rows", self.dataproviderTreeView.get_expanded_rows()) class SplashScreen: """ Simple splash screen class which shows an image for a predetermined period of time or until L{SplashScreen.destroy} is called. Code adapted from banshee """ DELAY = 1500 #msec def __init__(self): """ Constructor """ #If false the main window should call destroy() to remove the splash self.destroyed = True def show(self): """ Builds the splashscreen and connects the splash window to be destroyed via a timeout callback in L{SplashScreen.DELAY}msec time. The splash can also be destroyed manually by the application """ self.wSplash = gtk.Window(gtk.WINDOW_POPUP) self.wSplash.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_SPLASHSCREEN) self.wSplash.set_decorated(False) wSplashScreen = gtk.Image() wSplashScreen.set_from_file(os.path.join(conduit.SHARED_DATA_DIR,"conduit-splash.png")) # Make a pretty frame wSplashFrame = gtk.Frame() wSplashFrame.set_shadow_type(gtk.SHADOW_OUT) wSplashFrame.add(wSplashScreen) self.wSplash.add(wSplashFrame) # OK throw up the splashscreen self.wSplash.set_position(gtk.WIN_POS_CENTER) #The splash screen is destroyed automatically (via timeout) #or when the application is finished loading self.destroyed = False self.wSplash.show_all() # ensure it is rendered immediately while gtk.events_pending(): gtk.main_iteration() # The idle timeout handler to destroy the splashscreen gobject.timeout_add(SplashScreen.DELAY,self.destroy) def destroy(self): """ Destroys the splashscreen. Can be safely called manually (prior to) or via the timer callback """ if not self.destroyed: self.wSplash.destroy() self.destroyed = True class AboutDialog(gtk.AboutDialog): def __init__(self): gtk.AboutDialog.__init__(self) self.set_name("Conduit") self.set_version(conduit.VERSION) self.set_comments("Synchronisation for GNOME") self.set_website("http://www.conduit-project.org") self.set_authors([ "John Stowers", "John Carr", "Thomas Van Machelen", "Jonny Lamb", "Alexandre Rosenfeld"]) self.set_artists([ "John Stowers", "mejogid", "The Tango Project (http://tango.freedesktop.org)"]) self.set_logo_icon_name("conduit") class StatusIcon(gtk.StatusIcon): def __init__(self, conduitApplication): gtk.StatusIcon.__init__(self) #we need some custom icons gtk.icon_theme_get_default().prepend_search_path(conduit.SHARED_DATA_DIR) self.conduitApplication = conduitApplication menu = ''' ''' actions = [ ('Menu', None, 'Menu'), ('Sync', gtk.STOCK_EXECUTE, _("_Synchronize All"), None, _("Synchronizes All Groups"), self.on_synchronize), ('Cancel', gtk.STOCK_CANCEL, _("_Cancel Synchronization"), None, _("Cancels Currently Synchronizing Groups"), self.on_cancel), ('Quit', gtk.STOCK_QUIT, _("_Quit"), None, _("Close Conduit"), self.on_quit)] ag = gtk.ActionGroup('Actions') ag.add_actions(actions) self.manager = gtk.UIManager() self.manager.insert_action_group(ag, 0) self.manager.add_ui_from_string(menu) self.menu = self.manager.get_widget('/Menubar/Menu/Quit').props.parent self.cancelButton = self.manager.get_widget('/Menubar/Menu/Cancel') self.connect('popup-menu', self.on_popup_menu) self.connect('activate', self.on_click) self.animating = False self.check_animate = False self.conflict = False self.animated_idx = 0 self.animated_icons = range(1,8) #start with the application icon self.cancelButton.set_property("sensitive", False) self.set_from_icon_name("conduit") self.set_tooltip("Conduit") self.set_visible(True) def _animate_icon_timeout(self): #FIXME: When will gtk support animated gtk status icons? if self.animating: if self.animated_idx == self.animated_icons[-1]: self.animated_idx = 1 else: self.animated_idx += 1 self.set_from_icon_name("conduit-progress-%d" % self.animated_idx) # re-check animation? if self.check_animate: self.animating = conduit.GLOBALS.syncManager.is_busy() self.check_animate = False return True else: if self.conflict: self.set_from_icon_name("dialog-error") self.set_tooltip(_("Synchronization Error")) else: self.set_from_icon_name("conduit") self.set_tooltip(_("Synchronization Complete")) self.conflict = False self.cancelButton.set_property("sensitive", False) return False def _on_sync_started(self, cond): if not self.animating: self.animating = True self.set_tooltip(_("Synchronizing")) self.cancelButton.set_property("sensitive", True) gobject.timeout_add(100, self._animate_icon_timeout) def _on_sync_completed(self, cond, aborted, error, conflict): # check need for animation on next iteration self.check_animate = True def _on_sync_conflict(self, cond, conflict): self.conflict = True def on_conduit_added(self, syncset, cond): cond.connect("sync-started", self._on_sync_started) cond.connect("sync-completed", self._on_sync_completed) cond.connect("sync-conflict", self._on_sync_conflict) def on_conduit_removed(self, syncset, cond): pass def on_synchronize(self, data): self.conduitApplication.Synchronize() def on_cancel(self, data): self.conduitApplication.Cancel() def on_popup_menu(self, status, button, time): self.menu.popup(None, None, gtk.status_icon_position_menu, button, time, data=status) def on_quit(self, data): self.conduitApplication.Quit() def on_click(self, status): if self.conduitApplication.HasGUI(): if self.conduitApplication.gui.is_visible(): self.conduitApplication.gui.minimize_to_tray() else: self.conduitApplication.gui.present() else: self.conduitApplication.BuildGUI() self.conduitApplication.ShowGUI() def main_loop(): gtk.main() def main_quit(): gtk.main_quit() conduit-0.3.17/conduit/gtkui/Canvas.py0000644000175000017500000015736111321403566014563 00000000000000""" Manages adding, removing, resizing and drawing the canvas The Canvas is the main area in Conduit, the area to which DataProviders are dragged onto. Copyright: John Stowers, 2006 License: GPLv2 """ import cairo import goocanvas import gtk import pango from gettext import gettext as _ import logging log = logging.getLogger("gtkui.Canvas") import conduit.utils as Utils import conduit.Conduit as Conduit import conduit.Knowledge as Knowledge import conduit.gtkui.Tree import conduit.gtkui.Util as GtkUtil import conduit.dataproviders.DataProvider as DataProvider import conduit.gtkui.WindowConfigurator as WindowConfigurator import conduit.gtkui.ConfigContainer as ConfigContainer log.info("Module Information: %s" % Utils.get_module_information(goocanvas, "pygoocanvas_version")) class _StyleMixin: def _get_colors_and_state(self, styleName, stateName): style = self.get_gtk_style() if style: colors = getattr(style, styleName.lower(), None) state = getattr(gtk, "STATE_%s" % stateName.upper(), None) else: colors = None state = None return colors,state def get_gtk_style(self): """ @returns: The gtk.Style for the widget """ #not that clean, we can be mixed into the #canvas, or a canvas item try: return self.get_canvas().style except AttributeError: try: return self.style except AttributeError: return None def get_style_color_rgb(self, styleName, stateName): colors,state = self._get_colors_and_state(styleName, stateName) if colors != None and state != None: return GtkUtil.gdk2rgb(colors[state]) else: return GtkUtil.gdk2rgb(GtkUtil.str2gdk("red")) def get_style_color_rgba(self, styleName, stateName, a=1): colors,state = self._get_colors_and_state(styleName, stateName) if colors != None and state != None: return GtkUtil.gdk2rgba(colors[state], a) else: return GtkUtil.gdk2rgba(GtkUtil.str2gdk("red"), a) def get_style_color_int_rgb(self, styleName, stateName): colors,state = self._get_colors_and_state(styleName, stateName) if colors != None and state != None: return GtkUtil.gdk2intrgb(colors[state]) else: return GtkUtil.gdk2intrgb(GtkUtil.str2gdk("red")) def get_style_color_int_rgba(self, styleName, stateName, a=1): colors,state = self._get_colors_and_state(styleName, stateName) if colors != None and state != None: return GtkUtil.gdk2intrgba(colors[state], int(a*255)) else: return GtkUtil.gdk2intrgba(GtkUtil.str2gdk("red"), int(a*255)) class _CanvasItem(goocanvas.Group, _StyleMixin): #attributes common to Conduit and Dataprovider items RECTANGLE_RADIUS = 4.0 def __init__(self, parent, model): #FIXME: If parent is None in base constructor then goocanvas segfaults #this means a ref to items may be kept so this may leak... goocanvas.Group.__init__(self, parent=parent) self.model = model #this little piece of magic re-applies style properties to the #widgets, when the users theme changes canv = self.get_canvas() if canv: canv.connect("style-set", self._automatic_style_updater) def _automatic_style_updater(self, *args): if not self.get_gtk_style(): #while in the midst of changing theme, the style is sometimes #None, but dont worry, we will get called again return for attr in self.get_styled_item_names(): item = getattr(self, attr, None) if item: item.set_properties( **self.get_style_properties(attr) ) def get_height(self): b = self.get_bounds() return b.y2-b.y1 def get_width(self): b = self.get_bounds() return b.x2-b.x1 def get_top(self): b = self.get_bounds() return b.y1 def get_bottom(self): b = self.get_bounds() return b.y2 def get_left(self): b = self.get_bounds() return b.x1 def get_right(self): b = self.get_bounds() return b.x2 def get_styled_item_names(self): raise NotImplementedError def get_style_properties(self, specifier): raise NotImplementedError class Canvas(goocanvas.Canvas, _StyleMixin): """ This class manages many objects """ DND_TARGETS = [ ('conduit/element-name', 0, 0) ] WELCOME_MESSAGE = _("Drag a Data Provider here to continue") def __init__(self, parentWindow, typeConverter, syncManager, gtkbuilder, msg): """ Draws an empty canvas of the appropriate size """ #setup the canvas goocanvas.Canvas.__init__(self) self.set_bounds(0, 0, conduit.GLOBALS.settings.get("gui_initial_canvas_width"), conduit.GLOBALS.settings.get("gui_initial_canvas_height") ) self.set_size_request( conduit.GLOBALS.settings.get("gui_initial_canvas_width"), conduit.GLOBALS.settings.get("gui_initial_canvas_height") ) self.root = self.get_root_item() self.sync_manager = syncManager self.typeConverter = typeConverter self.parentWindow = parentWindow self.msg = msg self.configurator = WindowConfigurator.WindowConfigurator(self.parentWindow) self._setup_popup_menus(gtkbuilder) #set up DND from the treeview self.drag_dest_set( gtk.gdk.BUTTON1_MASK | gtk.gdk.BUTTON3_MASK, self.DND_TARGETS, gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_LINK) self.connect('drag-motion', self.on_drag_motion) self.connect('size-allocate', self._canvas_resized) #track theme chages for canvas background self.connect('realize', self._update_for_theme) #We need a flag becuase otherwise we recurse forever. #It appears that setting background_color_rgb in the #sync-set handler causes sync-set to be emitted again, and again... self._changing_style = False self.connect("style-set", self._update_for_theme) #keeps a reference to the currently selected (most recently clicked) #canvas items self.selectedConduitItem = None self.selectedDataproviderItem = None #model is a SyncSet, not set till later because it is loaded from xml self.model = None #Show a friendly welcome message on the canvas the first time the #application is launched self.welcome = None self._maybe_show_welcome() def _do_hint(self, msgarea, respid): if respid == Knowledge.HINT_BLANK_CANVAS: new = conduit.GLOBALS.moduleManager.get_module_wrapper_with_instance("FolderTwoWay") self.add_dataprovider_to_canvas( "FolderTwoWay", new, 1,1 ) def _make_hint(self, hint, timeout=4): if Knowledge.HINT_TEXT[hint][2]: buttons = [(_("Show me"), hint)] else: buttons = [] h = self.msg.new_from_text_and_icon( gtk.STOCK_INFO, _(Knowledge.HINT_TEXT[hint][0]), _(Knowledge.HINT_TEXT[hint][1]), buttons=buttons, timeout=timeout) h.connect("response", self._do_hint) h.show_all() def _show_hint(self, conduitCanvasItem, dataproviderCanvasItem, newItem): if not self.msg: return if not conduit.GLOBALS.settings.get("gui_show_hints"): return if newItem == conduitCanvasItem: if conduitCanvasItem.model.can_sync(): self._make_hint(Knowledge.HINT_RIGHT_CLICK_CONFIGURE) else: self._make_hint(Knowledge.HINT_ADD_DATAPROVIDER) elif newItem == dataproviderCanvasItem: #check if we have a source and a sink if conduitCanvasItem.model.can_sync(): self._make_hint(Knowledge.HINT_RIGHT_CLICK_CONFIGURE) def _update_for_theme(self, *args): if not self.get_gtk_style() or self._changing_style: return self._changing_style = True self.set_property( "background_color_rgb", self.get_style_color_int_rgb("bg","normal") ) if self.welcome: self.welcome.set_property( "fill_color_rgba", self.get_style_color_int_rgba("text","normal") ) self._changing_style = False def _setup_popup_menus(self, gtkbuilder): self.dataproviderMenu = gtkbuilder.get_object("DataProviderMenu") self.conduitMenu = gtkbuilder.get_object("ConduitMenu") self.configureMenuItem = gtkbuilder.get_object("configure_dataprovider") self.twoWayMenuItem = gtkbuilder.get_object("two_way_sync") self.slowSyncMenuItem = gtkbuilder.get_object("slow_sync") self.autoSyncMenuItem = gtkbuilder.get_object("auto_sync") #connect the toggled signals self.twoWayMenuItem.connect("toggled", self.on_two_way_sync_toggle) self.slowSyncMenuItem.connect("toggled", self.on_slow_sync_toggle) self.autoSyncMenuItem.connect("toggled", self.on_auto_sync_toggle) #connect the dataprovider and conduit menu signals for widget in ( "delete_dataprovider", "configure_dataprovider", "refresh_dataprovider", "delete_conduit", "synchronize_conduit", "refresh_conduit"): gtkbuilder.get_object(widget).connect("activate", getattr(self, "on_%s_clicked" % widget)) #connect the conflict popups self.policyWidgets = {} for policyName in Conduit.CONFLICT_POLICY_NAMES: for policyValue in Conduit.CONFLICT_POLICY_VALUES: widgetName = "%s_%s" % (policyName,policyValue) #store the widget and connect to toggled signal widget = gtkbuilder.get_object(widgetName) widget.connect("toggled", self.on_policy_toggle, policyName, policyValue) self.policyWidgets[widgetName] = widget def _delete_welcome(self): idx = self.root.find_child(self.welcome) if idx != -1: self.root.remove_child(idx) self.welcome = None def _resize_welcome(self, width): self.welcome.set_width(width) def _create_welcome(self): c_x,c_y,c_w,c_h = self.get_bounds() self.welcome = ConduitCanvasItem( parent=self.root, model=None, width=c_w ) def _maybe_show_welcome(self): """ Adds a friendly welcome to the canvas. Only does so only if there are no conduits, otherwise it would just get in the way. """ if self.model == None or (self.model != None and self.model.num_conduits() == 0): if self.welcome == None: self._create_welcome() if self.msg and conduit.GLOBALS.settings.get("gui_show_hints"): self._make_hint(Knowledge.HINT_BLANK_CANVAS, timeout=0) elif self.welcome: self._delete_welcome() def _get_child_conduit_canvas_items(self): items = [] for i in range(0, self.root.get_n_children()): condItem = self.root.get_child(i) if isinstance(condItem, ConduitCanvasItem): if condItem != self.welcome: items.append(condItem) return items def _get_child_dataprovider_canvas_items(self): items = [] for c in self._get_child_conduit_canvas_items(): for i in range(0, c.get_n_children()): dpItem = c.get_child(i) if isinstance(dpItem, DataProviderCanvasItem): items.append(dpItem) return items def _canvas_resized(self, widget, allocation): self.set_bounds( 0,0, allocation.width, self._get_minimum_canvas_size(allocation.height) ) if self.welcome: self._resize_welcome(allocation.width) for i in self._get_child_conduit_canvas_items(): i.set_width(allocation.width) def _update_configuration(self, selectedItem): if not selectedItem: self.configurator.set_containers([]) return dps = [] for dpw in selectedItem.model.get_all_dataproviders(): if not dpw.module: continue container = dpw.module.get_config_container( configContainerKlass=ConfigContainer.ConfigContainer, name=dpw.get_name(), icon=dpw.get_icon(), configurator=self.configurator ) if container: dps.append(container) if dps: self.configurator.set_containers(dps) def _update_selection(self, selected_conduit, selected_dataprovider): changed_conduit = (selected_conduit != self.selectedConduitItem) if changed_conduit: self._update_configuration(selected_conduit) self.selectedDataproviderItem = selected_dataprovider self.selectedConduitItem = selected_conduit def _on_conduit_button_press(self, view, target, event): """ Handle button clicks on conduits """ self._update_selection(view, None) #right click if event.type == gtk.gdk.BUTTON_PRESS: if event.button == 3: #Preset the two way menu items sensitivity if not self.selectedConduitItem.model.can_do_two_way_sync(): self.twoWayMenuItem.set_property("sensitive", False) else: self.twoWayMenuItem.set_property("sensitive", True) #Set item ticked if two way sync enabled self.twoWayMenuItem.set_active(self.selectedConduitItem.model.is_two_way()) #Set item ticked if two way sync enabled self.slowSyncMenuItem.set_active(self.selectedConduitItem.model.slowSyncEnabled) #Set item ticked if two way sync enabled self.autoSyncMenuItem.set_active(self.selectedConduitItem.model.autoSyncEnabled) #Set the conflict and delete policy for policyName in Conduit.CONFLICT_POLICY_NAMES: policyValue = self.selectedConduitItem.model.get_policy(policyName) widgetName = "%s_%s" % (policyName,policyValue) self.policyWidgets[widgetName].set_active(True) #Show the menu if not self.selectedConduitItem.model.is_busy(): self.conduitMenu.popup( None, None, None, event.button, event.time ) #dont propogate the event return True def _on_dataprovider_button_press(self, view, target, event): """ Handle button clicks @param user_data_dataprovider_wrapper: The dpw that was clicked @type user_data_dataprovider_wrapper: L{conduit.Module.ModuleWrapper} """ self._update_selection(view.get_parent(), view) #single right click if event.type == gtk.gdk.BUTTON_PRESS: if event.button == 3: if view.model.enabled and not view.model.module.is_busy(): self.configureMenuItem.set_property("sensitive", view.model.configurable) #show the menu self.dataproviderMenu.popup( None, None, None, event.button, event.time ) #double left click elif event.type == gtk.gdk._2BUTTON_PRESS: if event.button == 1: if view.model.enabled and not view.model.module.is_busy(): if view.model.configurable: self.on_configure_dataprovider_clicked(None) #dont propogate the event return True def _get_bottom_of_conduits_coord(self): """ Gets the Y coordinate at the bottom of all visible conduits @returns: A coordinate (postivive down) from the canvas origin @rtype: C{int} """ y = 0.0 for i in self._get_child_conduit_canvas_items(): y = y + i.get_height() return y def _get_minimum_canvas_size(self, allocH=None): if not allocH: allocH = self.get_allocation().height bottom = self._get_bottom_of_conduits_coord() #return allocH-1 to stop vertical scroll bar return max(bottom + ConduitCanvasItem.WIDGET_HEIGHT + 20, allocH-1) def _remove_overlap(self): """ Moves the ConduitCanvasItems to stop them overlapping visually """ items = self._get_child_conduit_canvas_items() if len(items) > 0: #special case where the top one was deleted top = items[0].get_top()-(items[0].LINE_WIDTH/2) if top != 0.0: for item in items: #translate all those below item.translate(0,-top) else: for i in xrange(0, len(items)): try: overlap = items[i].get_bottom() - items[i+1].get_top() if overlap != 0.0: #translate all those below for item in items[i+1:]: item.translate(0,overlap) except IndexError: break def _check_if_dataprovider_needs_configuration(self, cond, dpw): if cond and not dpw.is_pending(): dp = dpw.module x,y = cond.get_dataprovider_position(dpw) if dp.is_configured( isSource=x==0, isTwoWay=cond.is_two_way()): dp.set_status(DataProvider.STATUS_NONE) else: dp.set_status(DataProvider.STATUS_DONE_SYNC_NOT_CONFIGURED) def get_selected_conduit(self): if self.selectedConduitItem: return self.selectedConduitItem.model else: return None def get_selected_dataprovider(self): if self.selectedDataproviderItem: return self.selectedDataproviderItem.model else: return None def on_conduit_removed(self, sender, conduitRemoved): for item in self._get_child_conduit_canvas_items(): if item.model == conduitRemoved: #remove the canvas item idx = self.root.find_child(item) if idx != -1: self.root.remove_child(idx) else: log.warn("Error finding item") self._remove_overlap() self._maybe_show_welcome() c_x,c_y,c_w,c_h = self.get_bounds() self.set_bounds( 0, 0, c_w, self._get_minimum_canvas_size() ) def on_conduit_added(self, sender, conduitAdded): """ Creates a ConduitCanvasItem for the new conduit """ #check for duplicates to eliminate race condition in set_sync_set if conduitAdded in [i.model for i in self._get_child_conduit_canvas_items()]: return c_x,c_y,c_w,c_h = self.get_bounds() #Create the item and move it into position bottom = self._get_bottom_of_conduits_coord() conduitCanvasItem = ConduitCanvasItem( parent=self.root, model=conduitAdded, width=c_w) conduitCanvasItem.connect('button-press-event', self._on_conduit_button_press) conduitCanvasItem.translate( conduitCanvasItem.LINE_WIDTH/2.0, bottom+(conduitCanvasItem.LINE_WIDTH/2.0) ) for dp in conduitAdded.get_all_dataproviders(): self.on_dataprovider_added(None, dp, conduitCanvasItem) conduitAdded.connect("dataprovider-added", self.on_dataprovider_added, conduitCanvasItem) conduitAdded.connect("dataprovider-removed", self.on_dataprovider_removed, conduitCanvasItem) self._maybe_show_welcome() self.set_bounds( 0, 0, c_w, self._get_minimum_canvas_size() ) self._show_hint(conduitCanvasItem, None, conduitCanvasItem) def on_dataprovider_removed(self, sender, dataproviderRemoved, conduitCanvasItem): for item in self._get_child_dataprovider_canvas_items(): if item.model == dataproviderRemoved: conduitCanvasItem.delete_dataprovider_canvas_item(item) self._remove_overlap() def on_dataprovider_added(self, sender, dataproviderAdded, conduitCanvasItem): """ Creates a DataProviderCanvasItem for the new dataprovider and adds it to the canvas """ #check for duplicates to eliminate race condition in set_sync_set if dataproviderAdded in [i.model for i in self._get_child_dataprovider_canvas_items()]: return item = DataProviderCanvasItem( parent=conduitCanvasItem, model=dataproviderAdded ) item.connect('button-press-event', self._on_dataprovider_button_press) conduitCanvasItem.add_dataprovider_canvas_item(item) self._remove_overlap() #The embed configurator needs notification when a new dataprovider #is added and the currently selected Conduit is being configured if self.selectedConduitItem == conduitCanvasItem: self._update_configuration(self.selectedConduitItem) self._show_hint(conduitCanvasItem, item, item) self._check_if_dataprovider_needs_configuration( conduitCanvasItem.model, dataproviderAdded ) def get_sync_set(self): return self.model def set_sync_set(self, syncSet): self.model = syncSet for c in self.model.get_all_conduits(): self.on_conduit_added(None, c) self.model.connect("conduit-added", self.on_conduit_added) self.model.connect("conduit-removed", self.on_conduit_removed) def on_drag_motion(self, wid, context, x, y, time): context.drag_status(gtk.gdk.ACTION_COPY, time) return True def on_delete_conduit_clicked(self, widget): """ Delete a conduit and all its associated dataproviders """ conduitCanvasItem = self.selectedConduitItem cond = conduitCanvasItem.model self.model.remove_conduit(cond) def on_refresh_conduit_clicked(self, widget): """ Refresh the selected conduit """ self.selectedConduitItem.model.refresh() def on_synchronize_conduit_clicked(self, widget): """ Synchronize the selected conduit """ self.selectedConduitItem.model.sync() def on_delete_dataprovider_clicked(self, widget): """ Delete the selected dataprovider """ dp = self.selectedDataproviderItem.model conduitCanvasItem = self.selectedDataproviderItem.get_parent() cond = conduitCanvasItem.model cond.delete_dataprovider(dp) def on_configure_dataprovider_clicked(self, widget): """ Calls the configure method on the selected dataprovider """ dpw = self.selectedDataproviderItem.model dp = dpw.module conduitCanvasItem = self.selectedDataproviderItem.get_parent() config_container = dp.get_config_container( configContainerKlass=ConfigContainer.ConfigContainer, name=dpw.get_name(), icon=dpw.get_icon(), configurator=self.configurator ) self.configurator.run(config_container) self._check_if_dataprovider_needs_configuration( conduitCanvasItem.model, dpw ) self.selectedDataproviderItem.update_appearance() def on_refresh_dataprovider_clicked(self, widget): """ Refreshes a single dataprovider """ dp = self.selectedDataproviderItem.model cond = self.selectedConduitItem.model cond.refresh_dataprovider(dp) def on_two_way_sync_toggle(self, widget): """ Enables or disables two way sync on dataproviders. """ if widget.get_active(): self.selectedConduitItem.model.enable_two_way_sync() else: self.selectedConduitItem.model.disable_two_way_sync() def on_slow_sync_toggle(self, widget): """ Enables or disables slow sync of dataproviders. """ if widget.get_active(): self.selectedConduitItem.model.enable_slow_sync() else: self.selectedConduitItem.model.disable_slow_sync() def on_auto_sync_toggle(self, widget): """ Enables or disables slow sync of dataproviders. """ if widget.get_active(): self.selectedConduitItem.model.enable_auto_sync() else: self.selectedConduitItem.model.disable_auto_sync() def on_policy_toggle(self, widget, policyName, policyValue): if widget.get_active(): self.selectedConduitItem.model.set_policy(policyName, policyValue) def add_dataprovider_to_canvas(self, key, dataproviderWrapper, x, y): """ Adds a new dataprovider to the Canvas @param module: The dataprovider wrapper to add to the canvas @type module: L{conduit.Module.ModuleWrapper}. @param x: The x location on the canvas to place the module widget @type x: C{int} @param y: The y location on the canvas to place the module widget @type y: C{int} @returns: The conduit that the dataprovider was added to """ parent = None existing = self.get_item_at(x,y,False) c_x,c_y,c_w,c_h = self.get_bounds() #if the user dropped on the right half of the canvas try add into the sink position if x < (c_w/2): trySourceFirst = True else: trySourceFirst = False #recurse up the canvas objects to determine if we have been dropped #inside an existing conduit if existing: parent = existing.get_parent() while parent != None and not parent == self.welcome and not isinstance(parent, ConduitCanvasItem): parent = parent.get_parent() #if we were dropped on the welcome message we first remove that if parent and parent == self.welcome: self._delete_welcome() #ensure a new conduit is created parent = None if parent != None: #we were dropped on an existing conduit parent.model.add_dataprovider(dataproviderWrapper, trySourceFirst) return #create a new conduit cond = Conduit.Conduit(self.sync_manager) cond.add_dataprovider(dataproviderWrapper, trySourceFirst) self.model.add_conduit(cond) def clear_canvas(self): self.model.clear() class DataProviderCanvasItem(_CanvasItem): WIDGET_WIDTH = 130 WIDGET_HEIGHT = 50 IMAGE_TO_TEXT_PADDING = 5 PENDING_MESSAGE = "Pending" MAX_TEXT_LENGTH = 8 MAX_TEXT_LINES = 2 LINE_WIDTH = 2.0 def __init__(self, parent, model): _CanvasItem.__init__(self, parent, model) self._build_widget() self.set_model(model) def _get_model_name(self): #FIXME: Goocanvas.Text does not ellipsize text, #so we do it...... poorly text = "" lines = 1 for word in self.model.get_name().split(" "): if len(word) > self.MAX_TEXT_LENGTH: word = word[0:self.MAX_TEXT_LENGTH] + "... " else: word = word + " " #gross guess for how much of the space we have used if (len(text)+len(word)) > (self.MAX_TEXT_LENGTH*self.MAX_TEXT_LINES): #append final elipsis if not word.endswith("... "): text = text + "..." break else: text = text + word return text def _get_icon(self): return self.model.get_icon() def _build_widget(self): self.box = goocanvas.Rect( x=0, y=0, width=self.WIDGET_WIDTH-(2*self.LINE_WIDTH), height=self.WIDGET_HEIGHT-(2*self.LINE_WIDTH), radius_y=self.RECTANGLE_RADIUS, radius_x=self.RECTANGLE_RADIUS, **self.get_style_properties("box") ) pb = self.model.get_icon() pbx = int((1*self.WIDGET_WIDTH/5) - (pb.get_width()/2)) pby = int((1*self.WIDGET_HEIGHT/3) - (pb.get_height()/2)) self.image = goocanvas.Image(pixbuf=pb, x=pbx, y=pby ) self.name = goocanvas.Text( x=pbx + pb.get_width() + self.IMAGE_TO_TEXT_PADDING, y=int(1*self.WIDGET_HEIGHT/3), width=3*self.WIDGET_WIDTH/5, text=self._get_model_name(), anchor=gtk.ANCHOR_WEST, **self.get_style_properties("name") ) self.statusText = goocanvas.Text( x=int(1*self.WIDGET_WIDTH/10), y=int(2*self.WIDGET_HEIGHT/3), width=4*self.WIDGET_WIDTH/5, text="", anchor=gtk.ANCHOR_WEST, **self.get_style_properties("statusText") ) #Add all the visual elements which represent a dataprovider self.add_child(self.box) self.add_child(self.name) self.add_child(self.image) self.add_child(self.statusText) def _on_change_detected(self, dataprovider): log.debug("CHANGE DETECTED") def _on_status_changed(self, dataprovider): msg = dataprovider.get_status() self.statusText.set_property("text", msg) def get_styled_item_names(self): return "box","name","statusText" def get_style_properties(self, specifier): if specifier == "box": #color the box differently if it is pending, i.e. unavailable, #disconnected, etc. if self.model.module == None: insensitive = self.get_style_color_int_rgba("mid","insensitive") kwargs = { "line_width":1.5, "stroke_color_rgba":insensitive, "fill_color_rgba":insensitive } else: pattern = cairo.LinearGradient(0, 0, 0, 100) pattern.add_color_stop_rgb( 0, *self.get_style_color_rgb("dark","active") ); pattern.add_color_stop_rgb( 0.5, *self.get_style_color_rgb("dark","prelight") ); kwargs = { "line_width":2.0, "stroke_color":"black", "fill_pattern":pattern } elif specifier == "name": kwargs = { "font":"Sans 8", "fill_color_rgba":self.get_style_color_int_rgba("text","normal") } elif specifier == "statusText": kwargs = { "font":"Sans 7", "fill_color_rgba":self.get_style_color_int_rgba("text_aa","normal") } return kwargs def update_appearance(self): #the image pb = self._get_icon() pbx = int((1*self.WIDGET_WIDTH/5) - (pb.get_width()/2)) pby = int((1*self.WIDGET_HEIGHT/3) - (pb.get_height()/2)) self.image.set_property("pixbuf",pb) self.name.set_property("text",self._get_model_name()) if self.model.module == None: statusText = self.PENDING_MESSAGE else: statusText = self.model.module.get_status() self.statusText.set_property("text",statusText) self.box.set_properties( **self.get_style_properties("box") ) def set_model(self, model): self.model = model self.update_appearance() if self.model.module != None: self.model.module.connect("change-detected", self._on_change_detected) self.model.module.connect("status-changed", self._on_status_changed) class ConduitCanvasItem(_CanvasItem): BUTTONS = False DIVIDER = False FLAT_BOX = True WIDGET_HEIGHT = 63.0 SIDE_PADDING = 10.0 LINE_WIDTH = 2.0 def __init__(self, parent, model, width): _CanvasItem.__init__(self, parent, model) if self.model: self.model.connect("parameters-changed", self._on_conduit_parameters_changed) self.model.connect("dataprovider-changed", self._on_conduit_dataprovider_changed) self.model.connect("sync-progress", self._on_conduit_progress) self.sourceItem = None self.sinkDpItems = [] self.connectorItems = {} self.l = None self.progressText = None self.boundingBox = None #if self.DIVIDER, show an transparent bouding box, and a #simple dividing line self.divider = None #goocanvas.Points need a list of tuples, not a list of lists. Yuck self.dividerPoints = [(),()] #if self.BUTTONS, show sync and stop buttons self.syncButton = None self.stopButton = None #Build the widget self._build_widget(width) def _add_progress_text(self): if self.sourceItem != None and len(self.sinkDpItems) > 0: if self.progressText == None: fromx,fromy,tox,toy = self._get_connector_coordinates(self.sourceItem,self.sinkDpItems[0]) self.progressText = goocanvas.Text( x=fromx+5, y=fromy-15, width=100, text="", anchor=gtk.ANCHOR_WEST, alignment=pango.ALIGN_LEFT, **self.get_style_properties("progressText") ) self.add_child(self.progressText) def _position_dataprovider(self, dpCanvasItem): dpx, dpy = self.model.get_dataprovider_position(dpCanvasItem.model) if dpx == 0: #Its a source dpCanvasItem.translate( self.SIDE_PADDING, self.SIDE_PADDING + self.l.get_property("line_width") ) else: #Its a sink if dpy == 0: i = self.SIDE_PADDING else: i = (dpy * self.SIDE_PADDING) + self.SIDE_PADDING dpCanvasItem.translate( self.get_width() - dpCanvasItem.get_width() - self.SIDE_PADDING, (dpy * dpCanvasItem.get_height()) + i + self.l.get_property("line_width") ) def _build_widget(self, width): true_width = width-self.LINE_WIDTH #draw a spacer to give some space between conduits points = goocanvas.Points([(0.0, 0.0), (true_width, 0.0)]) self.l = goocanvas.Polyline( points=points, line_width=self.LINE_WIDTH, stroke_color_rgba=GtkUtil.TRANSPARENT_COLOR ) self.add_child(self.l) #draw a box which will contain the dataproviders self.boundingBox = goocanvas.Rect( x=0, y=5, width=true_width, height=self.WIDGET_HEIGHT, radius_y=self.RECTANGLE_RADIUS, radius_x=self.RECTANGLE_RADIUS, **self.get_style_properties("boundingBox") ) self.add_child(self.boundingBox) if self.DIVIDER: #draw an underline #from point self.dividerPoints[0] = (true_width*0.33,5+self.WIDGET_HEIGHT) self.dividerPoints[1] = (2*(true_width*0.33),5+self.WIDGET_HEIGHT) self.divider = goocanvas.Polyline( points=goocanvas.Points(self.dividerPoints), **self.get_style_properties("divider") ) self.add_child(self.divider) if self.BUTTONS and self.model: w = gtk.Button(label="") w.set_image( gtk.image_new_from_stock(gtk.STOCK_REFRESH, gtk.ICON_SIZE_MENU) ) w.set_relief(gtk.RELIEF_HALF) self.syncButton = goocanvas.Widget( widget=w, x=true_width-19, y=22, width=28, height=28, anchor=gtk.ANCHOR_CENTER ) self.add_child(self.syncButton) w = gtk.Button(label="") w.set_image( gtk.image_new_from_stock(gtk.STOCK_MEDIA_STOP, gtk.ICON_SIZE_MENU) ) w.set_relief(gtk.RELIEF_HALF) self.stopButton = goocanvas.Widget( widget=w, x=true_width-19, y=22+2+28, width=28, height=28, anchor=gtk.ANCHOR_CENTER ) self.add_child(self.stopButton) def _resize_height(self): sourceh = 0.0 sinkh = 0.0 padding = 0.0 for dpw in self.sinkDpItems: sinkh += dpw.get_height() #padding between items numSinks = len(self.sinkDpItems) if numSinks: sinkh += ((numSinks - 1)*self.SIDE_PADDING) if self.sourceItem != None: sourceh += self.sourceItem.get_height() self.set_height( max(sourceh, sinkh)+ #expand to the largest (1.5*self.SIDE_PADDING) #padding at the top and bottom ) def _delete_connector(self, item): """ Deletes the connector associated with the sink item """ try: connector = self.connectorItems[item] idx = self.find_child(connector) if idx != -1: self.remove_child(idx) else: log.warn("Could not find child connector item") del(self.connectorItems[item]) except KeyError: pass def _on_conduit_parameters_changed(self, cond): self.update_appearance() def _on_conduit_dataprovider_changed(self, cond, olddpw, newdpw): for item in [self.sourceItem] + self.sinkDpItems: if item.model.get_key() == olddpw.get_key(): item.set_model(newdpw) def _on_conduit_progress(self, cond, percent, UIDs): self.progressText.set_property("text","%2.1d%% complete" % int(percent*100.0)) def _get_connector_coordinates(self, fromdp, todp): """ Calculates the points a connector shall connect to between fromdp and todp @returns: fromx,fromy,tox,toy """ fromx = fromdp.get_right() fromy = fromdp.get_top() + (fromdp.get_height()/2) - self.get_top() tox = todp.get_left() toy = todp.get_top() + (todp.get_height()/2) - self.get_top() return fromx,fromy,tox,toy def _remove_overlap(self): items = self.sinkDpItems if len(items) > 0: #special case where the top one was deleted top = items[0].get_top()-self.get_top()-self.SIDE_PADDING-items[0].LINE_WIDTH if top != 0.0: for item in items: #translate all those below item.translate(0,-top) if self.sourceItem != None: fromx,fromy,tox,toy = self._get_connector_coordinates(self.sourceItem,item) self.connectorItems[item].reconnect(fromx,fromy,tox,toy) else: for i in xrange(0, len(items)): try: overlap = items[i].get_bottom() - items[i+1].get_top() log.debug("Sink Overlap: %s %s ----> %s" % (overlap,i,i+1)) #If there is anything more than the normal padding gap between then #the dp must be translated if overlap < -self.SIDE_PADDING: #translate all those below, and make their connectors work again for item in items[i+1:]: item.translate(0,overlap+self.SIDE_PADDING) if self.sourceItem != None: fromx,fromy,tox,toy = self._get_connector_coordinates(self.sourceItem,item) self.connectorItems[item].reconnect(fromx,fromy,tox,toy) except IndexError: break def get_styled_item_names(self): return "boundingBox","progressText","divider" def get_style_properties(self, specifier): if specifier == "boundingBox": if self.DIVIDER: kwargs = { "line_width":0 } else: if self.FLAT_BOX: kwargs = { "line_width":0, "fill_color_rgba":self.get_style_color_int_rgba("base","prelight") } else: pattern = cairo.LinearGradient(0, -30, 0, 100) pattern.add_color_stop_rgb( 0, *self.get_style_color_rgb("dark","selected") ); pattern.add_color_stop_rgb( 0.7, *self.get_style_color_rgb("mid","selected") ); kwargs = { "line_width":2.0, "fill_pattern":pattern, "stroke_color_rgba":self.get_style_color_int_rgba("text","normal") } elif specifier == "progressText": kwargs = { "font":"Sans 7", "fill_color_rgba":self.get_style_color_int_rgba("text","normal") } elif specifier == "divider": kwargs = { "line_width":3.0, "line_cap":cairo.LINE_CAP_ROUND, "stroke_color_rgba":self.get_style_color_int_rgba("text_aa","normal") } else: kwargs = {} return kwargs def update_appearance(self): self._resize_height() #update the twowayness of the connectors for c in self.connectorItems.values(): c.set_two_way(self.model.is_two_way()) def add_dataprovider_canvas_item(self, item): self._position_dataprovider(item) #is it a sink or a source? dpx, dpy = self.model.get_dataprovider_position(item.model) if dpx == 0: self.sourceItem = item else: self.sinkDpItems.append(item) #add a connector. If we just added a source then we need to make all the #connectors, otherwise we just need to add a connector for the new item if dpx == 0: #make all the connectors for s in self.sinkDpItems: fromx,fromy,tox,toy = self._get_connector_coordinates(self.sourceItem,s) c = ConnectorCanvasItem(self, fromx, fromy, tox, toy, self.model.is_two_way(), conduit.GLOBALS.typeConverter.conversion_exists( self.sourceItem.model.get_output_type(), s.model.get_input_type() ) ) self.connectorItems[s] = c else: #just make the new connector if self.sourceItem != None: fromx,fromy,tox,toy = self._get_connector_coordinates(self.sourceItem,item) c = ConnectorCanvasItem(self, fromx, fromy, tox, toy, self.model.is_two_way(), conduit.GLOBALS.typeConverter.conversion_exists( self.sourceItem.model.get_output_type(), item.model.get_input_type() ) ) self.connectorItems[item] = c self._add_progress_text() self.update_appearance() def delete_dataprovider_canvas_item(self, item): """ Removes the DataProviderCanvasItem and its connectors """ idx = self.find_child(item) if idx != -1: self.remove_child(idx) else: log.warn("Could not find child dataprovider item") if item == self.sourceItem: self.sourceItem = None #remove all connectors (copy because we modify in place) for item in self.connectorItems.copy(): self._delete_connector(item) else: self.sinkDpItems.remove(item) self._delete_connector(item) self._remove_overlap() self.update_appearance() def set_height(self, h): self.boundingBox.set_property("height",h) if self.DIVIDER: #update height points for the divider line self.dividerPoints[0] = (self.dividerPoints[0][0],h+10) self.dividerPoints[1] = (self.dividerPoints[0][0],h+10) self.divider.set_property("points", goocanvas.Points(self.dividerPoints)) def set_width(self, w): true_width = w-self.LINE_WIDTH self.boundingBox.set_property("width",true_width) if self.DIVIDER: #update width points for the divider line self.dividerPoints[0] = (true_width*0.33,self.dividerPoints[0][1]) self.dividerPoints[1] = (2*(true_width*0.33),self.dividerPoints[1][1]) self.divider.set_property("points", goocanvas.Points(self.dividerPoints)) #if self.BUTTONS: # self.syncButton.set_property("x", true_width-19) # self.stopButton.set_property("x", true_width-19) #resize the spacer p = goocanvas.Points([(0.0, 0.0), (true_width, 0.0)]) self.l.set_property("points",p) for d in self.sinkDpItems: desired = w - d.get_width() - self.SIDE_PADDING actual = d.get_left() change = desired-actual #move righthand dp d.translate(change, 0) #resize arrow (if exists) if self.sourceItem != None: self.connectorItems[d].resize_connector_width(change) class ConnectorCanvasItem(_CanvasItem): CONNECTOR_RADIUS = 30 CONNECTOR_YOFFSET = 20 CONNECTOR_TEXT_XPADDING = 5 CONNECTOR_TEXT_YPADDING = 10 LINE_WIDTH = 4.0 def __init__(self, parent, fromX, fromY, toX, toY, twoway, conversionExists): _CanvasItem.__init__(self, parent, None) self.fromX = fromX self.fromY = fromY self.toX = toX self.toY = toY self.twoway = twoway self._build_widget() def _build_widget(self): self.left_end_round = goocanvas.Ellipse( center_x=self.fromX, center_y=self.fromY, radius_x=6, radius_y=6, line_width=0.0, **self.get_style_properties("left_end_round") ) points = goocanvas.Points([(self.fromX+3, self.fromY), (self.fromX-5, self.fromY)]) self.left_end_arrow = goocanvas.Polyline( points=points, line_width=5, end_arrow=True, arrow_tip_length=3, arrow_length=3, arrow_width=3, **self.get_style_properties("left_end_arrow") ) points = goocanvas.Points([(self.toX-3, self.toY), (self.toX+3, self.toY)]) self.right_end = goocanvas.Polyline( points=points, line_width=5, end_arrow=True, arrow_tip_length=3, arrow_length=3, arrow_width=3, **self.get_style_properties("right_end") ) self._draw_arrow_ends() self.add_child(self.right_end,-1) self.path = goocanvas.Path( data="", line_width=self.LINE_WIDTH, **self.get_style_properties("path") ) self._draw_path() def _draw_arrow_ends(self): #Always draw the right arrow end for the correct width points = goocanvas.Points([(self.toX-3, self.toY), (self.toX+3, self.toY)]) self.right_end.set_property("points",points) #selectively add or remove a rounded left or right arrow #remove both arrowidx = self.find_child(self.left_end_arrow) if arrowidx != -1: self.remove_child(arrowidx) roundidx = self.find_child(self.left_end_round) if roundidx != -1: self.remove_child(roundidx) if self.twoway == True: self.add_child(self.left_end_arrow,-1) else: self.add_child(self.left_end_round,-1) def _draw_path(self): """ Builds a SVG path statement. This represents the (optionally) curved connector between a datasource and datasink. Then assigns the path to the internal path object """ if self.fromY == self.toY: #draw simple straight line p = "M%s,%s " \ "L%s,%s " % ( self.fromX,self.fromY, #absolute start point self.toX,self.toY #absolute line to point ) else: #draw pretty curvy line r = ConnectorCanvasItem.CONNECTOR_RADIUS #radius of curve ls = 40 #len of start straight line segment ld = self.toY - self.fromY - 2*r p = "M%s,%s " \ "l%s,%s " \ "q%s,%s %s,%s " \ "l%s,%s " \ "q%s,%s %s,%s " \ "L%s,%s" % ( self.fromX,self.fromY, #absolute start point ls,0, #relative length line +x r,0,r,r, #quarter circle 0,ld, #relative length line +y 0,r,r,r, #quarter circle self.toX,self.toY #absolute line to point ) pidx = self.find_child(self.path) if pidx != -1: self.remove_child(pidx) #Reecreate the path to work round goocanvas bug self.path = goocanvas.Path( data=p, line_width=self.LINE_WIDTH, **self.get_style_properties("path") ) self.add_child(self.path,-1) def get_styled_item_names(self): return "left_end_round", "left_end_arrow", "right_end", "path" def get_style_properties(self, specifier): if specifier == "left_end_round": kwargs = { "fill_color_rgba":self.get_style_color_int_rgba("text","normal") } elif specifier in ("left_end_arrow", "right_end", "path"): kwargs = { "stroke_color_rgba":self.get_style_color_int_rgba("text","normal") } else: kwargs = {} return kwargs def resize_connector_width(self, dw): """ Adjusts the size of the connector. Used when the window is resized @param dw: The change in width @type dw: C{int} """ #Only the X location changes if dw != 0: self.toX += dw self._draw_path() self._draw_arrow_ends() def reconnect(self, fromX, fromY, toX, toY): self.fromX = fromX self.fromY = fromY self.toX = toX self.toY = toY self._draw_path() self._draw_arrow_ends() def set_color(self, color): """ @param color: The connectors new color @type color: C{string} """ self.path.set_property("stroke_color",color) self.left_end_arrow.set_property("stroke_color",color) #FIXME: Causes segfault #self.left_end_round.set_property("fill_color",color) self.right_end.set_property("stroke_color",color) def set_two_way(self, twoway): """ @param color: The connectors new color @type color: C{string} """ self.twoway = twoway self._draw_arrow_ends() conduit-0.3.17/conduit/gtkui/Makefile.in0000644000175000017500000003221711326116726015037 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/gtkui DIST_COMMON = $(conduit_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduitdir)" py_compile = $(top_srcdir)/py-compile DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ conduitdir = $(pythondir)/conduit/gtkui conduit_PYTHON = \ Canvas.py \ ConfigContainer.py \ ConfigItems.py \ ConflictResolver.py \ Database.py \ __init__.py \ MsgArea.py \ Tree.py \ Util.py \ UI.py \ WindowConfigurator.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/gtkui/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/gtkui/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduitPYTHON: $(conduit_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduitdir)" || $(MKDIR_P) "$(DESTDIR)$(conduitdir)" @list='$(conduit_PYTHON)'; dlist=; list2=; test -n "$(conduitdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduitdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduitdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduitdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduitdir)" $$dlist; \ fi; \ else :; fi uninstall-conduitPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_PYTHON)'; test -n "$(conduitdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduitdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduitdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduitdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduitdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduitdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduitdir)" && rm -f $$fileso tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(conduitdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-conduitPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-conduitPYTHON .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-conduitPYTHON \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am uninstall-conduitPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/gtkui/ConflictResolver.py0000644000175000017500000003453111321403566016624 00000000000000""" Holds classes used for resolving conflicts. Copyright: John Stowers, 2006 License: GPLv2 """ import traceback import time import gobject import gtk, gtk.gdk import pango import logging log = logging.getLogger("gtkui.ConflictResolver") import conduit import conduit.dataproviders.DataProvider as DataProvider import conduit.Vfs as Vfs import conduit.Conflict as Conflict from gettext import gettext as _ #Indexes into the conflict tree model in which conflict data is stored CONFLICT_IDX = 0 #The conflict object DIRECTION_IDX = 1 #The current user decision re: the conflict (-->, <-- or -x-) class ConflictHeader: def __init__(self, sourceWrapper, sinkWrapper): self.sourceWrapper = sourceWrapper self.sinkWrapper = sinkWrapper def get_snippet(self, is_source): if is_source: return self.sourceWrapper.name else: return self.sinkWrapper.name def get_icon(self, is_source): if is_source: return self.sourceWrapper.get_icon() else: return self.sinkWrapper.get_icon() class ConflictResolver: """ Manages a gtk.TreeView which is used for asking the user what they wish to do in the case of a conflict """ def __init__(self, gtkbuilder): self.model = gtk.TreeStore( gobject.TYPE_PYOBJECT, #Conflict gobject.TYPE_INT #Resolved direction ) #In the conflict treeview, group by sink <-> source partnership self.partnerships = {} self.numConflicts = 0 self.view = gtk.TreeView( self.model ) self._build_view() #Connect up the GUI #this is the scrolled window in the bottom of the main gui self.expander = gtkbuilder.get_object("conflictExpander") self.expander.connect("activate", self.on_expand) self.vpane = gtkbuilder.get_object("vpaned1") self.expander.set_sensitive(False) self.fullscreenButton = gtkbuilder.get_object("conflictFullscreenButton") self.fullscreenButton.connect("toggled", self.on_fullscreen_toggled) self.conflictScrolledWindow = gtkbuilder.get_object("conflictExpanderVBox") gtkbuilder.get_object("conflictScrolledWindow").add(self.view) #this is a stand alone window for showing conflicts in an easier manner self.standalone = gtk.Window() self.standalone.set_title("Conflicts") self.standalone.set_transient_for(gtkbuilder.get_object("MainWindow")) self.standalone.set_position(gtk.WIN_POS_CENTER_ON_PARENT) self.standalone.set_destroy_with_parent(True) self.standalone.set_default_size(-1, 200) #widgets cannot have two parents #self.standalone.add(self.conflictScrolledWindow) self.standalone.connect("delete-event", self.on_standalone_closed) #the button callbacks are shared gtkbuilder.get_object("conflictCancelButton").connect("clicked", self.on_cancel_conflicts) gtkbuilder.get_object("conflictResolveButton").connect("clicked", self.on_resolve_conflicts) #the state of the compare button is managed by the selection changed callback self.compareButton = gtkbuilder.get_object("conflictCompareButton") self.compareButton.connect("clicked", self.on_compare_conflicts) self.compareButton.set_sensitive(False) def _build_view(self): #Visible column0 is #[pixbuf + source display name] or #[source_data.get_snippet()] column0 = gtk.TreeViewColumn(_("Source")) sourceIconRenderer = gtk.CellRendererPixbuf() sourceNameRenderer = gtk.CellRendererText() sourceNameRenderer.set_property('ellipsize', pango.ELLIPSIZE_END) column0.pack_start(sourceIconRenderer, False) column0.pack_start(sourceNameRenderer, True) column0.set_property("expand", True) column0.set_cell_data_func(sourceNameRenderer, self._name_data_func, True) column0.set_cell_data_func(sourceIconRenderer, self._icon_data_func, True) #Visible column1 is the arrow to decide the direction confRenderer = ConflictCellRenderer() column1 = gtk.TreeViewColumn(_("Resolution"), confRenderer) column1.set_cell_data_func(confRenderer, self._direction_data_func, DIRECTION_IDX) column1.set_property("expand", False) #Visible column2 is the display name of source and source data column2 = gtk.TreeViewColumn(_("Sink")) sinkIconRenderer = gtk.CellRendererPixbuf() sinkNameRenderer = gtk.CellRendererText() sinkNameRenderer.set_property('ellipsize', pango.ELLIPSIZE_END) column2.pack_start(sinkIconRenderer, False) column2.pack_start(sinkNameRenderer, True) column2.set_property("expand", True) column2.set_cell_data_func(sinkNameRenderer, self._name_data_func, False) column2.set_cell_data_func(sinkIconRenderer, self._icon_data_func, False) for c in [column0,column1,column2]: self.view.append_column( c ) #set view properties self.view.set_property("enable-search", False) self.view.get_selection().connect("changed", self.on_selection_changed) def _name_data_func(self, column, cell_renderer, tree_model, rowref, is_source): conflict = tree_model.get_value(rowref, CONFLICT_IDX) text = conflict.get_snippet(is_source) cell_renderer.set_property("text", text) def _icon_data_func(self, column, cell_renderer, tree_model, rowref, is_source): conflict = tree_model.get_value(rowref, CONFLICT_IDX) icon = conflict.get_icon(is_source) cell_renderer.set_property("pixbuf", icon) def _direction_data_func(self, column, cell_renderer, tree_model, rowref, user_data): direction = tree_model.get_value(rowref, user_data) if tree_model.iter_depth(rowref) == 0: cell_renderer.set_property('visible', False) cell_renderer.set_property('mode', gtk.CELL_RENDERER_MODE_INERT) else: cell_renderer.set_property('visible', True) cell_renderer.set_property('mode', gtk.CELL_RENDERER_MODE_ACTIVATABLE) cell_renderer.set_direction(direction) def _set_conflict_titles(self): self.expander.set_label(_("Conflicts (%s)") % self.numConflicts) self.standalone.set_title(_("Conflicts (%s)") % self.numConflicts) def on_conflict(self, cond, conflict): #We start with the expander disabled. Make sure we only enable it once if len(self.model) == 0: self.expander.set_sensitive(True) self.numConflicts += 1 source,sink = conflict.get_partnership() if (source,sink) not in self.partnerships: #create a header row header = ConflictHeader(source, sink) rowref = self.model.append(None, (header, Conflict.CONFLICT_ASK)) self.partnerships[(source,sink)] = (rowref,conflict) rowref = self.partnerships[(source,sink)][0] self.model.append(rowref, (conflict, Conflict.CONFLICT_ASK)) #FIXME: Do this properly with model signals and a count function #update the expander label and the standalone window title #self._set_conflict_titles() def on_expand(self, sender): #Force the vpane to move to the bottom self.vpane.set_position(-1) def on_fullscreen_toggled(self, sender): #switches between showing the conflicts in a standalone window. #uses fullscreenButton.get_active() as a state variable if self.fullscreenButton.get_active(): self.expander.set_expanded(False) self.fullscreenButton.set_image(gtk.image_new_from_icon_name("gtk-leave-fullscreen", gtk.ICON_SIZE_MENU)) self.conflictScrolledWindow.reparent(self.standalone) self.standalone.show() self.expander.set_sensitive(False) else: self.fullscreenButton.set_image(gtk.image_new_from_icon_name("gtk-fullscreen", gtk.ICON_SIZE_MENU)) self.conflictScrolledWindow.reparent(self.expander) self.standalone.hide() self.expander.set_sensitive(True) def on_standalone_closed(self, sender, event): self.fullscreenButton.set_active(False) self.on_fullscreen_toggled(sender) return True def on_resolve_conflicts(self, sender): #save the resolved rowrefs and remove them at the end resolved = [] def _resolve_func(model, path, rowref): #skip header rows if model.iter_depth(rowref) == 0: return direction = model[path][DIRECTION_IDX] conflict = model[path][CONFLICT_IDX] if conflict.resolve(direction): resolved.append(rowref) self.model.foreach(_resolve_func) for r in resolved: self.model.remove(r) #now look for any sync partnerships with no children empty = [] for source,sink in self.partnerships: rowref = self.partnerships[(source,sink)][0] numChildren = self.model.iter_n_children(rowref) if numChildren == 0: sink.module.set_status(DataProvider.STATUS_DONE_SYNC_OK) empty.append( (rowref, source, sink) ) else: sink.module.set_status(DataProvider.STATUS_DONE_SYNC_CONFLICT) #do in two loops so as to not change the model while iterating for rowref, source, sink in empty: self.model.remove(rowref) try: del(self.partnerships[(source,sink)]) except KeyError: pass def on_cancel_conflicts(self, sender): self.model.clear() self.partnerships = {} self.numConflicts = 0 self._set_conflict_titles() def on_compare_conflicts(self, sender): model, rowref = self.view.get_selection().get_selected() conflict = model.get_value(rowref, CONFLICT_IDX) Vfs.uri_open(conflict.sourceData.get_open_URI()) Vfs.uri_open(conflict.sinkData.get_open_URI()) def on_selection_changed(self, treeSelection): """ Makes the compare button active only if an open_URI for the data has been set and its not a header row. FIXME: In future could convert to text to allow user to compare that way """ model, rowref = treeSelection.get_selected() #when the rowref under the selected row is removed by resolve thread if rowref == None: self.compareButton.set_sensitive(False) else: conflict = model.get_value(rowref, CONFLICT_IDX) if model.iter_depth(rowref) == 0: self.compareButton.set_sensitive(False) #both must have an open_URI set to work elif conflict.sourceData.get_open_URI() != None and conflict.sinkData.get_open_URI() != None: self.compareButton.set_sensitive(True) else: self.compareButton.set_sensitive(False) class ConflictCellRenderer(gtk.GenericCellRenderer): """ An unfortunately neccessary wrapper around a CellRenderPixbuf because said renderer is not activatable """ def __init__(self): gtk.GenericCellRenderer.__init__(self) self.image = None def on_get_size(self, widget, cell_area): return ( 0,0, 16,16 ) def on_render(self, window, widget, background_area, cell_area, expose_area, flags): if self.image != None: middle_x = (cell_area.width - 16) / 2 middle_y = (cell_area.height - 16) / 2 self.image.render_to_drawable_alpha(window, 0, 0, #x, y in pixbuf middle_x + cell_area.x, #middle x in drawable middle_y + cell_area.y, #middle y in drawable -1, -1, # use pixbuf width & height 0, 0, # alpha (deprecated params) gtk.gdk.RGB_DITHER_NONE, 0, 0 ) # self.image.draw_pixbuf( # None, #gc for clipping # window, #draw to # 0, 0, #x, y in pixbuf # cell_area.x, cell_area.y, # x, y in drawable # -1, -1, # use pixbuf width & height # gtk.gdk.RGB_DITHER_NONE, # 0, 0 # ) return True def set_direction(self, direction): if direction == Conflict.CONFLICT_COPY_SINK_TO_SOURCE: self.image = gtk.icon_theme_get_default().load_icon("conduit-conflict-left",16,0) elif direction == Conflict.CONFLICT_COPY_SOURCE_TO_SINK: self.image = gtk.icon_theme_get_default().load_icon("conduit-conflict-right",16,0) elif direction == Conflict.CONFLICT_SKIP: self.image = gtk.icon_theme_get_default().load_icon("conduit-conflict-skip",16,0) elif direction == Conflict.CONFLICT_DELETE: self.image = gtk.icon_theme_get_default().load_icon("conduit-conflict-delete",16,0) elif direction == Conflict.CONFLICT_ASK: self.image = gtk.icon_theme_get_default().load_icon("conduit-conflict-ask",16,0) else: self.image = None def on_activate(self, event, widget, path, background_area, cell_area, flags): model = widget.get_model() conflict = model[path][CONFLICT_IDX] #Click toggles between --> and <-- and -x- but only within the list #of valid choices. If at the end of the valid choices, then loop around try: curIdx = list(conflict.choices).index(model[path][DIRECTION_IDX]) except ValueError: #Because CONFLICT_ASK is never a valid choice, its just the default #to make the user have to acknowledge the conflict curIdx = 0 if curIdx == len(conflict.choices) - 1: model[path][DIRECTION_IDX] = conflict.choices[0] else: model[path][DIRECTION_IDX] = conflict.choices[curIdx+1] return True conduit-0.3.17/conduit/gtkui/WindowConfigurator.py0000644000175000017500000001742111321403566017172 00000000000000import os.path import gtk import logging log = logging.getLogger("gtkui.WindowConfigurator") from gettext import gettext as _ import conduit import conduit.gtkui.ConfigContainer as ConfigContainer class WindowConfigurator: """ A window configurator to embed a configuration widget. """ CONFIG_WINDOW_TITLE_TEXT = _("Configure") #Show multiple containers or only shows the currently selected dataprovider #This should be set to False until all dataproviders use the new system MULTIPLE_VIEW = False #Use a notebook instead of stacking the containers. Notebooks are very good #for large configuration windows, that end up being larger then the screen #height (happens frequently). #Creates a border when not used with MULTIPLE_VIEW, so it's disabled while #that is disabled (and should be enabled otherwise) NOTEBOOK = MULTIPLE_VIEW def __init__(self, window): """ @param window: Parent window (this dialog is modal) @type window: C{gtk.Window} """ self.showing = False self.built_containers = False self.dialog = gtk.Dialog(self.CONFIG_WINDOW_TITLE_TEXT, window, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (gtk.STOCK_REVERT_TO_SAVED, gtk.RESPONSE_CANCEL, gtk.STOCK_CLOSE, gtk.RESPONSE_OK)) self.dialog.set_has_separator(False) self.dialog.set_response_sensitive(gtk.RESPONSE_CANCEL, False) self.dialog.set_default_size(-1, -1) self.dialog_box = self.dialog.get_content_area() align = gtk.Alignment(0.0, 0.0, 1.0, 1.0) align.set_padding(0, 8, 0, 0) align.add(self._make_config_widget()) self.dialog_box.pack_start(align) self.dialog_box.show_all() self.container_signals = {} self.container_widgets = {} def _container_changed(self, container, changed): self.dialog.set_response_sensitive(gtk.RESPONSE_CANCEL, changed) def _make_config_widget(self): if self.NOTEBOOK: self.tabs = {} self.notebook = gtk.Notebook() self.notebook.set_border_width(8) self.notebook.set_show_tabs(self.MULTIPLE_VIEW) return self.notebook else: self.containers_box = gtk.VBox(spacing = 6) self.containers_box.set_border_width(12) return self.containers_box def set_containers(self, containers): self._clear_containers() self.built_containers = False self.containers = containers def _clear_containers(self): for container, signal_id in self.container_signals.iteritems(): container.disconnect(signal_id) self.container_signals = {} if self.NOTEBOOK: while self.notebook.get_n_pages() > 0: self.notebook.remove_page(0) self.tabs = {} else: for container, widget in self.container_widgets.iteritems(): self.containers_box.remove(widget) container_widget = container.get_config_widget() container_widget.get_parent().remove(container_widget) self.container_widgets = {} def _add_container(self, container, container_widget): if self.NOTEBOOK: hbox = gtk.HBox(spacing = 8) hbox.pack_start(gtk.image_new_from_pixbuf(container.get_icon()), False, False) lbl = gtk.Label(container.get_name()) hbox.pack_start(lbl, False, False, 4) hbox.show_all() container_widget.set_border_width(8) widget = container_widget tab_index = self.notebook.append_page(container_widget, hbox) self.tabs[container] = tab_index self.notebook.show_all() else: container_box = gtk.VBox(spacing = 8) widget = container_box if self.MULTIPLE_VIEW: title_box = gtk.HBox(spacing = 8) title_box.pack_start(gtk.image_new_from_pixbuf(container.get_icon()), False, False) lbl = gtk.Label(container.get_name()) title_box.pack_start(lbl, False, False, 4) title_box.show_all() container_box.pack_start(title_box, False, False) container_box.pack_start(container_widget, True, True) #container_box.pack_start(gtk.HSeparator(), False, False) self.containers_box.pack_start(container_box) self.containers_box.show_all() self.container_signals[container] = container.connect('changed', self._container_changed) self.container_widgets[container] = widget def build_containers(self): if self.built_containers: return for index, container in enumerate(self.containers): if not container: continue container_widget = container.get_config_widget() #FIXME: The situation below is never reached. #The only way to reach it is if the UI allowed a dataprovider to be #configured even if it shouldnt. Even then, the canvas filters when #there is no configuration container. if not container_widget: container_widget = gtk.Label("No configuration needed for this dataprovider") self._add_container(container, container_widget) self.built_containers = True def has_configure_menu(self): return True def get_widget(self): return None def set_busy(self, busy): if busy: self.window.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) else: self.window.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.LEFT_PTR)) @property def window(self): return self.dialog def run(self, config_container): """ Runs the dialog, return True if OK is clicked, False otherwise @param config_container: container that should be focused, such as the currently selected dataprovider (in a notebook, the currently selected page belongs to this container) """ self.build_containers() self.showing = True if config_container and not self.MULTIPLE_VIEW: assert config_container in self.container_widgets for container, container_widget in self.container_widgets.iteritems(): if container != config_container: container_widget.hide() config_container.show() self.container_widgets[config_container].show() containers = [config_container] else: for container, container_widget in self.container_widgets.iteritems(): container_widget.show() container.show() containers = self.container_widgets.keys() if self.NOTEBOOK and config_container: self.notebook.set_current_page(self.tabs[config_container]) self.dialog.reshow_with_initial_size() resp = self.dialog.run() while resp == gtk.RESPONSE_CANCEL: for container in containers: container.cancel_config() resp = self.dialog.run() for container in containers: container.hide() self.dialog.hide() self.window.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.ARROW)) self.showing = False if resp == gtk.RESPONSE_OK: for container in containers: container.apply_config() else: for container in containers: container.cancel_config() return (resp == gtk.RESPONSE_OK) conduit-0.3.17/conduit/gtkui/__init__.py0000644000175000017500000000000011172176633015066 00000000000000conduit-0.3.17/conduit/dataproviders/0000777000175000017500000000000011326117101014561 500000000000000conduit-0.3.17/conduit/dataproviders/AutoSync.py0000644000175000017500000000155411172176633016637 00000000000000import gobject import logging log = logging.getLogger("dataproviders.AutoSync") class AutoSync(object): def __init__(self): self.timeout = 5 self._timeout_id = 0 def handle_added(self, uid): self._handle_change() def handle_modified(self, uid): self._handle_change() def handle_deleted(self, uid): self._handle_change() def _handle_change(self): # reset timer.. if self._timeout_id > 0: gobject.source_remove(self._timeout_id) self._timeout_id = 0 # add a new one, or trigger sync immediately if self.timeout > 0: self._timeout_id = gobject.timeout_add(self.timeout * 1000, self._handle_sync) else: self.emit_change_detected() def _handle_sync(self): self._timeout_id = 0 self.emit_change_detected() conduit-0.3.17/conduit/dataproviders/File.py0000644000175000017500000003152211172176633015747 00000000000000import os.path import logging import ConfigParser log = logging.getLogger("dataproviders.File") import conduit import conduit.dataproviders.DataProvider as DataProvider import conduit.datatypes as DataType import conduit.datatypes.File as File import conduit.Vfs as Vfs import conduit.Database as DB import conduit.Exceptions as Exceptions TYPE_FILE = "0" TYPE_FOLDER = "1" def get_removable_volume_info(f): """ Returns the root uri of the volume, and local path of the group config file """ rooturi = f.get_removable_volume_root_uri() if rooturi: path = Vfs.uri_to_local_path(rooturi) if path: path = Vfs.uri_join(path, ".conduit") return rooturi,path return None,None def save_removable_volume_group_file(folderUri, folderGroupName): """ Saves a file on the root of the drive, in ini format, containing the uri and group e.g. [DEFAULT] relative/uri/from/volume/root = group name """ f = File.File(URI=folderUri) if f.is_on_removale_volume(): #write to the /volume/root/.conduit file rooturi,path = get_removable_volume_info(f) if rooturi and path: conf = ConfigParser.SafeConfigParser() conf.read(path) log.debug("Saving group (%s = %s) to %s" % (folderUri,folderGroupName,path)) conf.set( "DEFAULT", folderUri.replace(rooturi,""), folderGroupName ) fp = open(path, 'w') conf.write(fp) fp.close() return True return False def read_removable_volume_group_file(folderUri): items = [] f = File.File(URI=folderUri) if f.is_on_removale_volume(): #read from the /volume/root/.conduit file rooturi,path = get_removable_volume_info(f) if rooturi and path: conf = ConfigParser.SafeConfigParser() conf.read(path) for p,n in conf.items("DEFAULT"): log.debug("Read group (%s = %s)" % (p,n)) #check the path still exists on the volume if Vfs.uri_exists(rooturi+p): items.append((p,n)) return items class FileSource(DataProvider.DataSource, Vfs.FolderScannerThreadManager): _category_ = conduit.dataproviders.CATEGORY_FILES _module_type_ = "source" _in_type_ = "file" _out_type_ = "file" _icon_ = "text-x-generic" def __init__(self): DataProvider.DataSource.__init__(self) Vfs.FolderScannerThreadManager.__init__(self) #One table stores the top level files and folders (config) #The other stores all files to sync. self.db = DB.ThreadSafeGenericDB() self.db.create( table="config", fields=("URI","TYPE","CONTAINS_NUM_ITEMS","SCAN_COMPLETE","GROUP_NAME") ) self.db.create( table="files", fields=("URI","BASEPATH","GROUPNAME") ) def _add_file(self, f): self.db.insert( table="config", values=(f,TYPE_FILE,0,False,"") ) def _add_folder(self, f, groupname=""): self.db.insert( table="config", values=(f,TYPE_FOLDER,0,False,groupname) ) def initialize(self): return True def uninitialize(self): self.db.close() def refresh(self): DataProvider.DataSource.refresh(self) self.db.execute("DELETE FROM files") #Make a whole bunch of threads to go and scan the directories for oid,uri,groupname in self.db.select("SELECT oid,URI,GROUP_NAME FROM config WHERE TYPE = ?",(TYPE_FOLDER,)): self.make_thread( uri, False, #include hidden False, #follow symlinks self._on_scan_folder_progress, self._on_scan_folder_completed, oid, groupname ) #All threads must complete - otherwise we might miss some items self.join_all_threads() #now add the single files to the list for oid,uri in self.db.select("SELECT oid,URI FROM config WHERE TYPE = ?",(TYPE_FILE,)): f = File.File(URI=uri) if f.exists(): self.db.insert( table="files", values=(uri,"","") #single files dont have basepath and groupname ) else: self.db.delete( table="config", oid=oid ) def get(self, LUID): DataProvider.DataSource.get(self, LUID) basepath,group = self.db.select_one("SELECT BASEPATH,GROUPNAME FROM files WHERE URI = ?", (LUID,)) f = File.File( URI= LUID, basepath= basepath, group= group ) f.set_open_URI(LUID) f.set_UID(LUID) return f def add(self, LUID): f = File.File(URI=LUID) if f.exists(): oid = self.db.select_one("SELECT oid FROM files WHERE URI = ?", (LUID,)) if oid != None: log.debug("Could not add (already added): %s" % LUID) return False if f.is_directory(): log.debug("Adding folder: %s" % LUID) self._add_folder(LUID,"FIXME") else: log.debug("Adding file: %s" % LUID) self._add_file(LUID) else: log.warn("Could not add: %s" % LUID) return False return True def get_all(self): #combine the files contained inside dirs with those the user specified files = [f for f, in self.db.select("SELECT URI FROM files")] return files def finish(self, aborted, error, conflict): DataProvider.DataSource.finish(self) self.db.execute("DELETE FROM files") def _on_scan_folder_progress(self, folderScanner, numItems, oid, groupname): """ Called by the folder scanner thread and used to update the estimate of the number of items in the directory """ self.db.update( table="config", oid=oid, CONTAINS_NUM_ITEMS=numItems ) def _on_scan_folder_completed(self, folderScanner, oid, groupname): log.debug("Folder scan complete %s" % folderScanner) #Update scan status self.db.update( table="config", oid=oid, SCAN_COMPLETE=True, GROUP_NAME=groupname ) #Put all files into files for f in folderScanner.get_uris(): self.db.insert( table="files", values=(f,folderScanner.baseURI,groupname) ) class FolderTwoWay(DataProvider.TwoWay): """ TwoWay dataprovider for synchronizing a folder """ _category_ = conduit.dataproviders.CATEGORY_FILES _module_type_ = "twoway" _in_type_ = "file" _out_type_ = "file" _icon_ = "folder" def __init__(self, folder, folderGroupName, includeHidden, compareIgnoreMtime, followSymlinks): DataProvider.TwoWay.__init__(self) self.folder = folder self.folderGroupName = folderGroupName self.includeHidden = includeHidden self.compareIgnoreMtime = compareIgnoreMtime self.followSymlinks = followSymlinks self.fstype = None self.files = [] def _transfer_file(self, vfsFile, newURI, overwrite): try: vfsFile.transfer(newURI, overwrite) except File.FileTransferError: raise Exceptions.SyncronizeFatalError("Transfer Cancelled") def initialize(self): return True def is_configured(self, isSource, isTwoWay): return self.folder and Vfs.uri_exists(self.folder) def refresh(self): DataProvider.TwoWay.refresh(self) #cache the filesystem type for speed self.fstype = Vfs.uri_get_filesystem_type(self.folder) #scan the folder scanThread = Vfs.FolderScanner(self.folder, self.includeHidden, self.followSymlinks) scanThread.start() scanThread.join() self.files = scanThread.get_uris() def put(self, vfsFile, overwrite, LUID=None): """ Puts vfsFile at the correct location. There are three scenarios 1) File came from a foreign DP like tomboy 2) File came from another file dp Behaviour: 1) The foreign DP should have encoded enough information (such as the filename) so that we can go ahead and put the file in the dir 2) First we see if the file has a group attribute. a) If so, and the group matches the groupName here then we put the files into the directory. b) If not we put the file in a subdir by the name of the group We always retain the relative path for the files """ DataProvider.TwoWay.put(self, vfsFile, overwrite, LUID) newURI = "" if LUID != None: newURI = LUID elif vfsFile.basePath == "": #came from another type of dataprovider such as tomboy #where relative path makes no sense. Could also come from #the FileSource dp when the user has selected a single file log.debug("No basepath. Going to empty dir") newURI = Vfs.uri_join(self.folder,vfsFile.get_filename()) else: #Look for corresponding groups relpath = vfsFile.get_relative_uri() log.debug("Relative path: %s" % relpath) if self.folderGroupName == vfsFile.group: log.debug("Found corresponding group") #put in the folder newURI = Vfs.uri_join(self.folder,relpath) else: log.debug("Recreating group: %s" % vfsFile.group) #unknown. Store in the dir but recreate the group newURI = Vfs.uri_join(self.folder,vfsFile.group,relpath) #escape illegal filesystem characters if self.fstype: newURI = Vfs.uri_sanitize_for_filesystem(newURI, self.fstype) #overwrite is the easy case, as for it to be true, requires specific user #interaction if overwrite == True: self._transfer_file(vfsFile, newURI, overwrite) else: #check for conflicts destFile = File.File(URI=newURI) if destFile.exists(): comp = vfsFile.compare( destFile, sizeOnly=self.compareIgnoreMtime ) if LUID != None and comp == DataType.COMPARISON_NEWER: #we were expecting an existing file, we found it, but #we are newer, so overwrite it self._transfer_file(vfsFile, newURI, True) elif comp == DataType.COMPARISON_EQUAL: #in File.compare, the files are compared based on size, if #their mtimes are the same, so this case is true when # 1) The sizes are the same, and the user told us # to ignore the mtimes # 2) The mtimes and size is the same, and we checked both pass else: raise Exceptions.SynchronizeConflictError(comp, vfsFile, destFile) else: self._transfer_file(vfsFile, newURI, overwrite) return self.get(newURI).get_rid() def delete(self, LUID): f = File.File(URI=LUID) if f.exists(): f.delete() def get(self, uid): DataProvider.TwoWay.get(self, uid) f = File.File( URI=uid, basepath=self.folder, group=self.folderGroupName ) f.set_open_URI(uid) f.set_UID(uid) return f def get_all(self): DataProvider.TwoWay.get_all(self) return self.files def finish(self, aborted, error, conflict): DataProvider.TwoWay.finish(self) self.files = [] try: #Save the .group file to the root of this volume (if it is removable) save_removable_volume_group_file(self.folder, self.folderGroupName) except Exception, e: log.warn("Error saving volume group file: %s" % e) def add(self, LUID): f = File.File(URI=LUID) if f.exists() and f.is_directory(): self.folder = f._get_text_uri() return True return False conduit-0.3.17/conduit/dataproviders/Image.py0000644000175000017500000001642411321403566016110 00000000000000import logging log = logging.getLogger("dataproviders.Image") import conduit import conduit.Exceptions as Exceptions import conduit.datatypes.File as File import conduit.dataproviders.DataProvider as DataProvider from conduit.datatypes import Rid from gettext import gettext as _ class UploadInfo: """ Upload information container, this way we can add info and keep the _upload_info method on the ImageSink retain its api """ def __init__ (self, url, mimeType, name="", tags=(), caption=""): self.url = url self.mimeType = mimeType self.name = name self.tags = tags self.caption = caption class ImageSink(DataProvider.DataSink): """ Abstract Base class for Image DataSinks """ _category_ = conduit.dataproviders.CATEGORY_PHOTOS _module_type_ = "sink" _in_type_ = "file/photo" _out_type_ = "file/photo" IMAGE_SIZES = [_("640x480"), _("800x600"), _("1024x768")] NO_RESIZE = _("None") def __init__(self, *args): DataProvider.DataSink.__init__(self) def initialize(self): return True def _resize_combobox_build(self, combobox, selected): import gtk store = gtk.ListStore(str) cell = gtk.CellRendererText() combobox.pack_start(cell, True) combobox.add_attribute(cell, 'text', 0) combobox.set_model(store) for s in [self.NO_RESIZE] + self.IMAGE_SIZES: rowref = store.append( (s,) ) if s == selected: combobox.set_active_iter(rowref) def _resize_combobox_get_active(self, combobox): model = combobox.get_model() active = combobox.get_active() if active < 0: return self.NO_RESIZE size = model[active][0] if size not in self.IMAGE_SIZES: return self.NO_RESIZE return size def _get_photo_info(self, photoID): """ This should return the info for a given photo id, If this returns anything different from None, it will be passed onto _get_raw_photo_url """ return None def _get_raw_photo_url(self, photoInfo): """ This should return the url of the online photo """ return None def _upload_photo (self, uploadInfo): """ Upload a photo """ return None def _replace_photo (self, id, uploadInfo): """ Replace a photo with a new version """ return Rid(uid=id) def _get_photo_formats (self): """ This should return the allowed photo mimetypes """ return ("image/jpeg", "image/png") def _get_default_format (self): """ This should return the preferred format of images the sink accepts """ return "image/jpeg" def _get_photo_size (self): """ Return the preferred photo size string for rescaling, or None """ return None def put(self, photo, overwrite, LUID=None): """ Accepts a vfs file. Must be made local. I also store a md5 of the photos uri to check for duplicates """ DataProvider.DataSink.put(self, photo, overwrite, LUID) originalName = photo.get_filename() #Gets the local URI (/foo/bar). If this is a remote file then #it is first transferred to the local filesystem photoURI = photo.get_local_uri() mimeType = photo.get_mimetype() tags = photo.get_tags () caption = photo.get_caption() uploadInfo = UploadInfo(photoURI, mimeType, originalName, tags, caption) #Check if we have already uploaded the photo if LUID != None: info = self._get_photo_info(LUID) #check if a photo exists at that UID if info != None: if overwrite == True: #replace the photo return self._replace_photo(LUID, uploadInfo) else: #Only upload the photo if it is newer than the Remote one url = self._get_raw_photo_url(info) remoteFile = File.File(url) #this is a limited test for equality type comparison comp = photo.compare(remoteFile,True) log.debug("Compared %s with %s to check if they are the same (size). Result = %s" % (photo.get_filename(),remoteFile.get_filename(),comp)) if comp != conduit.datatypes.COMPARISON_EQUAL: raise Exceptions.SynchronizeConflictError(comp, photo, remoteFile) else: return conduit.datatypes.Rid(uid=LUID) log.debug("Uploading Photo URI = %s, Mimetype = %s, Original Name = %s" % (photoURI, mimeType, originalName)) #upload the file return self._upload_photo (uploadInfo) def delete(self, LUID): pass def get_input_conversion_args(self): args = { "formats" : ','.join(self._get_photo_formats()), "default-format" : self._get_default_format(), "size" : self._get_photo_size(), } return args class ImageTwoWay(DataProvider.DataSource, ImageSink): """ Abstract Base Class for ImageTwoWay dataproviders """ _module_type_ = "twoway" def __init__(self): DataProvider.DataSource.__init__(self) ImageSink.__init__(self) def put(self, photo, overwrite, LUID=None): """ Accepts a vfs file. Must be made local. I also store a md5 of the photos uri to check for duplicates """ DataProvider.DataSink.put(self, photo, overwrite, LUID) originalName = photo.get_filename() #Gets the local URI (/foo/bar). If this is a remote file then #it is first transferred to the local filesystem photoURI = photo.get_local_uri() mimeType = photo.get_mimetype() tags = photo.get_tags () caption = photo.get_caption() uploadInfo = UploadInfo(photoURI, mimeType, originalName, tags, caption) if overwrite and LUID: rid = self._replace_photo(LUID, uploadInfo) else: if LUID and self._get_photo_info(LUID): remotePhoto = self.get(LUID) comp = photo.compare(remotePhoto, False) log.debug("Compared %s with %s. Result = %s" % (photo.get_filename(),remotePhoto.get_filename(),comp)) if LUID != None and comp == conduit.datatypes.COMPARISON_NEWER: rid = self._replace_photo(LUID, uploadInfo) elif comp == conduit.datatypes.COMPARISON_EQUAL: rid = remotePhoto.get_rid() else: raise Exceptions.SynchronizeConflictError(comp, photo, remotePhoto) else: log.debug("Uploading Photo URI = %s, Mimetype = %s, Original Name = %s" % (photoURI, mimeType, originalName)) rid = self._upload_photo (uploadInfo) if not rid: raise Exceptions.SyncronizeError("Error putting/updating photo") else: return rid conduit-0.3.17/conduit/dataproviders/Makefile.am0000644000175000017500000000037711172176633016556 00000000000000conduitdir = $(pythondir)/conduit/dataproviders conduit_PYTHON = \ AutoSync.py \ DataProviderCategory.py \ DataProvider.py \ File.py \ HalFactory.py \ Image.py \ SimpleFactory.py \ VolumeFactory.py \ __init__.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/dataproviders/SimpleFactory.py0000644000175000017500000000275411172176633017656 00000000000000import logging log = logging.getLogger("dataproviders.SimpleFactory") import conduit import conduit.dataproviders.DataProvider as DataProvider class SimpleFactory(DataProvider.DataProviderFactory): """ Encapsulate the emit_added/emit_removed tracking logic and allow it to be shared with multiple dataprovider factories """ def __init__(self, **kwargs): DataProvider.DataProviderFactory.__init__(self, **kwargs) self.items = {} def item_added(self, key, **kwargs): log.info("Item Added: %s" % key) cat = self.get_category(key, **kwargs) idxs = [] for klass in self.get_dataproviders(key, **kwargs): args = self.get_args(key, **kwargs) idx = self.emit_added(klass, args, cat) idxs.append(idx) self.items[key] = idxs def item_removed(self, key): log.info("Item Removed: %s" % key) if key in self.items: for idx in self.items[key]: self.emit_removed(idx) del(self.items[key]) def get_category(self, key, **kwargs): """ Return a category to contain these dataproviders """ raise NotImplementedError def get_dataproviders(self, key, **kwargs): """ Return a list of dataproviders for this class of device """ raise NotImplementedError def get_args(self, key, **kwargs): raise NotImplementedError def is_interesting(self, udi, properties): raise NotImplementedError conduit-0.3.17/conduit/dataproviders/DataProviderCategory.py0000644000175000017500000000025011321370454021135 00000000000000class DataProviderCategory: def __init__(self, name, icon="image-missing", key=""): self.name = name self.icon = icon self.key = name + key conduit-0.3.17/conduit/dataproviders/HalFactory.py0000644000175000017500000000400311321370454017107 00000000000000import gobject import dbus import conduit.utils as Utils import conduit.dataproviders.SimpleFactory as SimpleFactory class HalFactory(SimpleFactory.SimpleFactory): def __init__(self, **kwargs): SimpleFactory.SimpleFactory.__init__(self, **kwargs) # Connect to system HAL self.bus = dbus.SystemBus() self.hal_obj = self.bus.get_object("org.freedesktop.Hal", "/org/freedesktop/Hal/Manager") self.hal = dbus.Interface(self.hal_obj, "org.freedesktop.Hal.Manager") # Hookup signals self.hal.connect_to_signal("DeviceAdded", self._device_added) self.hal.connect_to_signal("DeviceRemoved", self._device_removed) self.hal.connect_to_signal("NewCapability", self._new_capability) def _maybe_new(self, device_udi): props = self._get_properties(device_udi) if self.is_interesting(device_udi, props): self.item_added(device_udi, **props) def _device_added(self, device_udi, *args): self._maybe_new(device_udi) def _new_capability(self, device_udi, *args): if not device_udi in self.items.keys(): self._maybe_new(device_udi) def _device_removed(self, device_udi): self.item_removed(device_udi) def _get_properties(self, device): buf = {} try: device_dbus_obj = self.bus.get_object("org.freedesktop.Hal" ,device) for x, y in device_dbus_obj.GetAllProperties(dbus_interface="org.freedesktop.Hal.Device").items(): #DBus *still* does not marshal dbus.String to str correctly, #so we force it to buf[str(x)] = y except: log.warn("Could not get HAL properties for %s" % device_udi) return buf def probe(self): """ Enumerate HAL for any entries of interest """ devices = self.hal.GetAllDevices() for device in self.hal.GetAllDevices(): self._maybe_new(str(device)) def get_args(self, udi, **kwargs): return (udi,) conduit-0.3.17/conduit/dataproviders/Makefile.in0000644000175000017500000003223311326116726016561 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/dataproviders DIST_COMMON = $(conduit_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduitdir)" py_compile = $(top_srcdir)/py-compile DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ conduitdir = $(pythondir)/conduit/dataproviders conduit_PYTHON = \ AutoSync.py \ DataProviderCategory.py \ DataProvider.py \ File.py \ HalFactory.py \ Image.py \ SimpleFactory.py \ VolumeFactory.py \ __init__.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/dataproviders/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/dataproviders/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduitPYTHON: $(conduit_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduitdir)" || $(MKDIR_P) "$(DESTDIR)$(conduitdir)" @list='$(conduit_PYTHON)'; dlist=; list2=; test -n "$(conduitdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduitdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduitdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduitdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduitdir)" $$dlist; \ fi; \ else :; fi uninstall-conduitPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_PYTHON)'; test -n "$(conduitdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduitdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduitdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduitdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduitdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduitdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduitdir)" && rm -f $$fileso tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(conduitdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-conduitPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-conduitPYTHON .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-conduitPYTHON \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am uninstall-conduitPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/dataproviders/DataProvider.py0000644000175000017500000005311611321742705017452 00000000000000""" Cotains classes for representing DataSources or DataSinks. Copyright: John Stowers, 2006 License: GPLv2 """ import xml.dom.minidom import traceback import gobject from gettext import gettext as _ import logging log = logging.getLogger("dataproviders.DataProvider") import conduit import conduit.ModuleWrapper as ModuleWrapper import conduit.utils as Utils import conduit.Settings as Settings import conduit.XMLSerialization as XMLSerialization def N_(message): return message STATUS_NONE = N_("Ready") STATUS_CHANGE_DETECTED = N_("New data to sync") STATUS_REFRESH = N_("Refreshing...") STATUS_DONE_REFRESH_OK = N_("Refreshed OK") STATUS_DONE_REFRESH_ERROR = N_("Error Refreshing") STATUS_SYNC = N_("Synchronizing...") STATUS_DONE_SYNC_OK = N_("Synchronized OK") STATUS_DONE_SYNC_ERROR = N_("Error Synchronizing") STATUS_DONE_SYNC_SKIPPED = N_("Synchronization Skipped") STATUS_DONE_SYNC_CANCELLED = N_("Synchronization Cancelled") STATUS_DONE_SYNC_CONFLICT = N_("Synchronization Conflict") STATUS_DONE_SYNC_NOT_CONFIGURED = N_("Not Configured") class DataProviderBase(gobject.GObject): """ Model of a DataProvider. Can be a source or a sink """ __gsignals__ = { "status-changed": (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, []), "change-detected": (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, []) } _name_ = "" _description_ = "" _icon_ = "" _module_type_ = "dataprovider" _category_ = conduit.dataproviders.CATEGORY_TEST _configurable_ = False _out_type_ = "" _in_type_ = "" def __init__(self, *args): """ All sync functionality should be provided by derived classes """ gobject.GObject.__init__(self) self.pendingChangeDetected = False self.icon = None self.status = STATUS_NONE self.config_container = None self.configuration = {} def __emit_status_changed(self): """ Emits a 'status-changed' signal to the main loop. You should connect to this signal if you wish to be notified when the derived DataProvider goes through its stages (STATUS_* etc) """ self.emit("status-changed") return False def __emit_change_detected(self): """ Emits a 'change-detected' signal to the main loop. """ log.debug("Change detected in dataproviders data (%s)" % self.get_UID()) self.set_status(STATUS_CHANGE_DETECTED) self.emit("change-detected") self.pendingChangeDetected = False def emit(self, *args): """ Override the gobject signal emission so that all signals are emitted from the main loop on an idle handler """ gobject.idle_add(gobject.GObject.emit,self,*args) def initialize(self): """ Called when the module is loaded by the module loader. It is called in the main thread so should NOT block. It should perform simple tests to determine whether the dataprovider is applicable to the user and whether is should be presented to them. For example it may check if a specific piece of hardware is loaded, or check if a user has the specific piece of software installed with which it synchronizes. @returns: True if the module initialized correctly (is appropriate for the user), False otherwise @rtype: C{bool} """ return True def uninitialize(self): """ Called just before the application quits. """ pass def refresh(self): """ Performs any (conduit.logging in, etc) which must be undertaken on the dataprovider prior to calling get_all(). Should gather all information so a subsequent call to get_all() can return the uids of all the data this dataprovider holds This function may be called multiple times so derived classes should be aware of this. Derived classes should call this function to ensure the dataprovider status is updated. """ self.set_status(STATUS_REFRESH) def finish(self, *args): """ Perform any post-sync cleanup. For example, free any structures created in refresh that were used in the synchronization. """ if self.pendingChangeDetected: self.__emit_change_detected() def emit_change_detected(self): if self.is_busy(): self.pendingChangeDetected = True else: self.__emit_change_detected() def set_status(self, newStatus): """ Sets the dataprovider status. If the status has changed then emits a status-changed signal """ if newStatus != self.get_status(): self.status = newStatus self.__emit_status_changed() def get_status(self): """ @returns: The current dataproviders status """ return self.status def is_busy(self): """ A DataProvider is busy if it is currently in the middle of the intialization or synchronization process. @todo: This simple test introduces a few (many) corner cases where the function will return the wrong result. Think about this harder """ s = self.get_status() if s == STATUS_REFRESH: return True elif s == STATUS_SYNC: return True else: return False def get_config_container(self, configContainerKlass, name, icon, configurator): """ Retrieves the configuration container @param configContainerKlass: The class used to instantiate the graphical configuration widget. @param name: The name of the dataprovider being configured. Typically used in the graphical config widget @param icon: The icon of the dataprovider being configured. Typically used in the graphical config widget @param configurator: The configurator object """ # If the dataprovider is using the old system, returns None (a message # will be thrown in the Canvas module) if hasattr(self, "configure"): return None if not self.config_container: self.config_container = configContainerKlass(self, configurator) self.config_container.name = name self.config_container.icon = icon self.config_container.connect('apply', self.config_apply) self.config_container.connect('cancel', self.config_cancel) self.config_container.connect('show', self.config_show) self.config_container.connect('hide', self.config_hide) self.config_setup(self.config_container) # This is definetely just for debugging (it prints everything # that is changed in the configuration dialog) #self.config_container.connect( # "item-changed", # lambda c, i: log.debug("%s: %s = %s" % (i.title, i.config_name, i.get_value())) #) return self.config_container def config_setup(self, config_container): ''' Called when the configuration container was just built. Should be implemented by subclasses that want to show their own configuration. ''' pass def config_show(self, config_container): ''' Called when the configuration is about to be shown ''' pass def config_hide(self, config_container): ''' Called when the configuration is about to be hidden ''' pass def config_apply(self, config_container): ''' Called when the configuration was applied ''' pass def config_cancel(self, config_container): ''' Called when the configuration was cancelled ''' pass def is_configured(self, isSource, isTwoWay): """ Checks if the dp has been configured or not (and if it needs to be) @param isSource: True if the dataprovider is in the source position @param isTwoway: True if the dataprovider is a member of a two-way sync """ return True def get_configuration(self): """ Returns a dictionary of strings to be saved, representing the dataproviders current configuration. Should be overridden by all dataproviders wishing to be able to save their state between application runs @returns: Dictionary of strings containing application settings @rtype: C{dict(string)} """ if self.configuration: ret = {} for name, default, setter, getter in self._get_configuration_parameters(self.configuration): if getter: value = getter() elif hasattr(self, name): value = getattr(self, name) else: value = default ret[name] = value return ret else: log.critical("No configuration set (probably old-style module)") return {} def get_configuration_xml(self): """ Returns the dataprovider configuration as xml @rtype: C{string} """ xml_configuration = XMLSerialization.Settings() configDict = self.get_configuration() for name, value in configDict.iteritems(): xml_configuration[name] = value return xml_configuration.xml_document.toxml() def _get_configuration_parameters(self, configuration): ''' Normalize the configuration dict to 3 params and yields the name plus the parameters. See update_configuration for more information. ''' for name, params in configuration.iteritems(): if not isinstance(params, tuple): params = (params,) # Normalize to 3 parameters plus name yield (name,) + params + (None,) * (3 - len(params)) def _set_configuration_values(self, configuration, config = None): ''' Set attributes according to configuration. See update_configuration for more information. ''' for name, default, setter, getter in self._get_configuration_parameters(configuration): if hasattr(self, name) and callable(getattr(self, name)): continue if not config or (name in config): klass = None if default is not None: klass = default.__class__ if config: value = config[name] #FIXME: Wrap a try/except clause with logging if klass: value = klass(value) else: value = default if setter: if not hasattr(self, name): setattr(self, name, value) setter(value) else: setattr(self, name, value) def update_configuration(self, **kwargs): ''' Set the configuration values to be automatically saved and loaded. The keys to kwargs are the attribute names that will be used. The values to kwargs may be a default value or a tuple, containing the default value, a setter and a getter. Not all values must exist in the tuple. In the case the tuple's length is smaller then 3, the later properties are defaulted to None. The default value is immediately applied to the attribute if no other value is set to that attribute. So calling this function on initialization already initializes all attributes. The getter and setter are functions to get and set the value. They are very simple, getter should return the value to an attribute, so that value can be saved, while setter, which receives a value trough it's arguments, should propably set an attribute with that value. Notice that if the setter is used, the value is not automatically set as an attribute, unless that attribute does not exist. This allows a setter to compare the current attribute value to new value to be set, and only set the new value if it wishes so. Note if the dataprovider overrides set_configuration or get_configuration without calling the implementations in this class, then the properties defined here have no affect. Either do not override those functions, or call them like DataProviderBase.get_configuration(self). ''' #FIXME: Rewrite and clarify the documentation above self.configuration.update(kwargs) self._set_configuration_values(kwargs) def set_configuration(self, config): """ Restores applications settings @param config: dictionary of dataprovider settings to restore """ if self.configuration: self._set_configuration_values(self.configuration, config) else: for c in config: #Perform these checks to stop malformed xml from stomping on #unintended variables or posing a security risk by overwriting methods if getattr(self, c, None) != None and callable(getattr(self, c, None)) == False: setattr(self,c,config[c]) else: log.warn("Not restoring %s setting: Exists=%s Callable=%s" % ( c, getattr(self, c, False), callable(getattr(self, c, None))) ) def set_configuration_xml(self, xmltext): """ Restores applications settings from XML @param xmltext: xml representation of settings @type xmltext: C{string} """ xml_configuration = XMLSerialization.Settings(xmltext) settings = {} for name, value in xml_configuration: settings[name] = value try: self.set_configuration(settings) except Exception, err: log.warn("Error restoring %s configuration\n%s" % (self._name_, traceback.format_exc())) def get_UID(self): """ Returns a UID that represents this dataproviders (locally) unique state and configuration. For example the LUID for a gmail dp may be your username and password. Derived types MUST overwride this function @rtype: C{string} """ raise NotImplementedError def get_input_conversion_args(self): """ Provides a way to pass arguments to conversion functions. For example when transcoding a music file the dataprovider may return a dictionary specifying the conversion encoding, quality, etc @returns: a C{dict} of conversion arguments """ return {} def get_input_type(self): """ Provides a way for dataproviders to change the datatype they accept. In most cases implementing get_in_conversion args is recommended and will let you acomplish what you want. @returs: A C{string} in the form "type_name?arg_name=foo&arg_name2=bar" """ args = self.get_input_conversion_args() if len(args) == 0: return self._in_type_ else: return "%s?%s" % (self._in_type_, Utils.encode_conversion_args(args)) def get_output_conversion_args(self): """ Provides a way to pass arguments to conversion functions. For example when transcoding a music file the dataprovider may return a dictionary specifying the conversion encoding, quality, etc @returns: a C{dict} of conversion arguments """ return {} def get_output_type(self): """ Provides a way for dataproviders to change the datatype they emit. In most cases implementing get_out_conversion args is recommended and will let you acomplish what you want. @returs: A C{string} in the form "type_name?arg_name=foo&arg_name2=bar" """ args = self.get_output_conversion_args() if len(args) == 0: return self._out_type_ else: return "%s?%s" % (self._out_type_, Utils.encode_conversion_args(args)) def get_name(self): """ @returns: The DataProvider name, to be displayed in the UI """ return self._name_ class DataSource(DataProviderBase): """ Base Class for DataSources. """ def __init__(self): DataProviderBase.__init__(self) def get(self, LUID): """ Returns data with the specified LUID. This function must be overridden by the appropriate dataprovider. Derived classes should call this function to ensure the dataprovider status is updated. @param LUID: The index of the data to return @type LUID: C{string} @rtype: L{conduit.DataType.DataType} @returns: An item of data """ self.set_status(STATUS_SYNC) return None def get_num_items(self): """ Returns the number of items requiring sychronization. @returns: The number of items to synchronize @rtype: C{int} """ self.set_status(STATUS_SYNC) return len(self.get_all()) def get_all(self): """ Returns an array of all the LUIDs this dataprovider holds. """ self.set_status(STATUS_SYNC) return [] def get_changes(self): """ Returns all changes since last sync """ raise NotImplementedError def add(self, LUID): """ Adds an item to the datasource according to LUID. This method is used by the DBus interface @returns: True if the data was successfully added """ return False class DataSink(DataProviderBase): """ Base Class for DataSinks """ def __init__(self): DataProviderBase.__init__(self) def put(self, putData, overwrite, LUID): """ Stores data. The derived class is responsible for checking if putData conflicts. In the case of a two-way datasource, the derived type should consider the overwrite parameter, which if True, should allow the dp to replace a datatype instance if one is found at the existing location Derived classes should call this function to ensure the dataprovider status is updated. @param putData: Data which to save @type putData: A L{conduit.DataType.DataType} derived type that this dataprovider is capable of handling @param overwrite: If this argument is True, the DP should overwrite an existing datatype instance (if one exists). Generally used in conflict resolution. @type overwrite: C{bool} @param LUID: A locally unique identifier representing the location where the data was previously put. @raise conduit.Exceptions.SynchronizeConflictError: if there is a conflict between the data being put, and that which it is overwriting a L{conduit.Exceptions.SynchronizeConflictError} is raised. """ self.set_status(STATUS_SYNC) def delete(self, LUID): """ Deletes data with LUID. """ self.set_status(STATUS_SYNC) class TwoWay(DataSource, DataSink): """ Abstract Base Class for TwoWay dataproviders """ def __init__(self): DataSource.__init__(self) DataSink.__init__(self) class DataProviderFactory(gobject.GObject): """ Abstract base class for a factory which emits Dataproviders. Users should inherit from this if they wish to provide a loadable module in which dynamic dataproviders become available at runtime. """ __gsignals__ = { "dataprovider-added" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [ gobject.TYPE_PYOBJECT, #Wrapper gobject.TYPE_PYOBJECT]), #Class "dataprovider-removed" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [ gobject.TYPE_STRING]) #Unique key } _module_type_ = "dataprovider-factory" def __init__(self, **kwargs): gobject.GObject.__init__(self) def emit_added(self, klass, initargs, category, customKey=None): dpw = ModuleWrapper.ModuleWrapper( klass=klass, initargs=initargs, category=category ) dpw.set_dnd_key(customKey) key = dpw.get_dnd_key() log.debug("DataProviderFactory %s: Emitting dataprovider-added for %s" % (self, key)) self.emit("dataprovider-added", dpw, klass) return key def emit_removed(self, key): log.debug("DataProviderFactory %s: Emitting dataprovider-removed for %s" % (self, key)) self.emit("dataprovider-removed", key) def probe(self): pass def quit(self): """ Shutdown cleanup... """ pass def setup_configuration_widget(self): """ If the factory needs to offer configuration options then it should return a gtk.widget here. This widget is then packed into the configuration notebook. """ return None def save_configuration(self, ok): """ @param ok: True if the user closed the prefs panel with OK, false if they cancelled it. """ pass def get_name(self): return self.__class__.__name__ conduit-0.3.17/conduit/dataproviders/VolumeFactory.py0000644000175000017500000000424511321370454017662 00000000000000import gobject import logging log = logging.getLogger("dataproviders.VolumeFactory") import conduit import conduit.dataproviders.HalFactory as HalFactory class VolumeFactory(HalFactory.HalFactory): """ file system based, or more technically, that have the volume capability defined in HAL. This usually results in them being mounted as removable volumes. We jump through some extra hoops here because there is a race condition where we receive notification (the device has capability ("volume")) """ def _wait_for_mount(self, udi, props): props.update(self._get_properties(udi)) if not props.has_key("volume.is_mounted"): log.info("Still waiting for HAL to notice: %s" % udi) return True else: try: mounted = int(props["volume.is_mounted"]) if mounted == 1 and self.is_interesting(udi, props): self.item_added(udi, **props) except ValueError: log.warn("Could not determine if volume was mounted") return False def _maybe_new(self, device_udi): props = self._get_properties(device_udi) if "volume" in [str(c) for c in props.get("info.capabilities", [])]: #this basically checks if the volume mounting procedure has finished if str(props.get("volume.mount_point", "")) == "" or props.has_key("volume.is_mounted") == False: log.info("Waiting for HAL to attempt mount") gobject.timeout_add(1000, self._wait_for_mount, device_udi, props) else: if self.is_interesting(device_udi, props): self.item_added(device_udi, **props) def probe(self): """ Called after VolumeFactory is initialised to detect already connected volumes """ for device in self.hal.FindDeviceByCapability("volume"): self._maybe_new(str(device)) def get_args(self, udi, **kwargs): """ VolumeFactory passes mount point and udi to dataproviders """ kwargs["mount"] = "file://" + str(kwargs["volume.mount_point"]) return (kwargs['mount'], udi,) conduit-0.3.17/conduit/dataproviders/__init__.py0000644000175000017500000000166311321403566016624 00000000000000import DataProviderCategory def N_(message): return message #Default Categories for the DataProviders CATEGORY_FILES = DataProviderCategory.DataProviderCategory(N_("Files and Folders"), "computer") CATEGORY_NOTES = DataProviderCategory.DataProviderCategory(N_("Notes"), "tomboy") CATEGORY_PHOTOS = DataProviderCategory.DataProviderCategory(N_("Photos"), "image-x-generic") CATEGORY_OFFICE = DataProviderCategory.DataProviderCategory(N_("Office"), "applications-office") CATEGORY_SETTINGS = DataProviderCategory.DataProviderCategory(N_("Settings"), "applications-system") CATEGORY_MISC = DataProviderCategory.DataProviderCategory(N_("Miscellaneous"), "applications-accessories") CATEGORY_MEDIA = DataProviderCategory.DataProviderCategory(N_("Media"), "applications-multimedia") CATEGORY_BOOKMARKS = DataProviderCategory.DataProviderCategory(N_("Bookmarks"), "user-bookmarks") CATEGORY_TEST = DataProviderCategory.DataProviderCategory(N_("Test")) conduit-0.3.17/conduit/MappingDB.py0000644000175000017500000002116111321370454014011 00000000000000import os import os.path import logging log = logging.getLogger("MappingDB") import conduit import conduit.datatypes import conduit.utils as Utils import conduit.Database as Database DB_FIELDS = ("sourceUID","sourceDataLUID","sourceDataMtime","sourceDataHash","sinkUID","sinkDataLUID","sinkDataMtime","sinkDataHash") DB_TYPES = ("TEXT", "TEXT", "timestamp", "TEXT", "TEXT", "TEXT", "timestamp", "TEXT") class Mapping(object): """ Manages a mapping of source -> sink """ def __init__(self, oid, sourceUID, sourceRid, sinkUID, sinkRid): self.oid = oid self.sourceUID = sourceUID self.sourceRid = sourceRid self.sinkUID = sinkUID self.sinkRid = sinkRid def __str__(self): return "%s) [%s] <-> [%s] (%s <-> %s)" % (self.oid,self.sourceRid,self.sinkRid, self.sourceUID, self.sinkUID) def get_source_rid(self): return self.sourceRid def set_source_rid(self, rid): self.sourceRid = rid def get_sink_rid(self): return self.sinkRid def set_sink_rid(self, rid): self.sinkRid = rid def values(self): return (self.sourceUID,self.sourceRid.get_UID(),self.sourceRid.get_mtime(),self.sourceRid.get_hash(), self.sinkUID,self.sinkRid.get_UID(),self.sinkRid.get_mtime(),self.sinkRid.get_hash()) class MappingDB: """ Manages mappings of RID <-> RID on a per dataprovider basis. Table with 5 fields - 1. Source Wrapper UID 2. Source Data LUID 3. Sink Wrapper UID 4. Sink Data LUID 5. Modification Time """ def __init__(self, filename): self._open_db(filename) def _get_mapping_oid(self, sourceUID, dataLUID, sinkUID): sql = "SELECT oid FROM mappings WHERE sourceUID = ? AND sinkUID = ? AND sourceDataLUID = ? " \ "UNION " \ "SELECT oid FROM mappings WHERE sourceUID = ? AND sinkUID = ? AND sourceDataLUID = ? " \ "UNION " \ "SELECT oid FROM mappings WHERE sourceUID = ? AND sinkUID = ? AND sinkDataLUID = ? " \ "UNION " \ "SELECT oid FROM mappings WHERE sourceUID = ? AND sinkUID = ? AND sinkDataLUID = ? " params = ( sourceUID,sinkUID,dataLUID, sinkUID,sourceUID,dataLUID, sourceUID,sinkUID,dataLUID, sinkUID,sourceUID,dataLUID ) oid = self._db.select_one(sql, params) if oid == None: return None else: return oid[0] def _open_db_and_check_structure(self, filename): self._db = Database.ThreadSafeGenericDB(filename,detect_types=True) if "mappings" not in self._db.get_tables(): self._db.create( table="mappings", fields=DB_FIELDS, fieldtypes=DB_TYPES ) def _open_db(self, f): """ Opens the mapping DB at the location @ filename """ filename = os.path.abspath(f) try: self._open_db_and_check_structure(filename) except: os.unlink(filename) self._open_db_and_check_structure(filename) def get_mapping_from_objects(self, LUID1, LUID2, UID): # Check in both directions, as a conflict resolution can reverse the direction of the mapping sql = "SELECT * FROM mappings WHERE (sourceUID = ? OR sinkUID = ? ) AND ((sinkDataLUID = ? AND sourceDataLUID = ?) OR (sourceDataLUID = ? AND sinkDataLUID = ?))" res = self._db.select_one(sql, (UID, UID, LUID1, LUID2, LUID1, LUID2)) #a mapping is always returned relative to the source -> sink #order in which it was called. if (res[5] == UID): m = Mapping( res[0], sourceUID=res[1], sourceRid=conduit.datatypes.Rid(res[2],res[3],res[4]), sinkUID=res[5], sinkRid=conduit.datatypes.Rid(res[6],res[7],res[8]) ) else: m = Mapping( res[0], sourceUID=res[5], sourceRid=conduit.datatypes.Rid(res[6],res[7],res[8]), sinkUID=res[1], sinkRid=conduit.datatypes.Rid(res[2],res[3],res[4]) ) return m def get_mapping(self, sourceUID, dataLUID, sinkUID): """ pass """ oid = self._get_mapping_oid(sourceUID, dataLUID, sinkUID) if oid == None: m = Mapping( None, sourceUID=sourceUID, sourceRid=conduit.datatypes.Rid(uid=dataLUID), sinkUID=sinkUID, sinkRid=conduit.datatypes.Rid() ) else: sql = "SELECT * FROM mappings WHERE oid = ?" res = self._db.select_one(sql, (oid,)) #a mapping is always returned relative to the source -> sink #order in which it was called. if (res[1] == sourceUID): m = Mapping( res[0], sourceUID=res[1], sourceRid=conduit.datatypes.Rid(res[2],res[3],res[4]), sinkUID=res[5], sinkRid=conduit.datatypes.Rid(res[6],res[7],res[8]) ) else: m = Mapping( res[0], sourceUID=res[5], sourceRid=conduit.datatypes.Rid(res[6],res[7],res[8]), sinkUID=res[1], sinkRid=conduit.datatypes.Rid(res[2],res[3],res[4]) ) #FIXME: Remove these... #assert(m.sourceUID == sourceUID) #assert(m.sinkUID == sinkUID) return m def get_mappings_for_dataproviders(self, sourceUID, sinkUID): """ Gets all the data mappings for the dataprovider pair sourceUID --> sinkUID """ mappings = [] sql = "SELECT * FROM mappings WHERE sourceUID = ? AND sinkUID = ?" for res in self._db.select(sql, (sourceUID, sinkUID)): m = Mapping( res[0], sourceUID=res[1], sourceRid=conduit.datatypes.Rid(res[2],res[3],res[4]), sinkUID=res[5], sinkRid=conduit.datatypes.Rid(res[6],res[7],res[8]) ) mappings.append(m) return mappings def save_mapping(self, mapping): """ Saves a mapping between the dataproviders """ if mapping.oid == None: #log.debug("New Mapping: %s" % mapping) self._db.insert( table="mappings", values=mapping.values() ) else: #log.debug("Update Mapping: %s" % mapping) self._db.update( table="mappings", oid=mapping.oid, values=mapping.values() ) def get_matching_UID(self, sourceUID, dataLUID, sinkUID): """ For a given source and sink pair and a dataLUID from the pair find the other matching dataLUID. @returns: dataLUID """ oid = self._get_mapping_oid(sourceUID, dataLUID, sinkUID) if oid != None: sourceDataLUID, sinkDataLUID = self._db.select_one("SELECT sourceDataLUID,sinkDataLUID FROM mappings WHERE oid = ?",(oid,)) #return the other LUID if dataLUID == sourceDataLUID: return sinkDataLUID elif dataLUID == sinkDataLUID: return sourceDataLUID else: log.warn("Mapping Error") return None else: log.debug("No mapping found for LUID: %s (source: %s, sink %s)" % (dataLUID, sourceUID, sinkUID)) return None def delete_mapping(self, mapping): """ Deletes mapping between the dataproviders sourceUID and sinkUID that involve dataLUID """ if mapping.oid == None: log.warn("Could not delete mapping ") self._db.delete(table="mappings",oid=mapping.oid) def save(self): self._db.save() def delete(self): self._db.execute("DELETE FROM mappings") def debug(self): self._db.debug() def close(self): self._db.close() conduit-0.3.17/conduit/SyncSet.py0000644000175000017500000002641011321742705013604 00000000000000""" Represents a group of conduits Copyright: John Stowers, 2007 License: GPLv2 """ import traceback import os import xml.dom.minidom import gobject import logging log = logging.getLogger("SyncSet") import conduit import conduit.Conduit as Conduit import conduit.Settings as Settings import conduit.XMLSerialization as XMLSerialization SETTINGS_VERSION = XMLSerialization.Settings.XML_VERSION class SyncSet(gobject.GObject): """ Represents a group of conduits """ __gsignals__ = { #Fired when a new instantiatable DP becomes available. It is described via #a wrapper because we do not actually instantiate it till later - to save memory "conduit-added" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [ gobject.TYPE_PYOBJECT]), # The ConduitModel that was added "conduit-removed" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [ gobject.TYPE_PYOBJECT]), # The ConduitModel that was removed } def __init__(self, moduleManager, syncManager, xmlSettingFilePath="settings.xml"): gobject.GObject.__init__(self) self.moduleManager = moduleManager self.syncManager = syncManager self.xmlSettingFilePath = xmlSettingFilePath self.conduits = [] self.moduleManager.connect("dataprovider-available", self.on_dataprovider_available_unavailable) self.moduleManager.connect("dataprovider-unavailable", self.on_dataprovider_available_unavailable) # FIXME: temporary hack - need to let factories know about this factory :-\! self.moduleManager.emit("syncset-added", self) def _unitialize_dataproviders(self, cond): for dp in cond.get_all_dataproviders(): if dp.module: try: dp.module.uninitialize() except Exception: log.warn("Could not uninitialize %s" % dp, exc_info=True) def _restore_dataprovider(self, cond, wrapperKey, dpName="", dpxml="", trySourceFirst=True): """ Adds the dataprovider back onto the canvas at the specifed location and configures it with the given settings """ log.debug("Restoring %s to (source=%s)" % (wrapperKey,trySourceFirst)) wrapper = self.moduleManager.get_module_wrapper_with_instance(wrapperKey) if dpName: wrapper.set_name(dpName) if wrapper is not None: if dpxml: for i in dpxml.childNodes: if i.nodeType == i.ELEMENT_NODE and i.localName == "configuration": wrapper.set_configuration_xml(xmltext=i.toxml()) cond.add_dataprovider(wrapper, trySourceFirst) def on_dataprovider_available_unavailable(self, loader, dpw): """ Removes all PendingWrappers corresponding to dpw and replaces with new dpw instances """ key = dpw.get_key() for c in self.get_all_conduits(): for dp in c.get_dataproviders_by_key(key): new = self.moduleManager.get_module_wrapper_with_instance(key) #retain configuration information new.set_configuration_xml(dp.get_configuration_xml()) new.set_name(dp.get_name()) c.change_dataprovider( oldDpw=dp, newDpw=new ) def emit(self, *args): """ Override the gobject signal emission so that all signals are emitted from the main loop on an idle handler """ gobject.idle_add(gobject.GObject.emit,self,*args) def create_preconfigured_conduit(self, sourceKey, sinkKey, twoway): cond = Conduit.Conduit(self.syncManager) self.add_conduit(cond) if twoway == True: cond.enable_two_way_sync() self._restore_dataprovider(cond, sourceKey, trySourceFirst=True) self._restore_dataprovider(cond, sinkKey, trySourceFirst=False) def add_conduit(self, cond): self.conduits.append(cond) self.emit("conduit-added", cond) def remove_conduit(self, cond): self.emit("conduit-removed", cond) self._unitialize_dataproviders(cond) self.conduits.remove(cond) def get_all_conduits(self): return self.conduits def get_conduit(self, index): return self.conduits[index] def index (self, conduit): return self.conduits.index(conduit) def num_conduits(self): return len(self.conduits) def clear(self): for c in self.conduits[:]: self.remove_conduit(c) def save_to_xml(self, xmlSettingFilePath=None): """ Saves the synchronisation settings (icluding all dataproviders and how they are connected) to an xml file so that the 'sync set' can be restored later """ if xmlSettingFilePath == None: xmlSettingFilePath = self.xmlSettingFilePath log.info("Saving Sync Set to %s" % self.xmlSettingFilePath) #Build the application settings xml document doc = xml.dom.minidom.Document() rootxml = doc.createElement("conduit-application") rootxml.setAttribute("application-version", conduit.VERSION) rootxml.setAttribute("settings-version", SETTINGS_VERSION) doc.appendChild(rootxml) #Store the conduits for cond in self.conduits: conduitxml = doc.createElement("conduit") conduitxml.setAttribute("uid",cond.uid) conduitxml.setAttribute("twoway",str(cond.is_two_way())) conduitxml.setAttribute("autosync",str(cond.do_auto_sync())) for policyName in Conduit.CONFLICT_POLICY_NAMES: conduitxml.setAttribute( "%s_policy" % policyName, cond.get_policy(policyName) ) rootxml.appendChild(conduitxml) #Store the source source = cond.datasource if source is not None: sourcexml = doc.createElement("datasource") sourcexml.setAttribute("key", source.get_key()) sourcexml.setAttribute("name", source.get_name()) conduitxml.appendChild(sourcexml) #Store source settings configxml = xml.dom.minidom.parseString(source.get_configuration_xml()) sourcexml.appendChild(configxml.documentElement) #Store all sinks sinksxml = doc.createElement("datasinks") for sink in cond.datasinks: sinkxml = doc.createElement("datasink") sinkxml.setAttribute("key", sink.get_key()) sinkxml.setAttribute("name", sink.get_name()) sinksxml.appendChild(sinkxml) #Store sink settings configxml = xml.dom.minidom.parseString(sink.get_configuration_xml()) sinkxml.appendChild(configxml.documentElement) conduitxml.appendChild(sinksxml) #Save to disk try: file_object = open(xmlSettingFilePath, "w") file_object.write(doc.toxml()) #file_object.write(doc.toprettyxml()) file_object.close() except IOError, err: log.warn("Could not save settings to %s (Error: %s)" % (xmlSettingFilePath, err.strerror)) def restore_from_xml(self, xmlSettingFilePath=None): """ Restores sync settings from the xml file """ if xmlSettingFilePath == None: xmlSettingFilePath = self.xmlSettingFilePath log.info("Restoring Sync Set from %s" % xmlSettingFilePath) #Check the file exists if not os.path.isfile(xmlSettingFilePath): log.info("%s not present" % xmlSettingFilePath) return try: #Open doc = xml.dom.minidom.parse(xmlSettingFilePath) #check the xml file is in a version we can read. if doc.documentElement.hasAttribute("settings-version"): xml_version = doc.documentElement.getAttribute("settings-version") try: xml_version = int(xml_version) except ValueError, TypeError: log.error("%s xml file version is not valid" % xmlSettingFilePath) os.remove(xmlSettingFilePath) return if int(SETTINGS_VERSION) < xml_version: log.warning("%s xml file is incorrect version" % xmlSettingFilePath) os.remove(xmlSettingFilePath) return else: log.info("%s xml file version not found, assuming too old, removing" % xmlSettingFilePath) os.remove(xmlSettingFilePath) return #Parse... for conds in doc.getElementsByTagName("conduit"): #create a new conduit cond = Conduit.Conduit(self.syncManager, conds.getAttribute("uid")) self.add_conduit(cond) #restore conduit specific settings twoway = Settings.string_to_bool(conds.getAttribute("twoway")) if twoway == True: cond.enable_two_way_sync() auto = Settings.string_to_bool(conds.getAttribute("autosync")) if auto == True: cond.enable_auto_sync() for policyName in Conduit.CONFLICT_POLICY_NAMES: cond.set_policy( policyName, conds.getAttribute("%s_policy" % policyName) ) #each dataprovider for i in conds.childNodes: #keep a ref to the dataproider was added to so that we #can apply settings to it at the end #one datasource if i.nodeType == i.ELEMENT_NODE and i.localName == "datasource": key = i.getAttribute("key") name = i.getAttribute("name") #add to canvas if len(key) > 0: self._restore_dataprovider(cond, key, name, i, True) #many datasinks elif i.nodeType == i.ELEMENT_NODE and i.localName == "datasinks": #each datasink for sink in i.childNodes: if sink.nodeType == sink.ELEMENT_NODE and sink.localName == "datasink": key = sink.getAttribute("key") name = sink.getAttribute("name") #add to canvas if len(key) > 0: self._restore_dataprovider(cond, key, name, sink, False) except: log.warn("Error parsing %s. Exception:\n%s" % (xmlSettingFilePath, traceback.format_exc())) os.remove(xmlSettingFilePath) def quit(self): """ Calls unitialize on all dataproviders """ for c in self.conduits: self._unitialize_dataproviders(c) conduit-0.3.17/conduit/Conduit.py0000644000175000017500000003135611321370454013624 00000000000000""" Represents a conduit (The joining of one source to one or more sinks) Copyright: John Stowers, 2006 License: GPLv2 """ import gobject import logging log = logging.getLogger("Conduit") import conduit import conduit.utils as Utils CONFLICT_POLICY_NAMES = ("conflict", "deleted") CONFLICT_POLICY_VALUES = ("ask","skip","replace") CONFLICT_POLICY_VALUE_ICONS = { "conflict_ask" : "conduit-conflict-ask", "conflict_skip" : "conduit-conflict-skip", "conflict_replace" : "conduit-conflict-right", "deleted_ask" : "conduit-conflict-ask", "deleted_skip" : "conduit-conflict-skip", "deleted_replace" : "conduit-conflict-delete" } class Conduit(gobject.GObject): """ Model of a Conduit, which is a one-to-many bridge of DataSources to DataSinks. @ivar datasource: The DataSource to synchronize from @type datasource: L{conduit.Module.ModuleWrapper} @ivar datasinks: List of DataSinks to synchronize to @type datasinks: L{conduit.Module.ModuleWrapper}[] """ __gsignals__ = { #Fired when a new instantiatable DP becomes available. It is described via #a wrapper because we do not actually instantiate it till later - to save memory "dataprovider-added" : ( gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [ gobject.TYPE_PYOBJECT]), # The DataProvider that was added to this ConduitModel "dataprovider-removed" : ( gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [ gobject.TYPE_PYOBJECT]), # The DataProvider that was removed from this ConduitModel "dataprovider-changed" : ( gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [ gobject.TYPE_PYOBJECT, # The old DP gobject.TYPE_PYOBJECT]), # The new DP "parameters-changed" : ( gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, []), "sync-conflict": ( gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [ gobject.TYPE_PYOBJECT]), #Conflict object "sync-completed": ( gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [ gobject.TYPE_BOOLEAN, #True if there was a fatal error gobject.TYPE_BOOLEAN, #True if there was a non fatal error gobject.TYPE_BOOLEAN]), #True if there was a conflict "sync-started": ( gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, []), "sync-progress": ( gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [ gobject.TYPE_FLOAT, #percent complete gobject.TYPE_PYOBJECT]) #list of successfully completed UIDs } def __init__(self, syncManager, uid=""): """ Makes and empty conduit ready to hold one datasource and many datasinks """ gobject.GObject.__init__(self) self.syncManager = syncManager if uid == "": self.uid = Utils.uuid_string() else: self.uid = uid #a conduit can hold one datasource and many datasinks (wrappers) self.datasource = None self.datasinks = [] self.twoWaySyncEnabled = False self.slowSyncEnabled = False self.autoSyncEnabled = False self.conflictPolicy = "" self.deletedPolicy = "" #set conduits to have the default conflict/deleted policy for policyName in CONFLICT_POLICY_NAMES: policyValue = conduit.GLOBALS.settings.get("default_policy_%s" % policyName) self.set_policy(policyName,policyValue) self._conflicts = {} def _parameters_changed(self): self.emit("parameters-changed") def _change_detected(self, arg): #Dont trigger a sync if we are already synchronising if not self.is_busy() and self.do_auto_sync(): log.debug("Triggering an auto sync...") self.sync() def emit(self, *args): """ Override the gobject signal emission so that all signals are emitted from the main loop on an idle handler """ gobject.idle_add(gobject.GObject.emit,self,*args) def add_dataprovider(self, dataprovider_wrapper, trySourceFirst=True): """ Adds a dataprovider to the conduit. @param dataprovider_wrapper: The L{conduit.Module.ModuleWrapper} containing a L{conduit.DataProvider.DataProviderBase} to add @type dataprovider_wrapper: L{conduit.Module.ModuleWrapper} """ if dataprovider_wrapper.module_type == "source": #only one source is allowed if self.datasource == None: self.datasource = dataprovider_wrapper else: log.warn("Only one datasource allowed per conduit") return False elif dataprovider_wrapper.module_type == "sink": #only one sink of each kind is allowed if dataprovider_wrapper in self.datasinks: log.warn("This datasink already present in this conduit") return False else: #temp reference for drawing the connector line self.datasinks.append(dataprovider_wrapper) elif dataprovider_wrapper.module_type == "twoway": if self.datasource == None: if trySourceFirst: log.debug("Adding twoway dataprovider into source position") self.datasource = dataprovider_wrapper else: log.debug("Adding twoway dataprovider into sink position") self.datasinks.append(dataprovider_wrapper) else: log.debug("Adding twoway dataprovider into sink position") self.datasinks.append(dataprovider_wrapper) else: log.warn("Only sinks, sources or twoway dataproviders may be added") return False if dataprovider_wrapper.module != None: dataprovider_wrapper.module.connect("change-detected", self._change_detected) self.emit("dataprovider-added", dataprovider_wrapper) return True def get_dataprovider_position(self, dataproviderWrapper): """ Returns the dp position, Source = 0,0 Sink = 1, index """ if dataproviderWrapper == self.datasource: return 0, 0 elif dataproviderWrapper in self.datasinks: return 1, self.datasinks.index(dataproviderWrapper) else: return -1, -1 def is_busy(self): """ Returns True if the conduit is currenlty performing a synchronisation operaton on one or more of its contained DataProviders """ return self.syncManager.sync_in_progress(self) def can_sync(self): """ Returns True if this conduit can be synchronized. It must have a source and a sync, that are not pending """ return self.datasource != None \ and len(self.datasinks) > 0 \ and not self.datasource.is_pending() \ and not self.datasinks[0].is_pending() def get_dataproviders_by_key(self, key): """ Use list comprehension to return all dp's with a given key @returns: A list of dataproviders with a given key """ return [dp for dp in [self.datasource] + self.datasinks if dp != None and dp.get_key()==key] def get_all_dataproviders(self): """ @returns: A list of dataproviders with a given key """ return [dp for dp in [self.datasource] + self.datasinks if dp != None] def is_empty(self): """ @returns: True if the conduit contains no dataproviders """ return self.datasource == None and len(self.datasinks) == 0 def delete_dataprovider(self, dataprovider): """ Deletes dataprovider """ self.emit("dataprovider-removed", dataprovider) #needed to close the db in file dataproviders if dataprovider.module != None: try: dataprovider.module.uninitialize() except Exception: log.warn("Could not uninitialize %s" % dataprovider, exc_info=True) #Sources and sinks are stored seperately so must be deleted from different #places. Lucky there is only one source or this would be harder.... if dataprovider == self.datasource: del(self.datasource) self.datasource = None return True elif dataprovider in self.datasinks: i = self.datasinks.index(dataprovider) del(self.datasinks[i]) return True else: log.warn("Could not remove %s" % dataprovider) return False def can_do_two_way_sync(self): """ Checks if the conduit is eleigable for two way sync, which is true if it has one source and once sink. Two way doesnt make sense in any other case """ if self.datasource != None and len(self.datasinks) == 1: return self.datasource.module_type == "twoway" and self.datasinks[0].module_type == "twoway" return False def enable_two_way_sync(self): log.debug("Enabling Two Way Sync") self.twoWaySyncEnabled = True self._parameters_changed() def disable_two_way_sync(self): log.debug("Disabling Two Way Sync") self.twoWaySyncEnabled = False self._parameters_changed() def is_two_way(self): return self.can_do_two_way_sync() and self.twoWaySyncEnabled def enable_slow_sync(self): log.debug("Enabling Slow Sync") self.slowSyncEnabled = True self._parameters_changed() def disable_slow_sync(self): log.debug("Disabling Slow Sync") self.slowSyncEnabled = False self._parameters_changed() def do_slow_sync(self): return self.slowSyncEnabled def enable_auto_sync(self): log.debug("Enabling Auto Sync") self.autoSyncEnabled = True self._parameters_changed() def disable_auto_sync(self): log.debug("Disabling Auto Sync") self.autoSyncEnabled = False self._parameters_changed() def do_auto_sync(self): return self.autoSyncEnabled def get_policy(self, policy): if policy not in CONFLICT_POLICY_NAMES: raise Exception("Unknown policy: %s" % policy) if policy == "conflict": return self.conflictPolicy else: return self.deletedPolicy def set_policy(self, policy, value): if policy not in CONFLICT_POLICY_NAMES: raise Exception("Unknown policy: %s" % policy) if value not in CONFLICT_POLICY_VALUES: raise Exception("Unknown policy value: %s" % policy) if policy == "conflict": self.conflictPolicy = value else: self.deletedPolicy = value def change_dataprovider(self, oldDpw, newDpw): """ called when dpw becomes unavailable. """ x,y = self.get_dataprovider_position(oldDpw) self.delete_dataprovider(oldDpw) self.add_dataprovider( dataprovider_wrapper=newDpw, trySourceFirst=(x==0) ) if newDpw.module != None: newDpw.module.connect("change-detected", self._change_detected) self.emit("dataprovider-changed", oldDpw, newDpw) def refresh_dataprovider(self, dp, block=False): if dp in self.get_all_dataproviders(): self.syncManager.refresh_dataprovider(self, dp) if block == True: self.syncManager.join_one(self) else: log.warn("Could not refresh dataprovider: %s" % dp) def refresh(self, block=False): if self.datasource is not None and len(self.datasinks) > 0: self.syncManager.refresh_conduit(self) if block == True: self.syncManager.join_one(self) else: log.info("Conduit must have a datasource and a datasink") def sync(self, block=False): if self.datasource is not None and len(self.datasinks) > 0: self.syncManager.sync_conduit(self) if block == True: self.syncManager.join_one(self) else: log.info("Conduit must have a datasource and a datasink") def emit_conflict(self, conflict): hc = hash(conflict) if hc not in self._conflicts: self._conflicts[hc] = conflict self.emit("sync-conflict", conflict) def resolved_conflict(self, conflict): try: hc = hash(conflict) del(self._conflicts[hc]) except KeyError: log.warn("Unknown conflict") conduit-0.3.17/conduit/DeltaProvider.py0000644000175000017500000000513611172176633014767 00000000000000""" Shared API for comparing the previous state of a dp to the current state. Returns only changes to core synch mechanism. This class is a proxy for the TwoWay dataprovider. If the dataprovider cannot implement get_changes() using backend dependant means this class uses the mapping DB to implement get_changes() This class will always be slower than if the backend implements the function iteself. Copyright: John Stowers, 2006 License: GPLv2 """ import logging log = logging.getLogger("DeltaProvider") import conduit class DeltaProvider: def __init__(self, dpw, otherdpw): self.me = dpw self.other = otherdpw log.info("Delta: Source (%s) does not implement get_changes(). Proxying..." % self.me.get_UID()) def get_changes(self): """ @returns: added, modified, deleted """ allItems = [] for i in self.me.module.get_all(): #Make sure the are in unicode to assure a #good comparison with mapping UID's if type(i) != unicode: i = unicode(i,errors='replace') allItems.append(i) log.debug("Delta: Got %s items\n%s" % (len(allItems), allItems)) #In order to detect deletions we need to fetch all the existing relationships. #we also get the rids because we need those to detect if something has changed rids = {} for m in conduit.GLOBALS.mappingDB.get_mappings_for_dataproviders(self.me.get_UID(), self.other.get_UID()): rids[ m.get_source_rid().get_UID() ] = m.get_source_rid() for m in conduit.GLOBALS.mappingDB.get_mappings_for_dataproviders(self.other.get_UID(), self.me.get_UID()): rids[ m.get_sink_rid().get_UID() ] = m.get_sink_rid() log.debug("Delta: Expecting %s items" % len(rids)) for uid,rid in rids.items(): log.debug("%s) -- %s" % (uid,rid)) #now classify all my items relative to the expected data from the previous #sync with the supplied other dataprovider. Copy (slice) the list because we #modify it in place modified = [] for i in allItems[:]: if i in rids: data = self.me.module.get(i) if data.get_rid().get_hash() != rids[i].get_hash(): log.debug("Modified: Actual:%s v DB:%s" % (data.get_rid(), rids[i])) modified.append(i) del(rids[i]) allItems.remove(i) #now all that remains in rids is data which has been deleted, #and all that remains in allItems is new data return allItems, modified, rids.keys() conduit-0.3.17/conduit/DBus.py0000644000175000017500000005075511326113737013064 00000000000000""" DBus related functionality including the DBus interface and utility functions Copyright: John Stowers, 2006 License: GPLv2 """ import os.path import dbus import dbus.service import logging log = logging.getLogger("DBus") import conduit import conduit.utils as Utils import conduit.Conduit as Conduit import conduit.SyncSet as SyncSet ERROR = -1 SUCCESS = 0 DEBUG_ALL_CALLS = True APPLICATION_DBUS_IFACE="org.conduit.Application" SYNCSET_DBUS_IFACE="org.conduit.SyncSet" CONDUIT_DBUS_IFACE="org.conduit.Conduit" EXPORTER_DBUS_IFACE="org.conduit.Exporter" DATAPROVIDER_DBUS_IFACE="org.conduit.DataProvider" ################################################################################ # DBus API Docs ################################################################################ # # ==== Main Application ==== # Service org.conduit.Application # Interface org.conduit.Application # Object path / # # Methods: # BuildConduit(source, sink) # BuildExporter(self, sinkKey) # ListAllDataProviders # GetDataProvider # NewSyncSet # Quit # # Signals: # DataproviderAvailable(key) # DataproviderUnavailable(key) # # ==== SyncSet ==== # Service org.conduit.SyncSet # Interface org.conduit.SyncSet # Object path /syncset/{dbus, gui, UUID} # # Methods: # AddConduit # DeleteConduit # SaveToXml # RestoreFromXml # # Signals: # ConduitAdded(key) # ConduitRemoved(key) # # ==== Conduit ==== # Service org.conduit.Conduit # Interface org.conduit.Conduit # Object path /conduit/{some UUID} # # Methods: # EnableTwoWaySync # DisableTwoWaySync # IsTwoWay # AddDataprovider # DeleteDataprovider # Sync # Refresh # # Signals: # SyncStarted # SyncCompleted(aborted, error, conflict) # SyncConflict # SyncProgress(progress, completedUIDs) # DataproviderAdded # DataproviderRemoved # # ==== Exporter Conduit ==== # Service org.conduit.Conduit # Interface org.conduit.Exporter # Object path /conduit/{some UUID} # # Methods: # AddData # SinkConfigure # SinkGetInformation # SinkGetConfigurationXml # SinkSetConfigurationXml # # ==== DataProvider ==== # Service org.conduit.DataProvider # Interface org.conduit.DataProvider # Object path /dataprovider/{some UUID} # # Methods: # IsPending # IsConfigured # SetConfigurationXML # GetConfigurationXML # Configure # GetInformation # AddData # # Signals: #All objects currently exported over the bus EXPORTED_OBJECTS = {} class ConduitException(dbus.DBusException): _dbus_error_name = 'org.conduit.ConduitException' class DBusItem(dbus.service.Object): def __init__(self, iface, path): bus_name = dbus.service.BusName(iface, bus=dbus.SessionBus()) dbus.service.Object.__init__(self, bus_name, path) log.debug("DBus Exported: %s" % self.get_path()) def get_path(self): return self.__dbus_object_path__ def _print(self, message): if DEBUG_ALL_CALLS: log.debug("DBus Message from %s: %s" % (self.get_path(), message)) class ConduitDBusItem(DBusItem): def __init__(self, sync_manager, conduit, uuid): DBusItem.__init__(self, iface=CONDUIT_DBUS_IFACE, path="/conduit/%s" % uuid) self.sync_manager = sync_manager self.conduit = conduit self.conduit.connect("sync-started", self._on_sync_started) self.conduit.connect("sync-completed", self._on_sync_completed) self.conduit.connect("sync-conflict", self._on_sync_conflict) self.conduit.connect("sync-progress", self._on_sync_progress) def _on_sync_started(self, cond): if cond == self.conduit: self.SyncStarted() def _on_sync_completed(self, cond, aborted, error, conflict): if cond == self.conduit: self.SyncCompleted(bool(aborted), bool(error), bool(conflict)) def _on_sync_progress(self, cond, progress, UIDs): if cond == self.conduit: self.SyncProgress(float(progress), UIDs) def _on_sync_conflict(self, cond, conflict): if cond == self.conduit: self.SyncConflict() # # org.conduit.Conduit # @dbus.service.method(CONDUIT_DBUS_IFACE, in_signature='', out_signature='') def EnableTwoWaySync(self): self._print("EnableTwoWaySync") self.conduit.enable_two_way_sync() @dbus.service.method(CONDUIT_DBUS_IFACE, in_signature='', out_signature='') def DisableTwoWaySync(self): self._print("DisableTwoWaySync") self.conduit.disable_two_way_sync() @dbus.service.method(CONDUIT_DBUS_IFACE, in_signature='', out_signature='b') def IsTwoWay(self): self._print("IsTwoWay") return self.conduit.is_two_way() @dbus.service.method(CONDUIT_DBUS_IFACE, in_signature='ob', out_signature='') def AddDataprovider(self, dp, trySource): self._print("AddDataprovider: %s" % dp) #get the actual dps from their object paths try: dpw = EXPORTED_OBJECTS[str(dp)].dataprovider except KeyError, e: raise ConduitException("Could not locate dataprovider: %s" % e) if not self.conduit.add_dataprovider(dpw): raise ConduitException("Could not add dataprovider: %s" % e) @dbus.service.method(CONDUIT_DBUS_IFACE, in_signature='o', out_signature='') def DeleteDataprovider(self, dp): self._print("DeleteDataprovider: %s" % dp) #get the actual dps from their object paths try: dpw = EXPORTED_OBJECTS[str(dp)].dataprovider except KeyError, e: raise ConduitException("Could not locate dataprovider: %s" % e) if not self.conduit.delete_dataprovider(dpw): raise ConduitException("Could not delete dataprovider: %s" % e) @dbus.service.method(CONDUIT_DBUS_IFACE, in_signature='', out_signature='') def Sync(self): self._print("Sync") self.conduit.sync() @dbus.service.method(CONDUIT_DBUS_IFACE, in_signature='', out_signature='') def Refresh(self): self._print("Refresh") self.conduit.refresh() @dbus.service.signal(CONDUIT_DBUS_IFACE, signature='') def SyncStarted(self): self._print("SyncStarted") @dbus.service.signal(CONDUIT_DBUS_IFACE, signature='bbb') def SyncCompleted(self, aborted, error, conflict): self._print("SyncCompleted (abort:%s error:%s conflict:%s)" % (aborted,error,conflict)) @dbus.service.signal(CONDUIT_DBUS_IFACE, signature='') def SyncConflict(self): self._print("SyncConflict") @dbus.service.signal(CONDUIT_DBUS_IFACE, signature='das') def SyncProgress(self, progress, UIDs): self._print("SyncProgress %s%%\n\t%s" % ((progress*100.0), UIDs)) # # org.conduit.Exporter # @dbus.service.method(EXPORTER_DBUS_IFACE, in_signature='s', out_signature='') def SinkSetConfigurationXml(self, xml): self._print("SinkSetConfigurationXml: %s" % xml) if len(self.conduit.datasinks) != 1: raise ConduitException("Simple exporter must only have one sink") self.conduit.datasinks[0].set_configuration_xml(xml) @dbus.service.method(EXPORTER_DBUS_IFACE, in_signature='', out_signature='') def SinkConfigure(self): self._print("SinkConfigure") if len(self.conduit.datasinks) != 1: raise ConduitException("Simple exporter must only have one sink") dataprovider = self.conduit.datasinks[0] #FIXME Hard-coded GtkUI from conduit.gtkui.WindowConfigurator import WindowConfigurator from conduit.gtkui.ConfigContainer import ConfigContainer configurator = WindowConfigurator(None) container = dataprovider.module.get_config_container( configContainerKlass=ConfigContainer, name=dataprovider.get_name(), icon=dataprovider.get_icon(), configurator=configurator ) configurator.set_containers([container]) configurator.run(container) @dbus.service.method(EXPORTER_DBUS_IFACE, in_signature='s', out_signature='b') def AddData(self, uri): self._print("AddData: %s" % uri) if self.conduit.datasource == None: raise ConduitException("Simple exporter must have a source") return self.conduit.datasource.module.add(uri) @dbus.service.method(EXPORTER_DBUS_IFACE, in_signature='', out_signature='a{ss}') def SinkGetInformation(self): self._print("SinkGetInformation") if len(self.conduit.datasinks) != 1: raise ConduitException("Simple exporter must only have one sink") #Need to call get_icon so that the icon_name/path is loaded try: self.conduit.datasinks[0].get_icon() except: log.warn("DBus could not lookup dp icon") info = {} info["name"] = self.conduit.datasinks[0].name info["description"] = self.conduit.datasinks[0].description info["module_type"] = self.conduit.datasinks[0].module_type info["category"] = self.conduit.datasinks[0].category.name info["in_type"] = self.conduit.datasinks[0].get_input_type() info["out_type"] = self.conduit.datasinks[0].get_output_type() info["classname"] = self.conduit.datasinks[0].classname info["key"] = self.conduit.datasinks[0].get_key() info["enabled"] = str( self.conduit.datasinks[0].enabled) info["UID"] = self.conduit.datasinks[0].get_UID() info["icon_name"] = self.conduit.datasinks[0].icon_name info["icon_path"] = self.conduit.datasinks[0].icon_path return info @dbus.service.method(EXPORTER_DBUS_IFACE, in_signature='', out_signature='s') def SinkGetConfigurationXml(self): self._print("SinkGetConfigurationXml") if len(self.conduit.datasinks) != 1: raise ConduitException("Simple exporter must only have one sink") return self.conduit.datasinks[0].get_configuration_xml() class DataProviderDBusItem(DBusItem): def __init__(self, dataprovider, uuid): DBusItem.__init__(self, iface=DATAPROVIDER_DBUS_IFACE, path="/dataprovider/%s" % uuid) self.dataprovider = dataprovider @dbus.service.method(DATAPROVIDER_DBUS_IFACE, in_signature='', out_signature='b') def IsPending(self): self._print("IsPending") return self.dataprovider.module == None @dbus.service.method(DATAPROVIDER_DBUS_IFACE, in_signature='bb', out_signature='b') def IsConfigured(self, isSource, isTwoWay): self._print("IsConfigured") if self.dataprovider.module != None: return self.dataprovider.module.is_configured(isSource, isTwoWay) return False @dbus.service.method(DATAPROVIDER_DBUS_IFACE, in_signature='', out_signature='a{ss}') def GetInformation(self): self._print("GetInformation") #Need to call get_icon so that the icon_name/path is loaded try: self.dataprovider.get_icon() except: log.warn("DBus could not lookup dp icon") info = {} info["name"] = self.dataprovider.name info["description"] = self.dataprovider.description info["module_type"] = self.dataprovider.module_type info["category"] = self.dataprovider.category.name info["in_type"] = self.dataprovider.get_input_type() info["out_type"] = self.dataprovider.get_output_type() info["classname"] = self.dataprovider.classname info["key"] = self.dataprovider.get_key() info["enabled"] = str(self.dataprovider.enabled) info["UID"] = self.dataprovider.get_UID() info["icon_name"] = self.dataprovider.icon_name info["icon_path"] = self.dataprovider.icon_path return info @dbus.service.method(DATAPROVIDER_DBUS_IFACE, in_signature='', out_signature='s') def GetConfigurationXml(self): self._print("GetConfigurationXml") return self.dataprovider.get_configuration_xml() @dbus.service.method(DATAPROVIDER_DBUS_IFACE, in_signature='s', out_signature='') def SetConfigurationXml(self, xml): self._print("SetConfigurationXml: %s" % xml) self.dataprovider.set_configuration_xml(xml) @dbus.service.method(DATAPROVIDER_DBUS_IFACE, in_signature='', out_signature='') def Configure(self): self._print("Configure") #FIXME Hard-coded GtkUI from conduit.gtkui.WindowConfigurator import WindowConfigurator from conduit.gtkui.ConfigContainer import ConfigContainer configurator = WindowConfigurator(None) container = self.dataprovider.module.get_config_container( configContainerKlass=ConfigContainer, name=self.dataprovider.get_name(), icon=self.dataprovider.get_icon(), configurator=configurator ) configurator.set_containers([container]) configurator.run(container) @dbus.service.method(DATAPROVIDER_DBUS_IFACE, in_signature='s', out_signature='b') def AddData(self, uri): self._print("AddData: %s" % uri) return self.dataprovider.module.add(uri) class SyncSetDBusItem(DBusItem): def __init__(self, syncSet, name): DBusItem.__init__(self, iface=SYNCSET_DBUS_IFACE, path="/syncset/%s" % name) self.syncSet = syncSet self.syncSet.connect("conduit-added", self._on_conduit_added) self.syncSet.connect("conduit-removed", self._on_conduit_removed) def _on_conduit_added(self, syncset, cond): self.ConduitAdded() def _on_conduit_removed(self, syncset, cond): self.ConduitRemoved() @dbus.service.signal(SYNCSET_DBUS_IFACE, signature='') def ConduitAdded(self): self._print("Emmiting DBus signal ConduitAdded") @dbus.service.signal(SYNCSET_DBUS_IFACE, signature='') def ConduitRemoved(self): self._print("Emmiting DBus signal ConduitRemoved") @dbus.service.method(SYNCSET_DBUS_IFACE, in_signature='o', out_signature='') def AddConduit(self, cond): self._print("AddConduit: %s" % cond) try: c = EXPORTED_OBJECTS[str(cond)].conduit except KeyError, e: raise ConduitException("Could not locate Conduit: %s" % e) self.syncSet.add_conduit(c) @dbus.service.method(SYNCSET_DBUS_IFACE, in_signature='o', out_signature='') def DeleteConduit(self, cond): self._print("DeleteConduit: %s" % cond) try: c = EXPORTED_OBJECTS[str(cond)].conduit except KeyError, e: raise ConduitException("Could not locate Conduit: %s" % e) self.syncSet.remove_conduit(c) @dbus.service.method(SYNCSET_DBUS_IFACE, in_signature='s', out_signature='') def SaveToXml(self, path): self._print("SaveToXml: %s" % path) self.syncSet.save_to_xml(os.path.abspath(path)) @dbus.service.method(SYNCSET_DBUS_IFACE, in_signature='s', out_signature='') def RestoreFromXml(self, path): self._print("RestoreFromXml: %s" % path) self.syncSet.restore_from_xml(os.path.abspath(path)) class DBusInterface(DBusItem): def __init__(self, conduitApplication, moduleManager, typeConverter, syncManager, guiSyncSet, dbusSyncSet): DBusItem.__init__(self, iface=APPLICATION_DBUS_IFACE, path="/") self.conduitApplication = conduitApplication #setup the module manager self.moduleManager = moduleManager self.moduleManager.connect("dataprovider-available", self._on_dataprovider_available) self.moduleManager.connect("dataprovider-unavailable", self._on_dataprovider_unavailable) #type converter and sync manager self.type_converter = typeConverter self.sync_manager = syncManager #export the syncsets if guiSyncSet != None: new = SyncSetDBusItem(guiSyncSet, "gui") EXPORTED_OBJECTS[new.get_path()] = new if dbusSyncSet != None: new = SyncSetDBusItem(dbusSyncSet, "dbus") EXPORTED_OBJECTS[new.get_path()] = new #export myself EXPORTED_OBJECTS[self.get_path()] = self def _get_all_dps(self): datasources = self.moduleManager.get_modules_by_type("source") datasinks = self.moduleManager.get_modules_by_type("sink") twoways = self.moduleManager.get_modules_by_type("twoway") return datasources + datasinks + twoways def _new_syncset(self): ss = SyncSet.SyncSet( moduleManager=self.moduleManager, syncManager=self.sync_manager ) i = Utils.uuid_string() new = SyncSetDBusItem(ss, i) EXPORTED_OBJECTS[new.get_path()] = new return new def _get_dataprovider(self, key): """ Instantiates a new dataprovider (source or sink), storing it appropriately. @param key: Key of the DP to create @returns: The new DP """ dpw = self.moduleManager.get_module_wrapper_with_instance(key) if dpw == None: raise ConduitException("Could not find dataprovider with key: %s" % key) i = Utils.uuid_string() new = DataProviderDBusItem(dpw, i) EXPORTED_OBJECTS[new.get_path()] = new return new def _get_conduit(self, source=None, sink=None, sender=None): """ Instantiates a new dataprovider (source or sink), storing it appropriately. @param key: Key of the DP to create @returns: The new DP """ if sender == None: raise ConduitException("Invalid DBus Caller") cond = Conduit.Conduit(self.sync_manager) if source != None: if not cond.add_dataprovider(dataprovider_wrapper=source, trySourceFirst=True): raise ConduitException("Error adding source to conduit") if sink != None: if not cond.add_dataprovider(dataprovider_wrapper=sink, trySourceFirst=False): raise ConduitException("Error adding source to conduit") i = Utils.uuid_string() new = ConduitDBusItem(self.sync_manager, cond, i) EXPORTED_OBJECTS[new.get_path()] = new return new def _on_dataprovider_available(self, loader, dataprovider): self.DataproviderAvailable(dataprovider.get_key()) def _on_dataprovider_unavailable(self, loader, dataprovider): self.DataproviderUnavailable(dataprovider.get_key()) @dbus.service.signal(APPLICATION_DBUS_IFACE, signature='s') def DataproviderAvailable(self, key): self._print("Emmiting DBus signal DataproviderAvailable %s" % key) @dbus.service.signal(APPLICATION_DBUS_IFACE, signature='s') def DataproviderUnavailable(self, key): self._print("Emiting DBus signal DataproviderUnavailable %s" % key) @dbus.service.method(APPLICATION_DBUS_IFACE, in_signature='', out_signature='o') def NewSyncSet(self): self._print("NewSyncSet") return self._new_syncset() @dbus.service.method(APPLICATION_DBUS_IFACE, in_signature='', out_signature='as') def GetAllDataProviders(self): self._print("GetAllDataProviders") return [i.get_key() for i in self._get_all_dps()] @dbus.service.method(APPLICATION_DBUS_IFACE, in_signature='s', out_signature='o') def GetDataProvider(self, key): self._print("GetDataProvider: %s" % key) return self._get_dataprovider(key) @dbus.service.method(APPLICATION_DBUS_IFACE, in_signature='oo', out_signature='o', sender_keyword='sender') def BuildConduit(self, source, sink, sender=None): self._print("BuildConduit (sender: %s:) %s --> %s" % (sender, source, sink)) #get the actual dps from their object paths try: source = EXPORTED_OBJECTS[str(source)].dataprovider sink = EXPORTED_OBJECTS[str(sink)].dataprovider except KeyError, e: raise ConduitException("Could not find dataprovider with key: %s" % e) return self._get_conduit(source, sink, sender) @dbus.service.method(APPLICATION_DBUS_IFACE, in_signature='s', out_signature='o', sender_keyword='sender') def BuildExporter(self, key, sender=None): self._print("BuildExporter (sender: %s:) --> %s" % (sender,key)) source = self._get_dataprovider("FileSource") sink = self._get_dataprovider(key) return self._get_conduit(source.dataprovider, sink.dataprovider, sender) @dbus.service.method(APPLICATION_DBUS_IFACE, in_signature='', out_signature='') def Quit(self): if self.conduitApplication != None: self.conduitApplication.Quit() conduit-0.3.17/conduit/platform/0000777000175000017500000000000011326117104013541 500000000000000conduit-0.3.17/conduit/platform/WebBrowserMozilla.py0000644000175000017500000001150411172176633017454 00000000000000import os.path import gtkmozembed import logging log = logging.getLogger("WebBrowser") import conduit.platform import conduit.utils.Singleton as Singleton class _MozConfig(Singleton.Singleton): """ A Singleton whose only responsibilty is to configure gtkmozembed to use the correct profile path. Gtkmozembed only allows its profile path to be set once """ DEFAULT_PROFILE = 'default' def __init__(self, **kwargs): self._profile = kwargs.get('profile', self.DEFAULT_PROFILE) self._profileDir = kwargs.get('profileDir', self._get_profile_subdir()) log.info("Configuring Mozilla profile dir") self._create_prefs_js() gtkmozembed.set_profile_path(self._profileDir, self._profile) def _get_profile_subdir(self): """ Some webbrowsers need a profile dir. Make it if it doesnt exist """ subdir = os.path.join(conduit.USER_DIR, 'mozilla') profdir = os.path.join(subdir, self._profile) if not os.access(profdir, os.F_OK): os.makedirs(profdir) return subdir def _create_prefs_js(self): """ Create the file prefs.js in the mozilla profile directory. This file does things like turn off the warning when navigating to https pages. """ prefsContent = """\ # Mozilla User Preferences user_pref("security.warn_entering_secure", false); user_pref("security.warn_entering_weak", false); user_pref("security.warn_viewing_mixed", false); user_pref("security.warn_leaving_secure", false); user_pref("security.warn_submit_insecure", false); user_pref("security.warn_entering_secure.show_once", false); user_pref("security.warn_entering_weak.show_once", false); user_pref("security.warn_viewing_mixed.show_once", false); user_pref("security.warn_leaving_secure.show_once", false); user_pref("security.warn_submit_insecure.show_once", false); user_pref("security.enable_java", false); user_pref("browser.xul.error_pages.enabled", false); user_pref("general.useragent.vendor", "%s"); user_pref("general.useragent.vendorSub", "%s"); user_pref("general.useragent.vendorComment", "%s"); """ % ("Conduit",conduit.VERSION,"http://www.conduit-project.org") if conduit.GLOBALS.settings.proxy_enabled(): log.info("Setting mozilla proxy details") host,port,user,password = conduit.GLOBALS.settings.get_proxy() prefsContent += """\ user_pref("network.proxy.type", 1); user_pref("network.proxy.http", "%s"); user_pref("network.proxy.http_port", %d); user_pref("network.proxy.ssl", "%s"); user_pref("network.proxy.ssl_port", %s); user_pref("network.proxy.share_proxy_settings", true); """ % (host,port,host,port) prefsPath = os.path.join(self._profileDir,self._profile,'prefs.js') f = open(prefsPath, "wt") f.write(prefsContent) f.close() class WebBrowserImpl(conduit.platform.WebBrowser): """ Wraps the GTK embeddable Mozilla in the WebBrowser interface """ def __init__(self, **kwargs): conduit.platform.WebBrowser.__init__(self) #lazy import and other hoops necessary because self._mozconfig = _MozConfig(**kwargs) self.url_load_request = False # flag to break load_url recursion self.location = "" self.moz = gtkmozembed.MozEmbed() self.moz.connect("link-message", self._signal_link_message) self.moz.connect("open-uri", self._signal_open_uri) self.moz.connect("location", self._signal_location) self.moz.connect("progress", self._signal_progress) self.moz.connect("net-start", self._signal_net_start) self.moz.connect("net-stop", self._signal_net_stop) def widget(self): return self.moz def load_url(self, str): self.url_load_request = True # don't handle open-uri signal self.moz.load_url(str) # emits open-uri signal self.url_load_request = False # handle open-uri again def stop_load(self): self.moz.stop_load() def _signal_link_message(self, object): self.emit("status_changed", self.moz.get_link_message()) def _signal_open_uri(self, object, uri): if self.url_load_request: return False # proceed as requested else: return self.emit("open_uri", uri) def _signal_location(self, object): self.location_changed(self.moz.get_location()) def location_changed(self, location): self.location = location self.emit("location_changed",self.location) def _signal_progress(self, object, cur, maxim): if maxim < 1: self.emit("loading_progress", -1.0) else: self.emit("loading_progress", (cur/maxim)) def _signal_net_start(self, object): self.emit("loading_started") def _signal_net_stop(self, object): self.emit("loading_finished") conduit-0.3.17/conduit/platform/Makefile.am0000644000175000017500000000041011321403566015511 00000000000000conduitdir = $(pythondir)/conduit/platform conduit_PYTHON = \ __init__.py \ FileGio.py \ FilePython.py \ SettingsGConf.py \ SettingsPython.py \ WebBrowserWebkit.py \ WebBrowserSystem.py \ WebBrowserMozilla.py clean-local: rm -rf *.pyc *.pyo conduit-0.3.17/conduit/platform/SettingsPython.py0000644000175000017500000000670311172176633017052 00000000000000import os import re import ConfigParser import conduit.platform import logging log = logging.getLogger("Settings") class SettingsImpl(conduit.platform.Settings): """ Settings implementation which stores settings in an ini style format using python config parser library """ VALID_KEY_TYPES = (bool, str, int, list, tuple) def __init__(self, defaults, changedCb): conduit.platform.Settings.__init__(self, defaults, changedCb) self._filePath = os.path.join(conduit.USER_DIR,"settings.ini") #convert defaults to strings strDefaults = {} for k,v in defaults.items(): strDefaults[k] = str(v) self._config = ConfigParser.ConfigParser(defaults=strDefaults) self._config.read(self._filePath) def get(self, key, default=None): #check if the setting has been overridden for this session if key in self._overrides: val = self._overrides[key] else: try: val = self._config.get('DEFAULT',key) except ConfigParser.NoOptionError: val = default #config parser saves everything to strings, so rely on the defaults #for the type information if key in self._defaults: vtype = type(self._defaults[key]) else: vtype = type(val) if val == None: log.warn("Unknown key: %s, must specify default value" % key) return None if vtype not in self.VALID_KEY_TYPES: log.warn("Invalid key type: %s" % vtype) return None #convert list/tuple to list of string values if vtype in (list, tuple): return eval(val) #cast simple types else: return vtype(val) def set(self, key, value): if key in self._overrides: return True if key in self._defaults: vtype = type(self._defaults[key]) else: vtype = type(value) if vtype not in self.VALID_KEY_TYPES: log.warn("Invalid key type: %s" % vtype) return False #Save every value as a string self._config.set('DEFAULT',key, str(value)) return True def proxy_enabled(self): """ @returns: True if the user has specified a http proxy via the http_proxy environment variable """ return os.environ.has_key("http_proxy") def get_proxy(self): """ Returns the details of the configured http proxy. The http_proxy environment variable overrides the GNOME setting @returns: host,port,user,password """ if self.proxy_enabled(): #env vars have preference if os.environ.has_key("http_proxy"): #re taken from python boto pattern = re.compile( '(?:http://)?' \ '(?:(?P\w+):(?P.*)@)?' \ '(?P[\w\-\.]+)' \ '(?::(?P\d+))?' ) match = pattern.match(os.environ['http_proxy']) if match: return (match.group('host'), int(match.group('port')), match.group('user'), match.group('pass')) return ("",0,"","") def save(self): fp = open(self._filePath, 'w') self._config.write(fp) fp.close() conduit-0.3.17/conduit/platform/SettingsGConf.py0000644000175000017500000001364311172176633016566 00000000000000import re import os try: import gconf except ImportError: from gnome import gconf import conduit.platform import logging log = logging.getLogger("Settings") class SettingsImpl(conduit.platform.Settings): """ Settings implementation which stores settings in GConf """ CONDUIT_GCONF_DIR = "/apps/conduit/" VALID_KEY_TYPES = (bool, str, int, list, tuple) def __init__(self, defaults, changedCb): conduit.platform.Settings.__init__(self, defaults, changedCb) self._client = gconf.client_get_default() self._client.add_dir(self.CONDUIT_GCONF_DIR[:-1], gconf.CLIENT_PRELOAD_RECURSIVE) self._notifications = [] def _fix_key(self, key): """ Appends the CONDUIT_GCONF_PREFIX to the key if needed @param key: The key to check @type key: C{string} @returns: The fixed key @rtype: C{string} """ if not key.startswith(self.CONDUIT_GCONF_DIR): return self.CONDUIT_GCONF_DIR + key else: return key def _key_changed(self, client, cnxn_id, entry, data=None): """ Callback when a gconf key changes """ key = self._fix_key(entry.key) self._changedCb(key) def get(self, key, default=None): """ Returns the value of the key or the default value if the key is not yet in gconf """ #check if the setting has been overridden for this session if key in self._overrides: try: #try and cast to correct type return type(self._defaults[key])(self._overrides[key]) except: return self._overrides[key] #function arguments override defaults if default == None: default = self._defaults.get(key, None) vtype = type(default) #we now have a valid key and type if default == None: log.warn("Unknown key: %s, must specify default value" % key) return None if vtype not in self.VALID_KEY_TYPES: log.warn("Invalid key type: %s" % vtype) return None #for gconf refer to the full key path key = self._fix_key(key) if key not in self._notifications: self._client.notify_add(key, self._key_changed) self._notifications.append(key) value = self._client.get(key) if not value: self.set(key, default) return default if vtype is bool: return value.get_bool() elif vtype is str: return value.get_string() elif vtype is int: return value.get_int() elif vtype in (list, tuple): l = [] for i in value.get_list(): l.append(i.get_string()) return l log.warn("Unknown gconf key: %s" % key) return None def set(self, key, value): """ Sets the key value in gconf and connects adds a signal which is fired if the key changes """ #overidden settings only apply for this session, and are #not set if key in self._overrides: return True log.debug("Settings %s -> %s" % (key, value)) if key in self._defaults: vtype = type(self._defaults[key]) else: vtype = type(value) if vtype not in self.VALID_KEY_TYPES: log.warn("Invalid key type: %s" % vtype) return False #for gconf refer to the full key path key = self._fix_key(key) if vtype is bool: self._client.set_bool(key, value) elif vtype is str: self._client.set_string(key, value) elif vtype is int: self._client.set_int(key, value) elif vtype in (list, tuple): #Save every value as a string strvalues = [str(i) for i in value] self._client.set_list(key, gconf.VALUE_STRING, strvalues) return True def proxy_enabled(self): """ @returns: True if the user has specified a http proxy via the http_proxy environment variable, or in gconf """ return os.environ.has_key("http_proxy") or \ self._client.get_bool("/system/http_proxy/use_http_proxy") def get_proxy(self): """ Returns the details of the configured http proxy. The http_proxy environment variable overrides the GNOME setting @returns: host,port,user,password """ if self.proxy_enabled(): #env vars have preference if os.environ.has_key("http_proxy"): #re taken from python boto pattern = re.compile( '(?:http://)?' \ '(?:(?P\w+):(?P.*)@)?' \ '(?P[\w\-\.]+)' \ '(?::(?P\d+))?' ) match = pattern.match(os.environ['http_proxy']) if match: return (match.group('host'), int(match.group('port')), match.group('user'), match.group('pass')) #now try gconf if self._client.get_bool("/system/http_proxy/use_authentication"): return (self._client.get_string("/system/http_proxy/host"), self._client.get_int("/system/http_proxy/port"), self._client.get_string("/system/http_proxy/authentication_user"), self._client.get_string("/system/http_proxy/authentication_password")) else: return (self._client.get_string("/system/http_proxy/host"), self._client.get_int("/system/http_proxy/port"), "", "") return ("",0,"","") conduit-0.3.17/conduit/platform/FilePython.py0000644000175000017500000000407511175026630016123 00000000000000import os.path import mimetypes import shutil import conduit.platform import logging log = logging.getLogger("platform.FilePython") class FileImpl(conduit.platform.File): SCHEMES = ("file://",) NAME = "Python" def __init__(self, URI): self._path = URI.split("file://")[-1] def get_text_uri(self): return self._path def get_local_path(self): return self._path def is_local(self): return True def is_directory(self): return os.path.isdir(self._path) def delete(self): os.unlink(self._path) def exists(self): os.path.exists(self._path) def set_mtime(self, timestamp=None, datetime=None): raise NotImplementedError def set_filename(self, filename): raise NotImplementedError def get_mtime(self): raise NotImplementedError def get_filename(self): return os.path.basename(self._path) def get_uri_for_display(self): return self.get_filename() def get_contents(self): f = open(self._path, 'r') data = f.read() f.close() return data def get_mimetype(self): mimetype, encoding = mimetypes.guess_type(self._path) return mimetype def get_size(self): return os.path.getsize(self._path) def set_props(self, **props): pass def close(self): pass def make_directory(self): raise NotImplementedError def make_directory_and_parents(self): raise NotImplementedError def is_on_removale_volume(self): return False def get_removable_volume_root_uri(self): return None def get_filesystem_type(self): return None class FileTransferImpl(conduit.platform.FileTransfer): pass class VolumeMonitor(conduit.platform.VolumeMonitor): pass class FileMonitor(conduit.platform.FileMonitor): pass class FolderScanner(conduit.platform.FolderScanner): def run(self): self.emit("scan-completed") conduit-0.3.17/conduit/platform/WebBrowserSystem.py0000644000175000017500000000177511172176633017342 00000000000000import time import webbrowser import logging log = logging.getLogger("WebBrowser") import conduit.platform class WebBrowserImpl(conduit.platform.WebBrowser): def __init__(self, **kwargs): conduit.platform.WebBrowser.__init__(self) def wait_for_login(self, name, url, **kwargs): self.testFunc = kwargs.get("login_function",None) self.timeout = kwargs.get("timeout",30) #use the system web browerser to open the url log.debug("System Login for %s" % name) webbrowser.open(url,new=1,autoraise=True) start_time = time.time() while not self._is_timed_out(start_time): time.sleep(kwargs.get("sleep_time",2)) try: if self.testFunc(): return except Exception, e: log.debug("Login function threw an error: %s" % e) raise Exception("Login timed out") def _is_timed_out(self, start): return int(time.time() - start) > self.timeout conduit-0.3.17/conduit/platform/FileGio.py0000644000175000017500000003022611321403566015355 00000000000000import gio import conduit.platform import os.path import logging log = logging.getLogger("platform.FileGio") class FileImpl(conduit.platform.File): SCHEMES = ("file://","http://","ftp://","smb://") NAME = "GIO" def __init__(self, URI, impl=None): if impl: self._file = impl else: self._file = gio.File(URI) self.close() def _get_file_info(self): if not self.triedOpen: try: #FIXME: Only get attributes we actually care about self.fileInfo = self._file.query_info("standard::*,time::*") #for ns in ("standard","time"): # log.info("%s Attributes: %s" % ( # ns.title(), # ','.join(self.fileInfo.list_attributes(ns))) # ) self.fileExists = True except gio.Error: self.fileExists = False self.triedOpen = True def get_text_uri(self): return self._file.get_uri() def get_local_path(self): return self._file.get_path() def is_local(self): return self._file.is_native() def is_directory(self): self._get_file_info() return self.fileInfo.get_file_type() == gio.FILE_TYPE_DIRECTORY def delete(self): try: #FIXME: Trash first? self._file.delete() self.close() except gio.Error, e: log.warn("File delete error: %s" % e) def exists(self): self._get_file_info() return self.fileExists def set_mtime(self, timestamp=None, datetime=None): try: if self._file.set_attribute_uint64("time::modified", long(timestamp)): self.close() return timestamp else: return None except gio.Error, e: return None def set_filename(self, filename): try: self._file = self._file.set_display_name(filename) self.close() return filename except gio.Error, e: return None def get_mtime(self): self._get_file_info() mtime = self.fileInfo.get_attribute_uint64('time::modified') if mtime: return mtime else: #convert 0L -> None return None def get_filename(self): self._get_file_info() return self.fileInfo.get_display_name() def get_uri_for_display(self): return self._file.get_parse_name() def get_contents(self): contents,length,etag = self._file.load_contents() return contents def set_contents(self, contents): self._file.replace_contents(contents) self.close() def get_mimetype(self): self._get_file_info() return self.fileInfo.get_attribute_string('standard::content-type') def get_size(self): self._get_file_info() return self.fileInfo.get_size() def close(self): self.fileInfo = None self.fileExists = False self.triedOpen = False def make_directory(self): try: result = self._file.make_directory() self.close() return result except gio.Error, e: return False def make_directory_and_parents(self): #recursively create all parent dirs if needed #port the code from gio into python until the following is fixed #http://bugzilla.gnome.org/show_bug.cgi?id=546575 dirs = [] try: result = self._file.make_directory() code = 0; except gio.Error, e: result = False code = e.code work_file = self._file while code == gio.ERROR_NOT_FOUND and not result: parent_file = work_file.get_parent() if not parent_file: break try: result = parent_file.make_directory() code = 0; except gio.Error, e: result = False code = e.code if code == gio.ERROR_NOT_FOUND and not result: dirs.append(parent_file) work_file = parent_file; #make all dirs in reverse order dirs.reverse() for d in dirs: try: result = d.make_directory() except gio.Error: result = False break #make the final dir if result: try: result = self._file.make_directory() except gio.Error: result = False self.close() return result def is_on_removale_volume(self): try: return self._file.find_enclosing_mount().can_unmount() except gio.Error: return False def get_removable_volume_root_uri(self): try: return self._file.find_enclosing_mount().get_root().get_uri() except gio.Error: return None def get_filesystem_type(self): try: info = self._file.query_filesystem_info("filesystem::type") return info.get_attribute_string("filesystem::type") except gio.Error, e: return None @staticmethod def uri_join(first, *rest): return os.path.join(first, *rest) @staticmethod def uri_get_relative(fromURI, toURI): f = gio.File(fromURI) t = gio.File(toURI) res = f.get_relative_path(t) #if not relative, return abs path if not res: res = toURI return res @staticmethod def uri_get_scheme(URI): f = gio.File(URI) return f.get_uri_scheme() class FileTransferImpl(conduit.platform.FileTransfer): def __init__(self, source, dest): self._source = source._file self._dest = gio.File(dest) self._cancel_func = lambda : False self._cancellable = gio.Cancellable() def _xfer_progress_callback(self, current, total): #check if cancelled try: if self._cancel_func(): log.info("Transfer of %s -> %s cancelled" % (self._source.get_uri(), self._dest.get_uri())) self._cancellable.cancel() except Exception: log.warn("Could not call transfer cancel function", exc_info=True) return True def set_destination_filename(self, name): #if it exists and its a directory then transfer into that dir #with the new filename try: info = self._dest.query_info("standard::name,standard::type") if info.get_file_type() == gio.FILE_TYPE_DIRECTORY: self._dest = self._dest.get_child(name) except gio.Error: #file does not exist pass def transfer(self, overwrite, cancel_func): if cancel_func: self._cancel_func = cancel_func if overwrite: mode = gio.FILE_COPY_OVERWRITE else: mode = gio.FILE_COPY_NONE log.debug("Transfering File %s -> %s (overwrite: %s)" % (self._source.get_uri(), self._dest.get_uri(), overwrite)) #recursively create all parent dirs if needed parent = self._dest.get_parent() try: parent.query_info("standard::name") except gio.Error, e: #does not exists d = FileImpl(None, impl=parent) d.make_directory_and_parents() #Copy the file try: ok = self._source.copy( destination=self._dest, flags=mode|gio.FILE_COPY_ALL_METADATA, cancellable=self._cancellable, progress_callback=self._xfer_progress_callback ) return ok, FileImpl(None, impl=self._dest) except gio.Error, e: log.warn("File transfer error: %s" % e) return False, None class VolumeMonitor(conduit.platform.VolumeMonitor): def __init__(self): conduit.platform.VolumeMonitor.__init__(self) self._vm = gio.volume_monitor_get() self._vm.connect("mount-added", self._mounted_cb) self._vm.connect("mount-removed", self._unmounted_cb) def _mounted_cb(self, sender, mount): self.emit("volume-mounted", mount.get_uuid(), mount.get_root().get_uri(), mount.get_name()) def _unmounted_cb(self, sender, mount): self.emit("volume-unmounted", mount.get_uuid()) def get_mounted_volumes(self): vols = {} for m in self._vm.get_mounts(): vols[m.get_uuid()] = (m.get_root().get_uri(), m.get_name()) return vols class FileMonitor(conduit.platform.FileMonitor): MONITOR_EVENT_CREATED = gio.FILE_MONITOR_EVENT_CREATED MONITOR_EVENT_CHANGED = gio.FILE_MONITOR_EVENT_CHANGED MONITOR_EVENT_DELETED = gio.FILE_MONITOR_EVENT_DELETED MONITOR_DIRECTORY = 255 def __init__(self): conduit.platform.FileMonitor.__init__(self) self._fm = None def _on_change(self, monitor, f1, f2, event): self.emit("changed", f1.get_uri(), event) def add(self, URI, monitorType): try: if monitorType == self.MONITOR_DIRECTORY: self._fm = gio.File(URI).monitor_directory() else: self._fm = gio.File(URI).monitor_file() self._fm.connect("changed", self._on_change) except gio.Error: log.warn("Could not add monitor", exc_info=True) def cancel(self): if self._fm: try: self._fm.disconnect_by_func(self._on_change) except TypeError: pass class FolderScanner(conduit.platform.FolderScanner): def run(self): delta = 0 t = 1 last_estimated = estimated = 0 while len(self.dirs)>0: if self.cancelled: return dir = self.dirs.pop(0) try: f = gio.File(dir) enumerator = f.enumerate_children('standard::type,standard::name,standard::is-hidden,standard::is-symlink') except gio.Error: log.warn("Folder %s Not found" % dir, exc_info=True) continue try: fileinfo = enumerator.next() except StopIteration: enumerator.close() continue while fileinfo: filename = fileinfo.get_name() filetype = fileinfo.get_file_type() hidden = fileinfo.get_is_hidden() if filename != self.CONFIG_FILE_NAME: if filetype == gio.FILE_TYPE_DIRECTORY: #Include hidden directories if not hidden or self.includeHidden: self.dirs.append(dir+"/"+filename) t += 1 elif filetype == gio.FILE_TYPE_REGULAR or (filetype == gio.FILE_TYPE_SYMBOLIC_LINK and self.followSymlinks): uri = dir+"/"+filename #Include hidden files if not hidden or self.includeHidden: self.URIs.append(uri) else: log.debug("Unsupported file type: %s (%s)" % (filename, filetype)) try: fileinfo = enumerator.next() except StopIteration: enumerator.close() break #Calculate the estimated complete percentags estimated = 1.0-float(len(self.dirs))/float(t) estimated *= 100 #Enly emit progress signals every 10% (+/- 1%) change to save CPU if delta+10 - estimated <= 1: log.debug("Folder scan %s%% complete" % estimated) self.emit("scan-progress", len(self.URIs)) delta += 10 last_estimated = estimated i = 0 total = len(self.URIs) log.debug("%s files loaded" % total) self.emit("scan-completed") conduit-0.3.17/conduit/platform/WebBrowserWebkit.py0000644000175000017500000000112211172176633017265 00000000000000import gtk import webkit import conduit.platform class WebBrowserImpl(conduit.platform.WebBrowser): def __init__(self): conduit.platform.WebBrowser.__init__(self) self.sw = gtk.ScrolledWindow() self.sw.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC) self.webView = webkit.WebView() self.webView.get_settings().props.enable_plugins = False self.sw.add(self.webView) def widget(self): return self.sw def load_url(self,url): self.webView.open(url) def stop_load(self): self.webView.stop_loading() conduit-0.3.17/conduit/platform/Makefile.in0000644000175000017500000003222411326116730015531 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit/platform DIST_COMMON = $(conduit_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduitdir)" py_compile = $(top_srcdir)/py-compile DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ conduitdir = $(pythondir)/conduit/platform conduit_PYTHON = \ __init__.py \ FileGio.py \ FilePython.py \ SettingsGConf.py \ SettingsPython.py \ WebBrowserWebkit.py \ WebBrowserSystem.py \ WebBrowserMozilla.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/platform/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/platform/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-conduitPYTHON: $(conduit_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduitdir)" || $(MKDIR_P) "$(DESTDIR)$(conduitdir)" @list='$(conduit_PYTHON)'; dlist=; list2=; test -n "$(conduitdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduitdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduitdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduitdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduitdir)" $$dlist; \ fi; \ else :; fi uninstall-conduitPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_PYTHON)'; test -n "$(conduitdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduitdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduitdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduitdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduitdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduitdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduitdir)" && rm -f $$fileso tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(conduitdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-conduitPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-conduitPYTHON .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-conduitPYTHON \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am uninstall-conduitPYTHON clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/platform/__init__.py0000644000175000017500000001473611175026630015606 00000000000000import threading import gobject class File: SCHEMES = () NAME = None def __init__(self, URI): pass def get_text_uri(self): raise NotImplementedError def get_local_path(self): raise NotImplementedError def is_local(self): raise NotImplementedError def is_directory(self): raise NotImplementedError def delete(self): raise NotImplementedError def exists(self): raise NotImplementedError def set_mtime(self, timestamp=None, datetime=None): raise NotImplementedError def set_filename(self, filename): raise NotImplementedError def get_mtime(self): raise NotImplementedError def get_filename(self): raise NotImplementedError def get_uri_for_display(self): raise NotImplementedError def get_contents(self): raise NotImplementedError def set_contents(self, contents): raise NotImplementedError def get_mimetype(self): raise NotImplementedError def get_size(self): raise NotImplementedError def set_props(self, **props): pass def close(self): raise NotImplementedError def make_directory(self): raise NotImplementedError def make_directory_and_parents(self): raise NotImplementedError def is_on_removale_volume(self): return False def get_removable_volume_root_uri(self): return None def get_filesystem_type(self): return None @staticmethod def uri_join(first, *rest): raise NotImplementedError @staticmethod def uri_get_relative(fromURI, toURI): raise NotImplementedError @staticmethod def uri_get_scheme(URI): raise NotImplementedError class FileTransfer: def __init__(self, source, dest): pass def set_destination_filename(self, name): raise NotImplementedError def transfer(self, cancel_func): raise NotImplementedError class VolumeMonitor(gobject.GObject): __gsignals__ = { "volume-mounted" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [ gobject.TYPE_STRING, #udi/uuid gobject.TYPE_STRING, #mount point gobject.TYPE_STRING]), #label "volume-unmounted" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [ gobject.TYPE_STRING]) #udi/uuid } def __init__(self): gobject.GObject.__init__(self) def get_mounted_volumes(self): """ @returs: Dict of mounted volumes, uuid : (mount, name) """ return {} class FileMonitor(gobject.GObject): __gsignals__ = { "changed" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [ gobject.TYPE_PYOBJECT, #uri that changed gobject.TYPE_PYOBJECT]) #event type } MONITOR_EVENT_CREATED = 1 MONITOR_EVENT_CHANGED = 2 MONITOR_EVENT_DELETED = 3 MONITOR_DIRECTORY = 4 def __init__(self): gobject.GObject.__init__(self) def add(self, folder, monitorType): pass def cancel(self): pass class FolderScanner(threading.Thread, gobject.GObject): """ Recursively scans a given folder URI, returning the number of contained files. """ __gsignals__ = { "scan-progress": (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [ gobject.TYPE_INT]), "scan-completed": (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, []) } CONFIG_FILE_NAME = ".conduit.conf" def __init__(self, baseURI, includeHidden, followSymlinks): threading.Thread.__init__(self) gobject.GObject.__init__(self) self.baseURI = str(baseURI) self.includeHidden = includeHidden self.followSymlinks = followSymlinks self.dirs = [self.baseURI] self.cancelled = False self.URIs = [] self.setName("FolderScanner Thread: %s" % self.baseURI) def run(self): """ Recursively adds all files in dirs within the given list. Code adapted from Listen (c) 2006 Mehdi Abaakouk (http://listengnome.free.fr/) """ raise NotImplementedError def cancel(self): """ Cancels the thread as soon as possible. """ self.cancelled = True def get_uris(self): return self.URIs class Settings: def __init__(self, defaults, changedCb): self._defaults = defaults self._changedCb = changedCb self._overrides = {} def get(self, key, **kwargs): return None def set(self, key, val, **kwargs): return False def set_overrides(self, **overrides): self._overrides = overrides def proxy_enabled(self): return False def get_proxy(self): return ("",0,"","") def save(self): pass class WebBrowser(gobject.GObject): """ Basic webbrowser abstraction to provide an upgrade path to webkit from gtkmozembed """ __gsignals__ = { "location_changed" : ( gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [ gobject.TYPE_STRING]), # The new location "loading_started" : ( gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, []), "loading_finished" : ( gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, []), "loading_progress" : ( gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [ gobject.TYPE_FLOAT]), # -1 (unknown), 0 -> 1 (finished) "status_changed" : ( gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [ gobject.TYPE_STRING]), # The status "open_uri": ( gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [ gobject.TYPE_STRING]) # URI } def __init__(self, emitOnIdle=False): gobject.GObject.__init__(self) self.emitOnIdle = emitOnIdle def emit(self, *args): """ Override the gobject signal emission so that signals can be emitted from the main loop on an idle handler """ if self.emitOnIdle == True: gobject.idle_add(gobject.GObject.emit,self,*args) else: gobject.GObject.emit(self,*args) def load_url(self, url): raise NotImplementedError def stop_load(self): raise NotImplementedError conduit-0.3.17/conduit/Main.py0000644000175000017500000003154011321403566013077 00000000000000import os import optparse import sys import dbus, dbus.service, dbus.mainloop.glib import gobject import logging from gettext import gettext as _ dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) dbus.mainloop.glib.threads_init() import conduit import conduit.utils as Utils import conduit.Logging as Logging from conduit.Module import ModuleManager from conduit.MappingDB import MappingDB from conduit.TypeConverter import TypeConverter from conduit.SyncSet import SyncSet from conduit.Synchronization import SyncManager from conduit.DBus import DBusInterface from conduit.Settings import Settings log = logging.getLogger("Main") APPLICATION_DBUS_IFACE="org.conduit.Application" class Application(dbus.service.Object): def __init__(self): """ Conduit application class Parses command line arguments. Sets up the views and models; restores application settings, shows the splash screen and the UI Notes: 1) If conduit is launched without --console switch then the gui and the console interfaces are started 2) If launched with --console and then later via the gui then set up the gui and connect all the appropriate signal handlers """ self.splash = None self.gui = None self.statusIcon = None self.dbus = None self.guiSyncSet = None self.dbusSyncSet = None self.uiLib = None gobject.set_application_name("Conduit") self.settingsFile = os.path.join(conduit.USER_DIR, "settings.xml") self.dbFile = os.path.join(conduit.USER_DIR, "mapping.db") #initialize application settings conduit.GLOBALS.settings = Settings() #command line parsing parser = optparse.OptionParser( prog="conduit", version="%%prog %s" % conduit.VERSION, description=_("Conduit is a synchronization application.")) parser.add_option( "-c", "--console", dest="build_gui", action="store_false", default=True, help=_("Launch without GUI. [default: %default]")) parser.add_option( "-f", "--config-file", metavar="FILE", default=self.settingsFile, help=_("Save dataprovider configuration to FILE. [default: %default]")) parser.add_option( "-i", "--iconify", action="store_true", default=False, help=_("Iconify on startup. [default: %default]")) parser.add_option( "-u", "--ui", metavar="NAME", default="gtk", help=_("Run with the specified UI. [default: %default]")) parser.add_option( "-w", "--with-modules", metavar="mod1,mod2", help=_("Only load modules in the named files. [default: load all modules]")) parser.add_option( "-x", "--without-modules", metavar="mod1,mod2", help=_("Do not load modules in the named files. [default: load all modules]")) parser.add_option( "-e", "--settings", metavar="key=val,key=val", help=_("Explicitly set internal Conduit settings (keys) to the given values for this session. [default: do not set]")) parser.add_option( "-U", "--enable-unsupported", action="store_true", default=False, help=_("Enable loading of unfinished or unsupported dataproviders. [default: %default]")) parser.add_option( "-d", "--debug", action="store_true", default=False, help=_("Generate more debugging information. [default: %default]")) parser.add_option( "-q", "--quiet", action="store_true", default=False, help=_("Generate less debugging information. [default: %default]")) parser.add_option( "-s", "--silent", action="store_true", default=False, help=_("Generate no debugging information. [default: %default]")) options, args = parser.parse_args() whitelist = None blacklist = None settings = {} if options.settings: for i in options.settings.split(','): k,v = i.split('=') settings[k] = v if options.with_modules: whitelist = options.with_modules.split(",") if options.without_modules: blacklist = options.without_modules.split(",") self.ui = options.ui self.settingsFile = os.path.abspath(options.config_file) if options.debug or not conduit.IS_INSTALLED: Logging.enable_debugging() if options.quiet: Logging.disable_debugging() if options.silent: Logging.disable_logging() log.info("Conduit v%s Installed: %s" % (conduit.VERSION, conduit.IS_INSTALLED)) log.info("Python: %s" % sys.version) log.info("Platform Implementations: %s,%s,%s" % (conduit.FILE_IMPL,conduit.BROWSER_IMPL, conduit.SETTINGS_IMPL)) if settings: log.info("Settings have been overridden: %s" % settings) #Make conduit single instance. If conduit is already running then #make the original process build or show the gui sessionBus = dbus.SessionBus() if Utils.dbus_service_available(APPLICATION_DBUS_IFACE, sessionBus): log.info("Conduit is already running") obj = sessionBus.get_object(APPLICATION_DBUS_IFACE, "/activate") conduitApp = dbus.Interface(obj, APPLICATION_DBUS_IFACE) if options.build_gui: if conduitApp.HasGUI(): conduitApp.ShowGUI() else: conduitApp.ImportGUI() conduitApp.ShowSplash() conduitApp.ShowStatusIcon() conduitApp.BuildGUI() conduitApp.ShowGUI() conduitApp.HideSplash() sys.exit(0) # Initialise dbus stuff here as any earlier will interfere # with Conduit already running check. bus_name = dbus.service.BusName(APPLICATION_DBUS_IFACE, bus=sessionBus) dbus.service.Object.__init__(self, bus_name, "/activate") #Throw up a splash screen ASAP. Dont show anything if launched via --console. if options.build_gui: log.info("Using UI: %s" % self.ui) self.ImportGUI() if not options.iconify: self.ShowSplash() self.ShowStatusIcon() #Dynamically load all datasources, datasinks and converters dirs_to_search = [ conduit.SHARED_MODULE_DIR, os.path.join(conduit.USER_DIR, "modules") ] if options.enable_unsupported: dirs_to_search.append(os.path.join(conduit.SHARED_MODULE_DIR, "UNSUPPORTED")) #Initialize all globals variables conduit.GLOBALS.app = self conduit.GLOBALS.moduleManager = ModuleManager(dirs_to_search) conduit.GLOBALS.moduleManager.load_all(whitelist, blacklist) conduit.GLOBALS.typeConverter = TypeConverter(conduit.GLOBALS.moduleManager) conduit.GLOBALS.syncManager = SyncManager(conduit.GLOBALS.typeConverter) conduit.GLOBALS.mappingDB = MappingDB(self.dbFile) conduit.GLOBALS.mainloop = gobject.MainLoop() #Build both syncsets and put on the bus as early as possible self.guiSyncSet = SyncSet( moduleManager=conduit.GLOBALS.moduleManager, syncManager=conduit.GLOBALS.syncManager, xmlSettingFilePath=self.settingsFile ) self.dbusSyncSet = SyncSet( moduleManager=conduit.GLOBALS.moduleManager, syncManager=conduit.GLOBALS.syncManager ) #Set the view models if options.build_gui: self.BuildGUI() if not options.iconify: self.ShowGUI() #Dbus view... self.dbus = DBusInterface( conduitApplication=self, moduleManager=conduit.GLOBALS.moduleManager, typeConverter=conduit.GLOBALS.typeConverter, syncManager=conduit.GLOBALS.syncManager, guiSyncSet=self.guiSyncSet, dbusSyncSet=self.dbusSyncSet ) if self.statusIcon: self.dbusSyncSet.connect("conduit-added", self.statusIcon.on_conduit_added) self.dbusSyncSet.connect("conduit-removed", self.statusIcon.on_conduit_removed) #hide the splash screen self.HideSplash() try: conduit.GLOBALS.mainloop.run() except KeyboardInterrupt: self.Quit() @dbus.service.method(APPLICATION_DBUS_IFACE, in_signature='', out_signature='b') def HasGUI(self): return self.gui != None @dbus.service.method(APPLICATION_DBUS_IFACE, in_signature='', out_signature='') def BuildGUI(self): self.gui = self.uiLib.MainWindow( conduitApplication=self, moduleManager=conduit.GLOBALS.moduleManager, typeConverter=conduit.GLOBALS.typeConverter, syncManager=conduit.GLOBALS.syncManager ) #reload the saved sync set self.guiSyncSet.restore_from_xml() self.gui.set_model(self.guiSyncSet) if self.statusIcon: self.guiSyncSet.connect("conduit-added", self.statusIcon.on_conduit_added) self.guiSyncSet.connect("conduit-removed", self.statusIcon.on_conduit_removed) @dbus.service.method(APPLICATION_DBUS_IFACE, in_signature='', out_signature='') def ImportGUI(self): if self.uiLib == None: self.uiLib = __import__("conduit.%sui.UI" % self.ui, {}, {}, ['UI']) @dbus.service.method(APPLICATION_DBUS_IFACE, in_signature='', out_signature='') def ShowGUI(self): self.gui.present() @dbus.service.method(APPLICATION_DBUS_IFACE, in_signature='', out_signature='') def ShowStatusIcon(self): #The status icon is shared between the GUI and the Dbus iface if conduit.GLOBALS.settings.get("show_status_icon") == True: self.statusIcon = self.uiLib.StatusIcon(self) @dbus.service.method(APPLICATION_DBUS_IFACE, in_signature='', out_signature='') def ShowSplash(self): if conduit.GLOBALS.settings.get("show_splashscreen") == True: self.splash = self.uiLib.SplashScreen() self.splash.show() @dbus.service.method(APPLICATION_DBUS_IFACE, in_signature='', out_signature='') def HideSplash(self): if self.splash != None: self.splash.destroy() @dbus.service.method(APPLICATION_DBUS_IFACE, in_signature='', out_signature='') def IconifyGUI(self): self.gui.minimize_to_tray() @dbus.service.method(APPLICATION_DBUS_IFACE, in_signature='', out_signature='') def Quit(self): #Hide the GUI first, so we feel responsive log.info("Closing application") if self.gui != None: self.gui.mainWindow.hide() if conduit.GLOBALS.settings.get("save_on_exit") == True: self.gui.save_settings(None) #Cancel all syncs self.Cancel() #give the dataprovider factories time to shut down log.info("Closing dataprovider factories") conduit.GLOBALS.moduleManager.quit() #unitialize all dataproviders log.info("Unitializing dataproviders") self.guiSyncSet.quit() log.info("GUI Quit") self.dbusSyncSet.quit() log.info("DBus Quit") #Save the mapping DB conduit.GLOBALS.mappingDB.save() conduit.GLOBALS.mappingDB.close() #Save the application settings conduit.GLOBALS.settings.save() log.info("Main Loop Quitting") conduit.GLOBALS.mainloop.quit() @dbus.service.method(APPLICATION_DBUS_IFACE, in_signature='', out_signature='') def Synchronize(self): for cond in self.guiSyncSet.get_all_conduits(): if cond.datasource is not None and len(cond.datasinks) > 0: conduit.GLOBALS.syncManager.sync_conduit(cond) else: log.info("Conduit must have a datasource and a datasink") @dbus.service.method(APPLICATION_DBUS_IFACE, in_signature='', out_signature='') def Cancel(self): #flag the global cancellation object log.info("Setting global cancel flag") conduit.GLOBALS.cancelled = True #cancel all conduits log.info("Stopping Synchronization threads") conduit.GLOBALS.syncManager.cancel_all() conduit-0.3.17/conduit/Makefile.in0000644000175000017500000005513411326116726013717 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = conduit DIST_COMMON = $(conduit_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/defs.py.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = defs.py CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(conduitbindir)" \ "$(DESTDIR)$(conduitdir)" SCRIPTS = $(conduitbin_SCRIPTS) SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive py_compile = $(top_srcdir)/py-compile RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = datatypes dataproviders modules gtkui hildonui utils platform conduitbindir = $(bindir) conduitbin_SCRIPTS = \ conduit.real \ conduit conduitdir = $(pythondir)/conduit conduit_PYTHON = \ Conduit.py \ Configurator.py \ Conflict.py \ Database.py \ DBus.py \ defs.py \ DeltaProvider.py \ Exceptions.py \ Globals.py \ __init__.py \ Knowledge.py \ Logging.py \ libconduit.py \ Main.py \ MappingDB.py \ Module.py \ ModuleWrapper.py \ Settings.py \ Synchronization.py \ SyncSet.py \ TypeConverter.py \ Vfs.py \ Web.py \ XMLSerialization.py CLEANFILES = \ defs.py \ $(BUILT_SOURCES) DISTCLEANFILES = \ $(CLEANFILES) EXTRA_DIST = \ defs.py.in \ conduit.real \ conduit all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conduit/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conduit/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): defs.py: $(top_builddir)/config.status $(srcdir)/defs.py.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-conduitbinSCRIPTS: $(conduitbin_SCRIPTS) @$(NORMAL_INSTALL) test -z "$(conduitbindir)" || $(MKDIR_P) "$(DESTDIR)$(conduitbindir)" @list='$(conduitbin_SCRIPTS)'; test -n "$(conduitbindir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(conduitbindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(conduitbindir)$$dir" || exit $$?; \ } \ ; done uninstall-conduitbinSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(conduitbin_SCRIPTS)'; test -n "$(conduitbindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(conduitbindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduitbindir)" && rm -f $$files install-conduitPYTHON: $(conduit_PYTHON) @$(NORMAL_INSTALL) test -z "$(conduitdir)" || $(MKDIR_P) "$(DESTDIR)$(conduitdir)" @list='$(conduit_PYTHON)'; dlist=; list2=; test -n "$(conduitdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(conduitdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(conduitdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(conduitdir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(conduitdir)" $$dlist; \ fi; \ else :; fi uninstall-conduitPYTHON: @$(NORMAL_UNINSTALL) @list='$(conduit_PYTHON)'; test -n "$(conduitdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(conduitdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(conduitdir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduitdir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(conduitdir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(conduitdir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(conduitdir)" && rm -f $$fileso # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(SCRIPTS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(conduitbindir)" "$(DESTDIR)$(conduitdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-conduitPYTHON install-conduitbinSCRIPTS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-conduitPYTHON uninstall-conduitbinSCRIPTS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-local \ ctags ctags-recursive distclean distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-conduitPYTHON \ install-conduitbinSCRIPTS install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-conduitPYTHON uninstall-conduitbinSCRIPTS clean-local: rm -rf *.pyc *.pyo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/conduit/Settings.py0000644000175000017500000001302211172176633014014 00000000000000""" Stores application settings Part of this code copied from Gimmie (c) Alex Gravely Copyright: John Stowers, 2006 License: GPLv2 """ import gobject import conduit #these dicts are used for mapping config setting types to type names #and back again (isnt python cool...) TYPE_TO_TYPE_NAME = { int : "int", bool : "bool", str : "string", list : "list" } STRING_TO_TYPE = { "int" : lambda x: int(x), "bool" : lambda x: string_to_bool(x), "string" : lambda x: str(x), "list" : lambda x: string_to_list(x) } TYPE_TO_STRING = { int : lambda x: str(x), bool : lambda x: str(x), str : lambda x: str(x), list : lambda x: list_to_string(x) } def string_to_bool(stringy): #Because bool("False") doesnt work as expected when restoring strings if stringy == "True": return True else: return False def list_to_string(listy): s = "" if type(listy) is list: s = ",".join(listy) #cool return s def string_to_list(string, listInternalVtype=str): l = string.split(",") internalTypeName = TYPE_TO_TYPE_NAME[listInternalVtype] for i in range(0, len(l)): l[i] = STRING_TO_TYPE[internalTypeName](l[i]) return l class Settings(gobject.GObject): """ Class for storing conduit.GLOBALS.settings. Keys of type str, bool, int, and list of strings supported at this stage. Also stores the special proxy settings. """ __gsignals__ = { 'changed' : (gobject.SIGNAL_RUN_LAST | gobject.SIGNAL_DETAILED, gobject.TYPE_NONE, ()), } #Default values for conduit settings DEFAULTS = { 'show_splashscreen' : False, #The splashscreen can be quite useful on slow computers 'show_dp_description' : False, #Should the treeview show the dataprovider description 'show_status_icon' : True, #Show an icon in the notification area indicating if a sync is running 'save_on_exit' : True, #Is the sync set saved on exit automatically? 'enable_network' : True, #Should conduit look for other conduits on the local network 'enable_removable_devices' : True, #Should conduit support iPods, USB keys, etc 'default_policy_conflict' : "ask", #Default conflict policy for new Conduits, ask,replace,skip 'default_policy_deleted' : "ask", #Default deleted policy for new Conduits, ask,replace,skip 'gui_expanded_rows' : [], #list of expanded column paths in the treeview 'gui_restore_expanded_rows' : True, #Shoud we expand columns at startup 'gui_hpane_postion' : 250, #The hpane seperating the canvas and treeview position 'gui_window_size' : [], #W,H 'gui_minimize_to_tray' : False, #Behaviour when one minimizes the main window, should it iconify? 'gui_initial_canvas_height' : 450, #Reduce to ~300 for eepc, etc 'gui_initial_canvas_width' : 450, #Reduce for eepc, etc 'gui_use_rgba_colormap' : False, #Seems to corrupt gtkmozembed on some systems 'gui_show_hints' : True, #Show message area hints in the Conduit GUI 'gui_show_treeview_lines' : False, #Show treeview lines } def __init__(self, **kwargs): gobject.GObject.__init__(self) #you can override the settings implementation at runtime #for testing purposes only implName = kwargs.get("implName", conduit.SETTINGS_IMPL) if implName == "GConf": import conduit.platform.SettingsGConf as SettingsImpl elif implName == "Python": import conduit.platform.SettingsPython as SettingsImpl else: raise Exception("Settings Implementation %s Not Supported" % implName) self._settings = SettingsImpl.SettingsImpl( defaults=self.DEFAULTS, changedCb=self._key_changed) def _key_changed(self, key): self.emit('changed::%s' % key) def set_overrides(self, **overrides): """ Sets values of settings that only exist for this setting, and are never saved, nor updated. """ self._settings.set_overrides(**overrides) def get(self, key, **kwargs): """ Returns the value of the key or the default value if the key is not yet stored """ return self._settings.get(key, **kwargs) def set(self, key, value, **kwargs): """ Sets the key to value. """ return self._settings.set(key, value, **kwargs) def proxy_enabled(self): """ @returns: True if the user has specified a http proxy via the http_proxy environment variable, or in the appropriate settings backend, such as gconf """ return self._settings.proxy_enabled() def get_proxy(self): """ Returns the details of the configured http proxy. The http_proxy environment variable overrides the GNOME setting @returns: host,port,user,password """ return self._settings.get_proxy() def save(self): """ Performs any necessary tasks to ensure settings are saved between sessions """ self._settings.save() conduit-0.3.17/conduit/Vfs.py0000644000175000017500000002143311321403566012751 00000000000000import os.path import logging import gobject import time log = logging.getLogger("Vfs") import urllib import conduit import conduit.utils.Singleton as Singleton if conduit.FILE_IMPL == "GIO": import conduit.platform.FileGio as FileImpl elif conduit.FILE_IMPL == "Python": import conduit.platform.FilePython as FileImpl else: raise Exception("File Implementation %s Not Supported" % conduit.FILE_IMPL) VolumeMonitor = FileImpl.VolumeMonitor FileMonitor = FileImpl.FileMonitor FolderScanner = FileImpl.FolderScanner FileTransfer = FileImpl.FileTransferImpl def backend_supports_remote_uri_schemes(): """ @returns: True if the file implementation supports non-local (file://) uri schemes """ return len(FileImpl.FileImpl.SCHEMES) > 1 and "file://" in FileImpl.FileImpl.SCHEMES def backend_name(): """ @returns: The name of the selected file impl backend """ return FileImpl.FileImpl.NAME def uri_is_valid(uri): """ Checks if the uri is valid (i.e. not a local path), and its type is supported by the underlying file implementation """ return uri[0] != "/" and uri.split("://")[0]+"://" in FileImpl.FileImpl.SCHEMES def uri_join(first, *rest): """ Joins multiple uri components. Performs safely if the first argument contains a uri scheme """ return FileImpl.FileImpl.uri_join(first,*rest) def uri_get_scheme(uri): """ @returns: The scheme (file,smb,ftp) for the uri, or None on error """ return FileImpl.FileImpl.uri_get_scheme(uri) def uri_get_relative(fromURI, toURI): """ Returns the relative path fromURI --> toURI """ return FileImpl.FileImpl.uri_get_relative(fromURI, toURI) def uri_open(uri): """ Opens a xdg compatible uri. """ uri = conduit.utils.ensure_string(uri) APP = "xdg-open" os.spawnlp(os.P_NOWAIT, APP, APP, uri) def uri_to_local_path(uri): """ @returns: The local path (/foo/bar) for the given URI """ uri = conduit.utils.ensure_string(uri) scheme = uri_get_scheme(uri) if scheme == "file": #len("file://") = 7 return uri[7:] else: return None def uri_get_volume_root_uri(uri): """ @returns: The root path of the volume at the given uri, or None """ f = FileImpl.FileImpl(uri) return f.get_removable_volume_root_uri() def uri_is_on_removable_volume(uri): """ @returns: True if the specified uri is on a removable volume, like a USB key or removable/mountable disk. """ f = FileImpl.FileImpl(uri) return f.is_on_removale_volume() def uri_get_filesystem_type(uri): """ @returns: The filesystem that uri is stored on or None if it cannot be determined """ f = FileImpl.FileImpl(uri) return f.get_filesystem_type() def uri_escape(uri): """ Escapes a uri, replacing only special characters that would not be found in paths or host names. (so '/', '&', '=', ':' and '@' will not be escaped by this function) """ import urllib uri = conduit.utils.ensure_string(uri) return urllib.quote(uri,safe='/&=:@') def uri_unescape(uri): """ Replace "%xx" escapes by their single-character equivalent. """ import urllib uri = conduit.utils.ensure_string(uri) return urllib.unquote(uri) def uri_get_protocol(uri): """ Returns the protocol (file, smb, etc) for a URI """ uri = conduit.utils.ensure_string(uri) if uri.rfind("://")==-1: return "" protocol = uri[:uri.index("://")+3] return protocol.lower() def uri_get_filename(uri): """ Method to return the filename of a file. """ uri = conduit.utils.ensure_string(uri) return uri.split(os.sep)[-1] def uri_get_filename_and_extension(uri): """ Returns filename,file_extension """ uri = conduit.utils.ensure_string(uri) return os.path.splitext(uri_get_filename(uri)) def uri_sanitize_for_filesystem(uri, filesystem=None): """ Removes illegal characters in uri that cannot be stored on the given filesystem - particuarly fat and ntfs types Also see: http://bugzilla.gnome.org/show_bug.cgi?id=309584#c20 """ uri = conduit.utils.ensure_string(uri) import string ILLEGAL_CHARS = { "fat" : "\\:*?\"<>|", "vfat" : "\\:*?\"<>|", "msdos" : "\\:*?\"<>|", "msdosfs" : "\\:*?\"<>|", "ntfs" : "\\:*?\"<>|" } illegal = ILLEGAL_CHARS.get(filesystem,None) if illegal: #call urllib.unescape otherwise for example ? is rapresented as %3F uri = urllib.unquote(uri) #dont escape the scheme part idx = uri.rfind("://") if idx == -1: start = 0 else: start = idx + 3 #replace illegal chars with a -, ignoring the scheme (don't use a space because you can't create a directory with just a space) ret = uri[0:start]+uri[start:].translate(string.maketrans( illegal, "_"*len(illegal) ) ) ret = uri[0:start]+urllib.quote (ret[start:]) return ret return uri def uri_is_folder(uri): """ @returns: True if the uri is a folder and not a file """ f = FileImpl.FileImpl(uri) return f.is_directory() def uri_format_for_display(uri): """ Formats the uri so it can be displayed to the user (strips passwords, etc) """ f = FileImpl.FileImpl(uri) return f.get_uri_for_display() def uri_exists(uri): """ @returns: True if the uri exists """ f = FileImpl.FileImpl(uri) return f.exists() class FolderScannerThreadManager: """ Manages many FolderScanner threads. This involves joining and cancelling said threads, and respecting a maximum num of concurrent threads limit """ def __init__(self, maxConcurrentThreads=2): self.maxConcurrentThreads = maxConcurrentThreads self.scanThreads = {} self.pendingScanThreadsURIs = [] def make_thread(self, folderURI, includeHidden, followSymlinks, progressCb, completedCb, *args): """ Makes a thread for scanning folderURI. The thread callsback the model at regular intervals with the supplied args """ running = len(self.scanThreads) - len(self.pendingScanThreadsURIs) if folderURI not in self.scanThreads: thread = FolderScanner(folderURI, includeHidden, followSymlinks) thread.connect("scan-progress", progressCb, *args) thread.connect("scan-completed", completedCb, *args) thread.connect("scan-completed", self._register_thread_completed, folderURI) self.scanThreads[folderURI] = thread if running < self.maxConcurrentThreads: log.debug("Starting thread %s" % folderURI) self.scanThreads[folderURI].start() else: self.pendingScanThreadsURIs.append(folderURI) return thread else: return self.scanThreads[folderURI] def _register_thread_completed(self, sender, folderURI): """ Decrements the count of concurrent threads and starts any pending threads if there is space """ #delete the old thread del(self.scanThreads[folderURI]) running = len(self.scanThreads) - len(self.pendingScanThreadsURIs) log.debug("Thread %s completed. %s running, %s pending" % (folderURI, running, len(self.pendingScanThreadsURIs))) if running < self.maxConcurrentThreads: try: uri = self.pendingScanThreadsURIs.pop() log.debug("Starting pending thread %s" % uri) self.scanThreads[uri].start() except IndexError: pass def join_all_threads(self): """ Joins all threads (blocks) Unfortunately we join all the threads do it in a loop to account for join() a non started thread failing. To compensate I time.sleep() to not smoke CPU """ joinedThreads = 0 while(joinedThreads < len(self.scanThreads)): for thread in self.scanThreads.values(): try: thread.join() joinedThreads += 1 except (RuntimeError, AssertionError): #deal with not started threads time.sleep(0.1) def cancel_all_threads(self): """ Cancels all threads ASAP. My block for a small period of time because we use our own cancel method """ for thread in self.scanThreads.values(): if thread.isAlive(): log.debug("Cancelling thread %s" % thread) thread.cancel() thread.join() #May block conduit-0.3.17/conduit/Conflict.py0000644000175000017500000000777211172176633013774 00000000000000""" Holds classes used for resolving conflicts. Copyright: John Stowers, 2006 License: GPLv2 """ import logging log = logging.getLogger("Conflict") import conduit #ENUM of directions when resolving a conflict CONFLICT_ASK = 0 CONFLICT_SKIP = 1 CONFLICT_COPY_SOURCE_TO_SINK = 2 CONFLICT_COPY_SINK_TO_SOURCE = 3 CONFLICT_DELETE = 4 class Conflict: """ Represents a conflict """ def __init__(self, cond, sourceWrapper, sourceData, sourceDataRid, sinkWrapper, sinkData, sinkDataRid, validResolveChoices, isDeletion): self.cond = cond self.sourceWrapper = sourceWrapper self.sourceData = sourceData self.sourceDataRid = sourceDataRid self.sinkWrapper = sinkWrapper self.sinkData = sinkData self.sinkDataRid = sinkDataRid self.choices = validResolveChoices self.isDeletion = isDeletion self._gen_hash() def _gen_hash(self): if self.sourceWrapper and self.sourceDataRid and self.sinkWrapper: mapping = conduit.GLOBALS.mappingDB.get_mapping( sourceUID=self.sourceWrapper.get_UID(), dataLUID=self.sourceDataRid.get_UID(), sinkUID=self.sinkWrapper.get_UID()) if mapping.oid: self._hash = hash(mapping.oid) return #approximate a stable hash for the relationship that is invariant #based upon the order of source and sink uids = [hash(self.sourceWrapper.get_UID()), hash(self.sinkWrapper.get_UID()), hash(self.sourceDataRid), hash(self.sinkDataRid)] uids.sort() self._hash = hash(tuple(uids)) def __hash__(self): return self._hash def get_partnership(self): return self.sourceWrapper,self.sinkWrapper def get_snippet(self, is_source): if is_source: return self.sourceData.get_snippet() else: return self.sinkData.get_snippet() def get_icon(self, is_source): return None def resolve(self, direction): resolve = True delete = False if direction == CONFLICT_ASK: log.debug("Not resolving") resolve = False elif direction == CONFLICT_SKIP: log.debug("Skipping conflict") resolve = False elif direction == CONFLICT_COPY_SOURCE_TO_SINK: log.debug("Resolving source data --> sink") data = self.sourceData dataRid = self.sourceDataRid source = self.sourceWrapper sourceDataType = self.sourceData.get_type() sink = self.sinkWrapper sinkDataType = self.sinkWrapper.get_input_type() elif direction == CONFLICT_COPY_SINK_TO_SOURCE: log.debug("Resolving source <-- sink data") data = self.sinkData dataRid = self.sinkDataRid source = self.sinkWrapper sourceDataType = self.sinkData.get_type() sink = self.sourceWrapper sinkDataType = self.sourceWrapper.get_input_type() elif direction == CONFLICT_DELETE: log.debug("Resolving deletion --->") data = self.sinkData dataRid = self.sinkDataRid source = self.sourceWrapper sink = self.sinkWrapper delete = True else: log.warn("Unknown resolution") resolve = False if resolve: if delete: log.debug("Resolving self. Deleting %s from %s" % (data, sink)) conduit.Synchronization.delete_data(source, sink, data.get_UID()) else: log.debug("Resolving self. Putting %s --> %s" % (data, sink)) newdata = conduit.GLOBALS.typeConverter.convert( sourceDataType, sinkDataType, data ) conduit.Synchronization.put_data(source, sink, newdata, dataRid, True) self.cond.resolved_conflict(self) return resolve conduit-0.3.17/conduit/__init__.py0000644000175000017500000000455411321403566013757 00000000000000""" Introduction ============ Conduit is a synchronization solution for GNOME which allows the user to take their emails, files, bookmarks, and any other type of personal information and synchronize that data with another computer, an online service, or even another electronic device. Conduit manages the synchronization and conversion of data into other formats. For example, conduit allows you to; 1. Synchronize your tomboy notes to a file on a remote computer 2. Synchronize your emails to your mobile phone 3. Synchronize your bookmarks to delicious, gmail, or even your own webserver 4. and many more... Any combination you can imagine, Conduit will take care of the conversion and synchronization. Copyright: John Stowers, 2006 License: GPLv2 """ import os import gobject import sys gobject.threads_init() ################################################################################ # Global Constants ################################################################################ DIRECTORY = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) IS_INSTALLED = not os.path.exists(os.path.join(DIRECTORY,"ChangeLog")) IS_DEVELOPMENT_VERSION = True #test the existance of some compulsory directories CONFIG_DIR = os.environ.get("XDG_CONFIG_HOME", os.path.join(os.environ['HOME'], ".config")) AUTOSTART_FILE_DIR = os.path.join(CONFIG_DIR, "autostart") USER_DIR = os.path.join(CONFIG_DIR, "conduit") for d in (AUTOSTART_FILE_DIR, USER_DIR): if not os.path.exists(d): os.makedirs(d) if IS_INSTALLED: from defs import * if not PYTHONDIR in sys.path: sys.path.insert(0, PYTHONDIR) else: VERSION = "0.3.17" LOCALE_DIR = os.path.join(DIRECTORY, "po") SHARED_DATA_DIR = os.path.join(DIRECTORY, "data") SHARED_MODULE_DIR = os.path.join(DIRECTORY, "conduit", "modules") DESKTOP_FILE_DIR = os.path.join(DIRECTORY, "data") #{GIO, Python} FILE_IMPL = os.environ.get("CONDUIT_FILE_IMPL","GIO") #{gtkmozembed, webkit, system} BROWSER_IMPL = os.environ.get("CONDUIT_BROWSER_IMPL","webkit") #{GConf,Python} SETTINGS_IMPL = os.environ.get("CONDUIT_SETTINGS_IMPL","GConf") import Globals GLOBALS = Globals.Globals() conduit-0.3.17/conduit/Logging.py0000644000175000017500000000477011172176633013614 00000000000000import os import logging import conduit #The terminal has 8 colors with codes from 0 to 7 BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8) #These are the sequences need to get colored ouput RESET_SEQ = "\033[0m" COLOR_SEQ = "\033[1;%dm" BOLD_SEQ = "\033[1m" #The background is set with 40 plus the number of the color, #and the foreground with 30 COLORS = { 'WARNING': COLOR_SEQ % (30 + YELLOW) + 'WARNING' + RESET_SEQ, 'INFO': COLOR_SEQ % (30 + WHITE) + 'INFO' + RESET_SEQ, 'DEBUG': COLOR_SEQ % (30 + BLUE) + 'DEBUG' + RESET_SEQ, 'CRITICAL': COLOR_SEQ % (30 + YELLOW) + 'CRITICAL' + RESET_SEQ, 'ERROR': COLOR_SEQ % (30 + RED) + 'ERROR' + RESET_SEQ, } class ColoredFormatter(logging.Formatter): def __init__(self, msg, use_color = True): logging.Formatter.__init__(self, msg) self.use_color = use_color def format(self, record): if self.use_color: record.levelname = COLORS.get(record.levelname, record.levelname) return logging.Formatter.format(self, record) # Custom logger class with multiple destinations class ConduitLogger(logging.Logger): COLOR_FORMAT = "["+BOLD_SEQ+"%(name)-20s"+RESET_SEQ+"][%(levelname)-18s] %(message)s ("+BOLD_SEQ+"%(filename)s"+RESET_SEQ+":%(lineno)d)" NO_COLOR_FORMAT = "[%(name)-20s][%(levelname)-18s] %(message)s (%(filename)s:%(lineno)d)" LOG_FILE_HANDLER = None def __init__(self, name): logging.Logger.__init__(self, name) #Add two handlers, a stderr one, and a file one color_formatter = ColoredFormatter(ConduitLogger.COLOR_FORMAT) no_color_formatter = ColoredFormatter(ConduitLogger.NO_COLOR_FORMAT, False) #create the single file appending handler if ConduitLogger.LOG_FILE_HANDLER == None: filename = os.environ.get('CONDUIT_LOGFILE',os.path.join(conduit.USER_DIR,'conduit.log')) ConduitLogger.LOG_FILE_HANDLER = logging.FileHandler(filename,'w') ConduitLogger.LOG_FILE_HANDLER.setFormatter(no_color_formatter) console = logging.StreamHandler() console.setFormatter(color_formatter) self.addHandler(ConduitLogger.LOG_FILE_HANDLER) self.addHandler(console) return def enable_debugging(): logging.getLogger().setLevel(logging.DEBUG) def disable_debugging(): logging.getLogger().setLevel(logging.INFO) def disable_logging(): logging.getLogger().setLevel(logging.CRITICAL+1) logging.setLoggerClass(ConduitLogger) conduit-0.3.17/INSTALL0000644000175000017500000002713611326116731011233 00000000000000Installation Instructions ************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 6. Often, you can also type `make uninstall' to remove the installed files again. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *Note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. conduit-0.3.17/po/0000777000175000017500000000000011326117107010671 500000000000000conduit-0.3.17/po/ar.po0000644000175000017500000007673711172176633011603 00000000000000# Arabic translations for PACKAGE package. # Copyright (C) 2007 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Automatically generated, 2007. # # msgid "" msgstr "" "Project-Id-Version: Conduit HEAD\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-10-19 12:04+0100\n" "PO-Revision-Date: 2008-09-18 02:24+0100\n" "Last-Translator: Djihed Afifi \n" "Language-Team: Arabic \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\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" #: ../data/conduit.desktop.in.in.h:1 #: ../data/conduit-autostart.desktop.in.in.h:2 msgid "Conduit Synchronizer" msgstr "مزامن Conduit" #: ../data/conduit.desktop.in.in.h:2 #: ../data/conduit-autostart.desktop.in.in.h:3 msgid "Synchronization for GNOME" msgstr "مزامنة لجنوم" #. Translators: Translate this in derived classes. #: ../data/conduit-autostart.desktop.in.in.h:1 #: ../conduit/modules/N800Module/N800Module.py:55 msgid "Conduit" msgstr "مجرى" #: ../data/conduit.glade.h:1 msgid "Default Synchronization Options" msgstr "الخيارات الإفتراضية للمزامنة" #: ../data/conduit.glade.h:2 msgid "General" msgstr "عام" #: ../data/conduit.glade.h:3 msgid "Always Up To Date" msgstr "دائما محدّث" #: ../data/conduit.glade.h:4 msgid "Ask Me What to Do" msgstr "اسألني ما العمل" #: ../data/conduit.glade.h:5 msgid "Ask me what to do" msgstr "إسألني ما العمل" #: ../data/conduit.glade.h:6 msgid "Cancel Synchronization" msgstr "ألغي المزامنة" #: ../data/conduit.glade.h:7 msgid "Cancel currently synchronizing groups" msgstr "إلغاء المجموعات المزامنة حالياً" #: ../data/conduit.glade.h:8 msgid "Clear Canvas" msgstr "مسح الرقعة" #: ../data/conduit.glade.h:9 msgid "Compare" msgstr "قارن" #: ../data/conduit.glade.h:10 msgid "Conduit Preferences" msgstr "خصائص Conduit" #: ../data/conduit.glade.h:11 msgid "Configuration" msgstr "إعدادات" #: ../data/conduit.glade.h:12 msgid "Configure Item" msgstr "اعد عنصرا" #: ../data/conduit.glade.h:13 msgid "Configure the synchronization settings for this item" msgstr "تهيئة خيارات المزامنة لهذا العنصر" #: ../data/conduit.glade.h:14 msgid "Conflict Options" msgstr "خيارات التعارض" #: ../data/conduit.glade.h:15 msgid "Conflicts" msgstr "التعارضات" #: ../data/conduit.glade.h:16 msgid "Contents" msgstr "المحتويات" #: ../data/conduit.glade.h:17 msgid "Data Conversions" msgstr "تحويل البيانات" #: ../data/conduit.glade.h:18 msgid "Data Providers" msgstr "مزوّدات البيانات" #: ../data/conduit.glade.h:19 msgid "Delete Group" msgstr "احذف المجموعة" #: ../data/conduit.glade.h:20 msgid "Delete Item" msgstr "احذف العنصر" #: ../data/conduit.glade.h:21 msgid "Delete Options" msgstr "احذف الخيارات" #: ../data/conduit.glade.h:22 msgid "Delete from the corresponding sink" msgstr "احذف من المصرف المقابل" #: ../data/conduit.glade.h:23 msgid "Delete the Corresponding Item" msgstr "احذف العنصر المقابل" #: ../data/conduit.glade.h:24 msgid "Editor" msgstr "المحرر" #: ../data/conduit.glade.h:25 msgid "Minimize to notification area" msgstr "صغر إلى منطقة التنبيه" #: ../data/conduit.glade.h:26 msgid "Refresh Group" msgstr "تحديث المجموعة" #: ../data/conduit.glade.h:27 msgid "Refresh Item" msgstr "تحديث العنصر" #: ../data/conduit.glade.h:28 msgid "Replace the Older Item" msgstr "إستبدل العنصر الأقدم" #: ../data/conduit.glade.h:29 msgid "Replace the older item" msgstr "إستبدل العنصر الأقدم" #: ../data/conduit.glade.h:30 msgid "Resolve Conflicts" msgstr "حُلَ التعارضات" #: ../data/conduit.glade.h:31 msgid "Save settings on exit" msgstr "احفظ الإعدادات عند الخروج" #: ../data/conduit.glade.h:32 msgid "Show Hints" msgstr "اظهر تلميحات" #: ../data/conduit.glade.h:33 msgid "Show status icon" msgstr "أظهر رمز الحالة" #: ../data/conduit.glade.h:34 msgid "Skip" msgstr "تخطّي" #: ../data/conduit.glade.h:35 msgid "Slow Sync" msgstr "تزامن بطيء" #: ../data/conduit.glade.h:36 msgid "Sync Options" msgstr "زامن الخيارات" #: ../data/conduit.glade.h:37 msgid "Synchronize All" msgstr "زامن الكل" #: ../data/conduit.glade.h:38 msgid "Synchronize Group" msgstr "زامن المجموعة" #: ../data/conduit.glade.h:39 msgid "Synchronize group" msgstr "زامن المجموعة" #: ../data/conduit.glade.h:40 msgid "Synchronizes all groups" msgstr "زامن كل المجموعات" #: ../data/conduit.glade.h:41 msgid "Title" msgstr "الاسم" #: ../data/conduit.glade.h:42 msgid "Two Way Sync" msgstr "مزامنة بإتجاهين" #: ../data/conduit.glade.h:43 msgid "When an item has been deleted:" msgstr "بعد حذف عنصر:" #: ../data/conduit.glade.h:44 msgid "When an item is deleted..." msgstr "عند حذف عنصر..." #: ../data/conduit.glade.h:45 msgid "When there is a conflict..." msgstr "عند وجود تعارض..." #: ../data/conduit.glade.h:46 msgid "When there is a two way conflict:" msgstr "عند وجود تعارض بإتجاهين:" #: ../data/conduit.glade.h:47 msgid "_Edit" msgstr "_حرّر" #: ../data/conduit.glade.h:48 msgid "_File" msgstr "_ملف" #: ../data/conduit.glade.h:49 msgid "_Help" msgstr "م_ساعدة" #: ../conduit/gtkui/Canvas.py:149 msgid "Drag a Data Provider here to continue" msgstr "إسحب مقدم المعلومات هنا للمتابعة" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:91 msgid "Source" msgstr "المصدر" # I believe this corresponds to a resolution of conflict. #: ../conduit/gtkui/ConflictResolver.py:105 msgid "Resolution" msgstr "القرار" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:110 msgid "Sink" msgstr "المصرف" #: ../conduit/gtkui/ConflictResolver.py:150 #: ../conduit/gtkui/ConflictResolver.py:151 #, python-format msgid "Conflicts (%s)" msgstr "التعارضات (%s)" #. Build some liststores to display #: ../conduit/gtkui/UI.py:284 msgid "Convert from" msgstr "حوّل من" #: ../conduit/gtkui/UI.py:285 msgid "into" msgstr "إلى" #: ../conduit/gtkui/UI.py:336 msgid "Relationship Database" msgstr "قاعدة بيانات العلاقات" #: ../conduit/gtkui/UI.py:340 msgid "Conversions Available" msgstr "التحويلات المتوفرة:" #: ../conduit/gtkui/UI.py:346 ../conduit/gtkui/Tree.py:348 #: ../conduit/modules/FileModule/FileConfiguration.py:105 msgid "Name" msgstr "اسم" #: ../conduit/gtkui/UI.py:350 msgid "Loaded" msgstr "محمّل" #: ../conduit/gtkui/UI.py:462 ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "المزامنة جارية. هل تريد إلغائها؟" #: ../conduit/gtkui/UI.py:628 msgid "_Synchronize All" msgstr "_زامن الكل" #: ../conduit/gtkui/UI.py:628 msgid "Synchronizes All Groups" msgstr "زامن كل المجموعات" #: ../conduit/gtkui/UI.py:629 msgid "_Cancel Synchronization" msgstr "_ألغي المزامنة" #: ../conduit/gtkui/UI.py:629 msgid "Cancels Currently Synchronizing Groups" msgstr "يلغي المجموعات المزامنة حالياً" #: ../conduit/gtkui/UI.py:630 msgid "_Quit" msgstr "أ_نه" #: ../conduit/gtkui/UI.py:630 msgid "Close Conduit" msgstr "اغلق Conduit" #: ../conduit/gtkui/UI.py:670 msgid "Synchronization Error" msgstr "خطأ التزامن" #: ../conduit/gtkui/UI.py:673 msgid "Synchronization Complete" msgstr "تم التزامن" #: ../conduit/gtkui/UI.py:689 msgid "Synchronizing" msgstr "مزامنة" #: ../conduit/gtkui/Tree.py:357 msgid "Description" msgstr "الوصف" #: ../conduit/dataproviders/DataProvider.py:19 msgid "Ready" msgstr "مستعد" #: ../conduit/dataproviders/DataProvider.py:20 msgid "New data to sync" msgstr "بيانات جديدة للمزامنة" #: ../conduit/dataproviders/DataProvider.py:21 msgid "Refreshing..." msgstr "التحديث..." #: ../conduit/dataproviders/DataProvider.py:22 msgid "Refreshed OK" msgstr "تم التحديث" #: ../conduit/dataproviders/DataProvider.py:23 msgid "Error Refreshing" msgstr "خطأ في التحديث" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Synchronizing..." msgstr "مزامنة..." #: ../conduit/dataproviders/DataProvider.py:25 msgid "Synchronized OK" msgstr "تمت المزامنة" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Synchronizing" msgstr "خطأ عند المزامنة" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronization Skipped" msgstr "تم تخطي المزامنة" #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronization Cancelled" msgstr "أُلغيت المزامنة" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Synchronization Conflict" msgstr "تعارض مزامنة" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Not Configured Correctly" msgstr "غير معدة بشكل صحيح" #: ../conduit/modules/BackpackModule/BackpackModule.py:56 msgid "Backpack Notes" msgstr "ملاحظات Backpack" #: ../conduit/modules/BackpackModule/BackpackModule.py:57 msgid "Store things in Backpack Notes" msgstr "حفظ الأشياء في ملاحظات Backpack" #: ../conduit/modules/BackpackModule/config.glade.h:1 #: ../conduit/modules/FlickrModule/config.glade.h:1 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:1 #: ../conduit/modules/GoogleModule/documents-config.glade.h:1 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:1 #: ../conduit/modules/GoogleModule/youtube-config.glade.h:1 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:1 #: ../conduit/modules/SmugMugModule/config.glade.h:1 #: ../conduit/modules/ZotoModule/zoto.glade.h:1 msgid "Account Details" msgstr "تفاصيل الحساب" #: ../conduit/modules/BackpackModule/config.glade.h:2 msgid "Saved Note Settings" msgstr "إعدادات الملاحظة المحفوظة" #: ../conduit/modules/BackpackModule/config.glade.h:3 msgid "API key:" msgstr "مفتاح API" #: ../conduit/modules/BackpackModule/config.glade.h:4 msgid "Backpack" msgstr "Backpack" #: ../conduit/modules/BackpackModule/config.glade.h:5 msgid "Save notes in page:" msgstr "حفظ الملاحظات في صفحة:" #: ../conduit/modules/BackpackModule/config.glade.h:6 #: ../conduit/modules/FlickrModule/config.glade.h:8 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:8 #: ../conduit/modules/GoogleModule/youtube-config.glade.h:9 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:6 #: ../conduit/modules/SmugMugModule/config.glade.h:7 #: ../conduit/modules/ZotoModule/zoto.glade.h:5 msgid "Username:" msgstr "اسم المستخدم:" #: ../conduit/modules/BansheeModule/BansheeModule.py:33 msgid "Banshee Playlists" msgstr "قوائم تشغيل Banshee" #: ../conduit/modules/BansheeModule/BansheeModule.py:34 #, fuzzy msgid "Synchronize your Banshee playlists" msgstr "زامن قوائم تشغيل Banshee" #. column 1 is the tag name #: ../conduit/modules/BansheeModule/BansheeModule.py:141 #: ../conduit/modules/FspotModule/FspotModule.py:246 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:132 msgid "Tag Name" msgstr "اسم الشارة" #: ../conduit/modules/BansheeModule/BansheeModule.py:149 #: ../conduit/modules/FspotModule/FspotModule.py:254 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:140 msgid "Enabled" msgstr "مفعّل" #: ../conduit/modules/BansheeModule/config.glade.h:1 msgid "Return Playlists" msgstr "اعرض قوائم التشغيل" #: ../conduit/modules/BansheeModule/config.glade.h:2 msgid "Banshee" msgstr "Banshee" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 #: ../conduit/modules/BoxDotNetModule/config.glade.h:1 msgid "Box.net" msgstr "Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 #, fuzzy msgid "Synchronize your Box.net files" msgstr "زامن ملفات Box.net" #: ../conduit/modules/BoxDotNetModule/config.glade.h:2 msgid "Folder:" msgstr "المجلد:" #: ../conduit/modules/BoxDotNetModule/config.glade.h:3 #: ../conduit/modules/FacebookModule/config.glade.h:3 #: ../conduit/modules/FlickrModule/config.glade.h:4 msgid "Load" msgstr "حمّل" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:108 #, python-format msgid "Select %s:" msgstr "انتقِ %s:" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:147 msgid "Evolution Contacts" msgstr "مراسَلو إيفُليوشن" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:148 #, fuzzy msgid "Synchronize your contacts" msgstr "زامن المراسلبن" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:198 msgid "Evolution Calendar" msgstr "تقويم إيفُليوشِن" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:199 #, fuzzy msgid "Synchronize your calendar" msgstr "زامن التقويم" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:256 msgid "Evolution Tasks" msgstr "مهام إيفُليوشِن" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:257 #, fuzzy msgid "Synchronize your tasks" msgstr "زامن المهام" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:313 msgid "Evolution Memos" msgstr "مذكرات إيفُليوشِن" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:314 #, fuzzy msgid "Synchronize your memos" msgstr "زامن المذكرات" #: ../conduit/modules/EvolutionModule/config.glade.h:1 msgid "Addressbook:" msgstr "دفتر العناوين:" #: ../conduit/modules/EvolutionModule/config.glade.h:2 msgid "Evolution" msgstr "إيفُليوشن" #: ../conduit/modules/FacebookModule/FacebookModule.py:37 #: ../conduit/modules/FacebookModule/config.glade.h:2 msgid "Facebook" msgstr "Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 #, fuzzy msgid "Synchronize your Facebook photos" msgstr "مزامنة صور Facebook" #: ../conduit/modules/FacebookModule/config.glade.h:1 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:3 #: ../conduit/modules/iPodModule/config.glade.h:2 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:3 #: ../conduit/modules/SmugMugModule/config.glade.h:3 #: ../conduit/modules/ZotoModule/zoto.glade.h:3 msgid "Album:" msgstr "ألبوم:" #: ../conduit/modules/FeedModule/FeedModule.py:57 #: ../conduit/modules/FeedModule/config.glade.h:9 msgid "RSS Feed" msgstr "تلقيم RSS" #: ../conduit/modules/FeedModule/FeedModule.py:58 #, fuzzy msgid "Synchronize data from RSS enclosures" msgstr "مزامنة البيانات من مرفقات RSS" #: ../conduit/modules/FeedModule/config.glade.h:1 msgid "Enclosure Settings" msgstr "إعدادات المرفقات" #: ../conduit/modules/FeedModule/config.glade.h:2 msgid "Feed Details" msgstr "تفاصيل التلقيمة" #: ../conduit/modules/FeedModule/config.glade.h:3 msgid "Download Audio Files" msgstr "نزل ملفات الصوت" #: ../conduit/modules/FeedModule/config.glade.h:4 msgid "Download Photos" msgstr "نزل صور" #: ../conduit/modules/FeedModule/config.glade.h:5 msgid "Download Video Files" msgstr "نزل ملفات الفيديو" #: ../conduit/modules/FeedModule/config.glade.h:6 msgid "Feed Address:" msgstr "عنوان التلقيم" #: ../conduit/modules/FeedModule/config.glade.h:7 msgid "" "Limit the Number of\n" "Enclosures Downloaded to:" msgstr "" "تحديد عدد\n" "المرفقات المحملة بـ:" #: ../conduit/modules/FileModule/FileConfiguration.py:99 msgid "Icon" msgstr "أيقونة" #: ../conduit/modules/FileModule/FileConfiguration.py:111 msgid "Items" msgstr "عناصر" #: ../conduit/modules/FileModule/FileConfiguration.py:137 #, python-format msgid "Contains %s files" msgstr "يحتوي %s ملفات" #: ../conduit/modules/FileModule/FileConfiguration.py:228 msgid "Include file..." msgstr "ضمّن ملفا..." #: ../conduit/modules/FileModule/FileConfiguration.py:238 msgid "All files" msgstr "كلّ الملفات" #: ../conduit/modules/FileModule/FileConfiguration.py:253 msgid "Include folder..." msgstr "ضمّن مجلدا..." #: ../conduit/modules/FileModule/FileConfiguration.py:298 msgid "Please Name All Folders" msgstr "الرجاء تسمية كل المجلدات" #: ../conduit/modules/FileModule/FileConfiguration.py:299 msgid "" "All folders require a descriptive name. To name a folder simply click on it" msgstr "كل المجلدات تتطلب إسما وصفيا. لتسمية مجلد ببساطة إنقر عليه" #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "ملفات" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "المصدر لمزامنة ملفات متعددة" #: ../conduit/modules/FileModule/FileModule.py:63 msgid "Folder" msgstr "مجلّد" #: ../conduit/modules/FileModule/FileModule.py:64 msgid "Synchronize folders" msgstr "زامن مجلدات" #: ../conduit/modules/FileModule/config.glade.h:1 msgid "Items to Synchronize" msgstr "عناصر لمزامنتها" #: ../conduit/modules/FileModule/config.glade.h:2 msgid "Add Directory" msgstr "اضف دليل" #: ../conduit/modules/FileModule/config.glade.h:3 msgid "Add File" msgstr "اضف ملف" #: ../conduit/modules/FileModule/config.glade.h:4 msgid "Advanced" msgstr "متقدم" #: ../conduit/modules/FileModule/config.glade.h:5 msgid "File Configuration" msgstr "إعدادات الملف" #: ../conduit/modules/FileModule/config.glade.h:6 msgid "Folder Configuration" msgstr "إعدادات المجلد" #: ../conduit/modules/FileModule/config.glade.h:7 msgid "Folder Location:" msgstr "موقع المجلد:" #: ../conduit/modules/FileModule/config.glade.h:8 msgid "Follow Symbolic Links" msgstr "إتباع الروابط.الرمزية" #: ../conduit/modules/FileModule/config.glade.h:9 msgid "Ignore File Modification Times" msgstr "تجاهل تاريخ تعديل الملف" #: ../conduit/modules/FileModule/config.glade.h:10 msgid "Include Hidden Files" msgstr "ضمن الملفات المخفاة" #: ../conduit/modules/FileModule/config.glade.h:11 msgid "Select A Folder" msgstr "إنتق مجلّد" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 #: ../conduit/modules/FlickrModule/config.glade.h:3 msgid "Flickr" msgstr "فلكر" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 #, fuzzy msgid "Synchronize your Flickr.com photos" msgstr "مزامنة صور Flickr.com" #: ../conduit/modules/FlickrModule/config.glade.h:2 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:2 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:2 #: ../conduit/modules/SmugMugModule/config.glade.h:2 #: ../conduit/modules/ZotoModule/zoto.glade.h:2 msgid "Saved Photo Settings" msgstr "إعدادات الصور المحفوظة" #: ../conduit/modules/FlickrModule/config.glade.h:5 msgid "Photos are public" msgstr "الصور متوفرة للجميع" #: ../conduit/modules/FlickrModule/config.glade.h:6 msgid "Photoset Name:" msgstr "اسم مجموعة الصور:" #: ../conduit/modules/FlickrModule/config.glade.h:7 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:7 #: ../conduit/modules/SmugMugModule/config.glade.h:5 msgid "Resize Photos:" msgstr "تحجيم الصور:" #: ../conduit/modules/FspotModule/FspotModule.py:25 #: ../conduit/modules/FspotModule/config.glade.h:3 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 #, fuzzy msgid "Synchronize your F-Spot photos" msgstr "مزامنة صور F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:127 msgid "F-Spot DBus interface is operating in read only mode" msgstr "واجهة F-Spot·DBus تعمل في نمط القراءة فقط" #: ../conduit/modules/FspotModule/config.glade.h:1 msgid "Return Photos Tagged With" msgstr "اعرض الصور الموسومة بـ" #: ../conduit/modules/FspotModule/config.glade.h:2 msgid "Create Tags: " msgstr "إنشاء وسم: " #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "GConf Settings" msgstr "إعدادات GConf" #: ../conduit/modules/GConfModule/GConfModule.py:22 #, fuzzy msgid "Synchronize your desktop preferences" msgstr "زامن تفضيلات مكتبك" #: ../conduit/modules/GoogleModule/GoogleModule.py:369 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:4 msgid "Google Calendar" msgstr "تقويم جنوم" #: ../conduit/modules/GoogleModule/GoogleModule.py:370 #, fuzzy msgid "Synchronize your Google Calendar" msgstr "مزامنة تقويم Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:555 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:6 msgid "Picasa" msgstr "بيكاسا" #: ../conduit/modules/GoogleModule/GoogleModule.py:556 #, fuzzy msgid "Synchronize your Google Picasa photos" msgstr "مزامنة صور Google Picasa " #: ../conduit/modules/GoogleModule/GoogleModule.py:803 msgid "Google Contacts" msgstr "مراسلي Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:804 #, fuzzy msgid "Synchronize your Gmail contacts" msgstr "مزامنة مراسلي Gmail" #: ../conduit/modules/GoogleModule/GoogleModule.py:1060 #: ../conduit/modules/GoogleModule/documents-config.glade.h:5 msgid "Google Documents" msgstr "مستندات Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:1061 #, fuzzy msgid "Synchronize your Google Documents" msgstr "مزامنة مستندات Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:1338 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:60 msgid "Unknown" msgstr "مجهول" #: ../conduit/modules/GoogleModule/GoogleModule.py:1339 msgid "miscellaneous" msgstr "متنوعات" #: ../conduit/modules/GoogleModule/GoogleModule.py:1340 msgid "No description." msgstr "لا وصف." #: ../conduit/modules/GoogleModule/GoogleModule.py:1349 msgid "YouTube" msgstr "يوتوب" #: ../conduit/modules/GoogleModule/GoogleModule.py:1350 #, fuzzy msgid "Synchronize data from YouTube" msgstr "زامن البيانات من يوتوب" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:2 msgid "Calendar:" msgstr "تقويم:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:3 #: ../conduit/modules/GoogleModule/documents-config.glade.h:4 msgid "Email:" msgstr "البريد الإلكتروني:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:5 msgid "Load Calendars" msgstr "حمل التقويمات" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:6 #: ../conduit/modules/GoogleModule/documents-config.glade.h:6 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:5 #: ../conduit/modules/GoogleModule/youtube-config.glade.h:6 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:4 #: ../conduit/modules/SmugMugModule/config.glade.h:4 #: ../conduit/modules/ZotoModule/zoto.glade.h:4 msgid "Password:" msgstr "كلمة المرور:" #: ../conduit/modules/GoogleModule/documents-config.glade.h:2 msgid "Downloaded Document Format" msgstr "صيغة الملف المنزّّل" #: ../conduit/modules/GoogleModule/documents-config.glade.h:3 msgid "Documents" msgstr "المستندات" #: ../conduit/modules/GoogleModule/documents-config.glade.h:7 msgid "Presentations" msgstr "العروض" #: ../conduit/modules/GoogleModule/documents-config.glade.h:8 msgid "Spreadsheets" msgstr "أوراق الحساب" #: ../conduit/modules/GoogleModule/picasa-config.glade.h:4 msgid "Login" msgstr "تسجيل الدخول" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:2 msgid "Download Videos" msgstr "نزل الفيديو" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:3 msgid "Favorites of above user" msgstr "التفضيلات لدى المستخدم المذكور" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:4 msgid "Max retrieved videos (0 is unlimited):" msgstr "الحد الأقصى للفيديو المحمل (0 بدون حد)" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:5 msgid "Most viewed" msgstr "الأكثر عرضا" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:7 msgid "Top rated" msgstr "الأعلى نسبةً" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:8 msgid "Uploaded by above user" msgstr "رفعها المستخدم المذكور " #: ../conduit/modules/GoogleModule/youtube-config.glade.h:10 msgid "YouTube Source" msgstr "مصدر يوتوب" #: ../conduit/modules/iPodModule/iPodModule.py:635 msgid "Encoding" msgstr "تشفير" #: ../conduit/modules/iPodModule/iPodModule.py:744 msgid "Keep converted files" msgstr "احفظ الملفات المحّولة" #: ../conduit/modules/iPodModule/config.glade.h:1 msgid "Encoding" msgstr "التشفير" #: ../conduit/modules/iPodModule/config.glade.h:3 msgid "iPod Photos" msgstr "صور iPod" #. Translators: Format string used to describe the acceptable formats the #. device accepts. The first arg is replaced with DEFAULT_FOLDER and the second #. arg is a comma seperated list of encodings #: ../conduit/modules/N800Module/N800Module.py:59 #, python-format msgid "%s Format (%s)" msgstr "هيئة %s (%s)" #. Signifies that a conversion should not take place #: ../conduit/modules/N800Module/N800Module.py:61 msgid "unchanged" msgstr "لم يتغيير" #: ../conduit/modules/N800Module/N800Module.py:123 msgid "N800 Files" msgstr "ملفّات N800" #: ../conduit/modules/N800Module/N800Module.py:124 msgid "Synchronizes files/folders to a N800 device" msgstr "مزامنة الملفات/المجلدات إلى جهاز N800" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:129 msgid "Backups" msgstr "النسخ الإحتياطيه" #: ../conduit/modules/N800Module/N800Module.py:144 msgid "N800 Music" msgstr "موسيقى N800" #: ../conduit/modules/N800Module/N800Module.py:145 msgid "Synchronizes music to a N800 device" msgstr "مزامنة الموسيقى إلى جهاز N800" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:151 msgid "Music" msgstr "Music" #: ../conduit/modules/N800Module/N800Module.py:168 msgid "N800 Videos" msgstr "مرئيات N800" #: ../conduit/modules/N800Module/N800Module.py:169 msgid "Synchronizes video to a N800 device" msgstr "مزامنة " #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:175 msgid "Video" msgstr "Video" #: ../conduit/modules/N800Module/N800Module.py:192 msgid "N800 Photos" msgstr "صور N800" #: ../conduit/modules/N800Module/N800Module.py:193 msgid "Synchronizes photo to a N800 device" msgstr "زامن الصور مع جهاز N800" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:199 msgid "Photo" msgstr "صور" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "الشبكة" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "تمكين المزامنة عبر الشبكة" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:40 msgid "Rhythmbox Music" msgstr "موسيقى رذمبكس" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:41 #, fuzzy msgid "Synchronize songs from your Rhythmbox playlists" msgstr "مزامنة الأغاني من قائمة تشغيل Rhythmbox" #: ../conduit/modules/RhythmboxModule/config.glade.h:1 msgid "Synchronize the Following Playlists" msgstr "زامن القوائم الآتية" #: ../conduit/modules/RhythmboxModule/config.glade.h:2 msgid "Rhythmbox Playlists" msgstr "قوائم رذمبكس" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:5 msgid "Shutterfly" msgstr "Shutterfly" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 #, fuzzy msgid "Synchronize your Shutterfly photos" msgstr "زامن صور Shutterfly" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "%Y-%m-%d %H:%M:%S" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 #: ../conduit/modules/SmugMugModule/config.glade.h:6 msgid "SmugMug" msgstr "SmugMug" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 #, fuzzy msgid "Synchronize your SmugMug.com photos" msgstr "زامن صور SmugMug" #: ../conduit/modules/ZotoModule/ZotoModule.py:154 #: ../conduit/modules/ZotoModule/zoto.glade.h:6 msgid "Zoto" msgstr "Zoto" #: ../conduit/modules/ZotoModule/ZotoModule.py:155 #, fuzzy msgid "Synchronize your Zoto photos" msgstr "مزامنة صور Zoto" #~ msgid "_About" #~ msgstr "_حول" #~ msgid "About Conduit" #~ msgstr "حول كوندويت" #~ msgid "Use built in Web browser" #~ msgstr "إستخدام المتصفح المدمج" #~ msgid "Please Enter a Folder Name" #~ msgstr "أدخل اسم مجلد" #~ msgid "" #~ "All folders require a descriptive name. To name a folder enter its name " #~ "where indicated" #~ msgstr "كل المجلدات تتطلب إسما وصفيا. لتسمية مجلد أدخل إسمه حيث الإشارة" #~ msgid "Folder Name:" #~ msgstr "اسم المجلّد:" #~ msgid "By user" #~ msgstr "المستخدم" #~ msgid "User: " #~ msgstr "المستخدم:" #~ msgid "dialog1" #~ msgstr "dialog1" #~ msgid "_Synchronize" #~ msgstr "_زامن" #, fuzzy #~ msgid "Synchronize all dataproviders" #~ msgstr "أظهر كل المكونات" #, fuzzy #~ msgid "F-Spot DBus Photos" #~ msgstr "صور و موسيقى" #, fuzzy #~ msgid "Failed to get remotes" #~ msgstr "فشل تلقي البكسماب %s" #~ msgid "Email" #~ msgstr "البريد الإلكتروني" #~ msgid "Login Details" #~ msgstr "تفاصيل الدخول" #, fuzzy #~ msgid "Return Emails Matching" #~ msgstr "ظَلِّل القوس الموافق" #~ msgid "Saved Email Settings" #~ msgstr "إعدادات البريد المحفوظة" #~ msgid "When Saving Emails" #~ msgstr "عند حفظ البريد" #~ msgid "All emails" #~ msgstr "كل البريد" #~ msgid "Attach label to email" #~ msgstr "الصق تسمية ببريد" #~ msgid "Emails in folder:" #~ msgstr "بريد في مجلد:" #~ msgid "Emails with label:" #~ msgstr "بريد بتسمية:" #~ msgid "Gmail Emails" #~ msgstr "بريد جوجل" #, fuzzy #~ msgid "Gmail Sink Properties" #~ msgstr "خصائص عنصر القائمة" #~ msgid "Password: " #~ msgstr "كلمة المرور: " #~ msgid "Save with label:" #~ msgstr "احفظ بالتسمية:" #~ msgid "Unread emails" #~ msgstr "الرسائل غير المقروءة" #~ msgid "Username: " #~ msgstr "اسم المستخدم: " #~ msgid "Network your desktop" #~ msgstr "اربط سطح مكتبك شبكيا" #~ msgid "Evolution Events" #~ msgstr "أحداث إيفليوشن" #~ msgid "Evolution Todo" #~ msgstr "مهام إيفليوشن" #~ msgid "Sync your Evolution tasks" #~ msgstr "زامن أشغال إيفليوشن" #~ msgid "%Y-%m-%dT%H:%M:%S" #~ msgstr "%Y-%m-%dT%H:%M:%S" #~ msgid "Sync your devices contacts" #~ msgstr "زامن اتصالات أجهزتك" #~ msgid "Synce Events" #~ msgstr "زامن الأحداث" #~ msgid "Synce Todo" #~ msgstr "زامن قائمة المهام" #~ msgid "Sync your devices tasks" #~ msgstr "زامن أشغال أجهزتك" conduit-0.3.17/po/he.po0000644000175000017500000006000411172176633011551 00000000000000# 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-05-04 03:18+0000\n" "PO-Revision-Date: 2008-05-04 03:18+0000\n" "Last-Translator: Yair Hershkovitz\n" "Language-Team: he\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../data/conduit.desktop.in.in.h:1 #: ../data/conduit-autostart.desktop.in.in.h:2 msgid "Conduit Synchronizer" msgstr "" #: ../data/conduit.desktop.in.in.h:2 #: ../data/conduit-autostart.desktop.in.in.h:3 msgid "Synchronization for GNOME" msgstr "סנכרון עבור GNOME" #. Translators: Translate this in derived classes. #: ../data/conduit-autostart.desktop.in.in.h:1 #: ../conduit/modules/N800Module/N800Module.py:54 msgid "Conduit" msgstr "‏Conduit" #: ../data/conduit.glade.h:1 msgid "Default Synchronization Options" msgstr "" #: ../data/conduit.glade.h:2 msgid "General" msgstr "כללי" #: ../data/conduit.glade.h:3 msgid "Always Up To Date" msgstr "" #: ../data/conduit.glade.h:4 msgid "Ask Me What to Do" msgstr "" #: ../data/conduit.glade.h:5 msgid "Ask me what to do" msgstr "" #: ../data/conduit.glade.h:6 msgid "Cancel Synchronization" msgstr "בטל סנכרון" #: ../data/conduit.glade.h:7 msgid "Cancel currently synchronizing groups" msgstr "" #: ../data/conduit.glade.h:8 msgid "Clear Canvas" msgstr "" #: ../data/conduit.glade.h:9 msgid "Compare" msgstr "" #: ../data/conduit.glade.h:10 msgid "Conduit Properties" msgstr "מאפייני Conduit" #: ../data/conduit.glade.h:11 msgid "Configuration" msgstr "הגדרות" #: ../data/conduit.glade.h:12 msgid "Configure Item" msgstr "" #: ../data/conduit.glade.h:13 msgid "Configure the synchronization settings for this item" msgstr "" #: ../data/conduit.glade.h:14 msgid "Conflict Options" msgstr "" #: ../data/conduit.glade.h:15 msgid "Conflicts" msgstr "" #: ../data/conduit.glade.h:16 msgid "Contents" msgstr "תכנים" #: ../data/conduit.glade.h:17 msgid "Data Conversions" msgstr "" #: ../data/conduit.glade.h:18 msgid "Data Providers" msgstr "" #: ../data/conduit.glade.h:19 msgid "Delete Group" msgstr "מחק קבוצה" #: ../data/conduit.glade.h:20 msgid "Delete Item" msgstr "מחק פריט" #: ../data/conduit.glade.h:21 msgid "Delete Options" msgstr "אפשרויות מחיקה" #: ../data/conduit.glade.h:22 msgid "Delete from the corresponding sink" msgstr "" #: ../data/conduit.glade.h:23 msgid "Delete the Corresponding Item" msgstr "" #: ../data/conduit.glade.h:24 msgid "Editor" msgstr "עורך" #: ../data/conduit.glade.h:25 msgid "Minimize to notification area" msgstr "" #: ../data/conduit.glade.h:26 msgid "Refresh Group" msgstr "רענן קבוצה" #: ../data/conduit.glade.h:27 msgid "Refresh Item" msgstr "רענן פריט" #: ../data/conduit.glade.h:28 msgid "Replace the Older Item" msgstr "" #: ../data/conduit.glade.h:29 msgid "Replace the older item" msgstr "" #: ../data/conduit.glade.h:30 msgid "Resolve Conflicts" msgstr "" #: ../data/conduit.glade.h:31 msgid "Save settings on exit" msgstr "שמור שינויים ביציאה" #: ../data/conduit.glade.h:32 msgid "Show status icon" msgstr "" #: ../data/conduit.glade.h:33 msgid "Skip" msgstr "דלג" #: ../data/conduit.glade.h:34 msgid "Slow Sync" msgstr "" #: ../data/conduit.glade.h:35 msgid "Sync Options" msgstr "אפשרויות סנכרון" #: ../data/conduit.glade.h:36 msgid "Synchronize All" msgstr "" #: ../data/conduit.glade.h:37 msgid "Synchronize Group" msgstr "" #: ../data/conduit.glade.h:38 msgid "Synchronize group" msgstr "" #: ../data/conduit.glade.h:39 msgid "Synchronizes all groups" msgstr "" #: ../data/conduit.glade.h:40 msgid "Title" msgstr "כותרת" #: ../data/conduit.glade.h:41 msgid "Two Way Sync" msgstr "" #: ../data/conduit.glade.h:42 msgid "Use built in Web browser" msgstr "" #: ../data/conduit.glade.h:43 msgid "When an item has been deleted:" msgstr "כאשר פריט נמחק:" #: ../data/conduit.glade.h:44 msgid "When an item is deleted..." msgstr "כאשר פריט נמחק..." #: ../data/conduit.glade.h:45 msgid "When there is a conflict..." msgstr "" #: ../data/conduit.glade.h:46 msgid "When there is a two way conflict:" msgstr "" #: ../data/conduit.glade.h:47 msgid "_Edit" msgstr "_עריכה" #: ../data/conduit.glade.h:48 msgid "_File" msgstr "_קובץ" #: ../data/conduit.glade.h:49 msgid "_Help" msgstr "_עזרה" #: ../conduit/gtkui/Canvas.py:61 ../conduit/hildonui/Canvas.py:35 msgid "Drag a Data Provider here to continue" msgstr "" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:82 msgid "Source" msgstr "מקור" #: ../conduit/gtkui/ConflictResolver.py:96 msgid "Resolution" msgstr "" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:101 msgid "Sink" msgstr "" #: ../conduit/gtkui/ConflictResolver.py:165 #: ../conduit/gtkui/ConflictResolver.py:166 #, python-format msgid "Conflicts (%s)" msgstr "" #. Build some liststores to display #: ../conduit/gtkui/UI.py:235 msgid "Convert from" msgstr "" #: ../conduit/gtkui/UI.py:236 msgid "into" msgstr "" #: ../conduit/gtkui/UI.py:291 msgid "Conversions Available" msgstr "" #: ../conduit/gtkui/UI.py:297 ../conduit/gtkui/Tree.py:348 #: ../conduit/modules/FileModule/FileConfiguration.py:104 msgid "Name" msgstr "שם" #: ../conduit/gtkui/UI.py:301 msgid "Loaded" msgstr "" #: ../conduit/gtkui/UI.py:399 ../conduit/hildonui/UI.py:129 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "קיים סנכרון פעיל. לבטל אותו?" #: ../conduit/gtkui/UI.py:556 msgid "_Synchronize All" msgstr "_סנכרן הכל" #: ../conduit/gtkui/UI.py:556 msgid "Synchronizes All Groups" msgstr "מסנכרן את כל הקבוצות" #: ../conduit/gtkui/UI.py:557 msgid "_Cancel Synchronization" msgstr "_בטל סנכרון" #: ../conduit/gtkui/UI.py:557 msgid "Cancels Currently Synchronizing Groups" msgstr "" #: ../conduit/gtkui/UI.py:558 msgid "_Quit" msgstr "_יציאה" #: ../conduit/gtkui/UI.py:558 msgid "Close Conduit" msgstr "סגור את Conduit" #: ../conduit/gtkui/UI.py:559 msgid "_About" msgstr "_אודות" #: ../conduit/gtkui/UI.py:559 msgid "About Conduit" msgstr "אודות Conduit" #: ../conduit/gtkui/UI.py:599 msgid "Synchronization Error" msgstr "שגיאת סכרון" #: ../conduit/gtkui/UI.py:602 msgid "Synchronization Complete" msgstr "סנכרון הסתיים" #: ../conduit/gtkui/UI.py:618 msgid "Synchronizing" msgstr "מסנכרן" #: ../conduit/gtkui/Tree.py:357 msgid "Description" msgstr "תיאור" #: ../conduit/dataproviders/DataProvider.py:19 msgid "Ready" msgstr "מוכן" #: ../conduit/dataproviders/DataProvider.py:20 msgid "New data to sync" msgstr "" #: ../conduit/dataproviders/DataProvider.py:21 msgid "Refreshing..." msgstr "מרענן..." #: ../conduit/dataproviders/DataProvider.py:22 msgid "Refreshed OK" msgstr "" #: ../conduit/dataproviders/DataProvider.py:23 msgid "Error Refreshing" msgstr "שגיאה ברענון" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Synchronizing..." msgstr "מסנכרן..." #: ../conduit/dataproviders/DataProvider.py:25 msgid "Synchronized OK" msgstr "" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Synchronizing" msgstr "שגיאה בסנכרון" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronization Skipped" msgstr "" #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronization Cancelled" msgstr "סנכרון בוטל" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Synchronization Conflict" msgstr "" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Not Configured Correctly" msgstr "" #: ../conduit/modules/BackpackModule/BackpackModule.py:55 msgid "Backpack Notes" msgstr "" #: ../conduit/modules/BackpackModule/BackpackModule.py:56 msgid "Store things in Backpack Notes" msgstr "" #: ../conduit/modules/BackpackModule/config.glade.h:1 #: ../conduit/modules/FlickrModule/config.glade.h:1 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:1 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:1 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:1 #: ../conduit/modules/SmugMugModule/config.glade.h:1 msgid "Account Details" msgstr "פרטי חשבון" #: ../conduit/modules/BackpackModule/config.glade.h:2 msgid "Saved Note Settings" msgstr "" #: ../conduit/modules/BackpackModule/config.glade.h:3 msgid "API key:" msgstr "" #: ../conduit/modules/BackpackModule/config.glade.h:4 msgid "Backpack" msgstr "" #: ../conduit/modules/BackpackModule/config.glade.h:5 msgid "Save notes in page:" msgstr "" #: ../conduit/modules/BackpackModule/config.glade.h:6 #: ../conduit/modules/FlickrModule/config.glade.h:8 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:8 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:6 #: ../conduit/modules/SmugMugModule/config.glade.h:7 msgid "Username:" msgstr "שם משתמש" #: ../conduit/modules/BansheeModule/BansheeModule.py:30 msgid "Banshee Playlists" msgstr "רשימות השמעה של Banshee" #: ../conduit/modules/BansheeModule/BansheeModule.py:31 msgid "Sync your Banshee playlists" msgstr "סנכרן רשימות השמעה של Banshee" #. column 1 is the tag name #: ../conduit/modules/BansheeModule/BansheeModule.py:137 #: ../conduit/modules/FspotModule/FspotModule.py:252 #: ../conduit/modules/FspotModule/FspotModule.py:409 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:129 msgid "Tag Name" msgstr "" #: ../conduit/modules/BansheeModule/BansheeModule.py:145 #: ../conduit/modules/FspotModule/FspotModule.py:260 #: ../conduit/modules/FspotModule/FspotModule.py:417 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:137 msgid "Enabled" msgstr "מופעל" #: ../conduit/modules/BansheeModule/config.glade.h:1 msgid "Return Playlists" msgstr "" #: ../conduit/modules/BansheeModule/config.glade.h:2 msgid "Banshee" msgstr "‏Banshee" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 #: ../conduit/modules/BoxDotNetModule/config.glade.h:1 msgid "Box.net" msgstr "‏Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 msgid "Sync your Box.net files" msgstr "סנכרן את קבצי ה-Box.net שלך" #: ../conduit/modules/BoxDotNetModule/config.glade.h:2 msgid "Folder:" msgstr "תיקייה:" #: ../conduit/modules/BoxDotNetModule/config.glade.h:3 #: ../conduit/modules/FlickrModule/config.glade.h:4 msgid "Load" msgstr "" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:107 #, python-format msgid "Select %s:" msgstr "בחר %s:" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:146 msgid "Evolution Contacts" msgstr "אנשי קשר של Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:147 msgid "Sync your contacts" msgstr "סנכרן את אנשי הקשר שלך" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:198 msgid "Evolution Calendar" msgstr "יומן Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:199 msgid "Sync your calendar" msgstr "סנכרן את היומן שלך" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:256 msgid "Evolution Tasks" msgstr "משימות Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:257 msgid "Sync your tasks" msgstr "סנכן את המשימות שלך" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:313 msgid "Evolution Memos" msgstr "תזכורות Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:314 msgid "Sync your memos" msgstr "סנכרן את התזכורות שלך" #: ../conduit/modules/EvolutionModule/config.glade.h:1 msgid "Addressbook:" msgstr "ספר כתובות:" #: ../conduit/modules/EvolutionModule/config.glade.h:2 msgid "Evolution" msgstr "‏Evolution" #: ../conduit/modules/FacebookModule/FacebookModule.py:37 msgid "Facebook" msgstr "‏Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 msgid "Sync your Facebook photos" msgstr "סנכרן את תמונות ה-Facebook שלך" #: ../conduit/modules/FeedModule/FeedModule.py:30 #: ../conduit/modules/FeedModule/config.glade.h:9 msgid "RSS Feed" msgstr "" #: ../conduit/modules/FeedModule/FeedModule.py:31 msgid "Sync data from RSS enclosures" msgstr "" #: ../conduit/modules/FeedModule/config.glade.h:1 msgid "Enclosure Settings" msgstr "" #: ../conduit/modules/FeedModule/config.glade.h:2 msgid "Feed Details" msgstr "" #: ../conduit/modules/FeedModule/config.glade.h:3 msgid "Download Audio Files" msgstr "הורד קבצי אודיו" #: ../conduit/modules/FeedModule/config.glade.h:4 msgid "Download Photos" msgstr "הורד תמונות" #: ../conduit/modules/FeedModule/config.glade.h:5 msgid "Download Video Files" msgstr "הורד קבצי וידאו" #: ../conduit/modules/FeedModule/config.glade.h:6 msgid "Feed Address:" msgstr "" #: ../conduit/modules/FeedModule/config.glade.h:7 msgid "" "Limit the Number of\n" "Enclosures Downloaded to:" msgstr "" #: ../conduit/modules/FileModule/FileConfiguration.py:98 msgid "Icon" msgstr "איקון" #: ../conduit/modules/FileModule/FileConfiguration.py:110 msgid "Items" msgstr "פריטים" #: ../conduit/modules/FileModule/FileConfiguration.py:136 #, python-format msgid "Contains %s files" msgstr "מכיל %s קבצים" #: ../conduit/modules/FileModule/FileConfiguration.py:226 msgid "Include file..." msgstr "כלול קובץ..." #: ../conduit/modules/FileModule/FileConfiguration.py:236 msgid "All files" msgstr "כל הקבצים" #: ../conduit/modules/FileModule/FileConfiguration.py:251 msgid "Include folder..." msgstr "כלול תיקייה..." #: ../conduit/modules/FileModule/FileConfiguration.py:296 msgid "Please Name All Folders" msgstr "" #: ../conduit/modules/FileModule/FileConfiguration.py:297 msgid "" "All folders require a descriptive name. To name a folder simply click on it" msgstr "" #: ../conduit/modules/FileModule/FileConfiguration.py:338 msgid "Please Enter a Folder Name" msgstr "נא להכניס שם תיקייה" #: ../conduit/modules/FileModule/FileConfiguration.py:339 msgid "" "All folders require a descriptive name. To name a folder enter its name " "where indicated" msgstr "" #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "קבצים" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "" #: ../conduit/modules/FileModule/FileModule.py:62 msgid "Folder" msgstr "תיקייה" #: ../conduit/modules/FileModule/FileModule.py:63 msgid "Synchronize folders" msgstr "סנכרן תיקיות" #: ../conduit/modules/FileModule/config.glade.h:1 msgid "Items to Synchronize" msgstr "פריטים לסנכרון" #: ../conduit/modules/FileModule/config.glade.h:2 msgid "Add Directory" msgstr "הוסף ספרייה" #: ../conduit/modules/FileModule/config.glade.h:3 msgid "Add File" msgstr "הוסף קובץ" #: ../conduit/modules/FileModule/config.glade.h:4 msgid "File Configuration" msgstr "הגדרות קובץ" #: ../conduit/modules/FileModule/config.glade.h:5 msgid "Folder Configuration" msgstr "הגדרות תיקייה" #: ../conduit/modules/FileModule/config.glade.h:6 msgid "Folder Location:" msgstr "מיקום תיקייה:" #: ../conduit/modules/FileModule/config.glade.h:7 msgid "Folder Name:" msgstr "שם תיקייה:" #: ../conduit/modules/FileModule/config.glade.h:8 msgid "Ignore File Modification Times" msgstr "" #: ../conduit/modules/FileModule/config.glade.h:9 msgid "Include Hidden Files" msgstr "כלול קבצים חבויים" #: ../conduit/modules/FileModule/config.glade.h:10 msgid "Select A Folder" msgstr "בחר תיקייה" #: ../conduit/modules/FlickrModule/FlickrModule.py:65 #: ../conduit/modules/FlickrModule/config.glade.h:3 msgid "Flickr" msgstr "‏Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:66 msgid "Sync your Flickr.com photos" msgstr "סנכרן את תמונות ה-Flickr שלך" #: ../conduit/modules/FlickrModule/config.glade.h:2 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:2 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:2 #: ../conduit/modules/SmugMugModule/config.glade.h:2 msgid "Saved Photo Settings" msgstr "" #: ../conduit/modules/FlickrModule/config.glade.h:5 msgid "Photos are public" msgstr "תמונות ציבוריות" #: ../conduit/modules/FlickrModule/config.glade.h:6 msgid "Photoset Name:" msgstr "" #: ../conduit/modules/FlickrModule/config.glade.h:7 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:7 #: ../conduit/modules/SmugMugModule/config.glade.h:5 msgid "Resize Photos:" msgstr "" #: ../conduit/modules/FspotModule/FspotModule.py:32 #: ../conduit/modules/FspotModule/FspotModule.py:300 msgid "F-Spot Photos" msgstr "תמונות F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:33 #: ../conduit/modules/FspotModule/FspotModule.py:301 msgid "Sync your F-Spot photos" msgstr "סנכרן את תמונות ה-F-Spot שלך" #: ../conduit/modules/FspotModule/FspotModule.py:133 msgid "F-Spot DBus interface is operating in read only mode" msgstr "" #: ../conduit/modules/FspotModule/config.glade.h:1 msgid "Return Photos Tagged With" msgstr "" #: ../conduit/modules/FspotModule/config.glade.h:2 msgid "Create Tags: " msgstr "" #: ../conduit/modules/FspotModule/config.glade.h:3 msgid "F-Spot" msgstr "‏F-Spot" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "GConf Settings" msgstr "הגדרות GConf" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Sync your desktop preferences" msgstr "סנכרן את העדפות שולחן העבודה שלך" #: ../conduit/modules/GoogleModule/GoogleModule.py:354 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:4 msgid "Google Calendar" msgstr "יומן Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:355 msgid "Sync your Google Calendar" msgstr "סנכרן את יומן Google שלך" #: ../conduit/modules/GoogleModule/GoogleModule.py:546 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:6 msgid "Picasa" msgstr "‏Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:547 msgid "Sync your Google Picasa photos" msgstr "" "סנכרן את תמונות ה-Google Picasa שלך" #: ../conduit/modules/GoogleModule/GoogleModule.py:764 msgid "Google Contacts" msgstr "אנשי קשר של Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:765 msgid "Sync contacts from Google" msgstr "סנכרן אנשי קשר מ-Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:878 msgid "YouTube" msgstr "‏YouTube" #: ../conduit/modules/GoogleModule/GoogleModule.py:879 msgid "Sync data from YouTube" msgstr "סנכרן מידע מ-YouTube" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:2 msgid "Calendar:" msgstr "יומן:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:3 msgid "Email:" msgstr "דוא\"ל:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:5 msgid "Load Calendars" msgstr "טען יומנים" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:6 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:5 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:4 #: ../conduit/modules/SmugMugModule/config.glade.h:4 msgid "Password:" msgstr "סיסמה:" #: ../conduit/modules/GoogleModule/picasa-config.glade.h:3 #: ../conduit/modules/iPodModule/config.glade.h:1 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:3 #: ../conduit/modules/SmugMugModule/config.glade.h:3 msgid "Album:" msgstr "אלבום:" #: ../conduit/modules/GoogleModule/picasa-config.glade.h:4 msgid "Login" msgstr "כניסה" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:1 msgid "Donwload Videos" msgstr "הורד קבצי וידאו" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:2 msgid "By user" msgstr "לפי משתמש" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:3 msgid "Favorites of" msgstr "מועדפים של" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:4 msgid "Max retrieved videos (0 is unlimited):" msgstr "" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:5 msgid "Most viewed" msgstr "" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:6 msgid "Top rated" msgstr "" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:7 msgid "Uploaded by" msgstr "הועלה על ידי" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:8 msgid "User: " msgstr "משתמש:" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:9 msgid "YouTube Source" msgstr "מקור YouTube" #: ../conduit/modules/iPodModule/config.glade.h:2 msgid "gtk-delete" msgstr "gtk-delete" #: ../conduit/modules/iPodModule/config.glade.h:3 msgid "iPod Photos" msgstr "תמונות iPod" #. Translators: Format string used to describe the acceptable formats the #. device accepts. The first arg is replaced with DEFAULT_FOLDER and the second #. arg is a comma seperated list of encodings #: ../conduit/modules/N800Module/N800Module.py:58 #, python-format msgid "%s Format (%s)" msgstr "" #. Signifies that a conversion should not take place #: ../conduit/modules/N800Module/N800Module.py:60 msgid "unchanged" msgstr "ללא שינוי" #: ../conduit/modules/N800Module/N800Module.py:118 msgid "N800 Files" msgstr "קבצי N800" #: ../conduit/modules/N800Module/N800Module.py:119 msgid "Synchronizes files/folders to a N800 device" msgstr "סנכרן קבצים/תיקיות להתקן N800" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:124 msgid "Backups" msgstr "גיבויים" #: ../conduit/modules/N800Module/N800Module.py:139 msgid "N800 Music" msgstr "מוזיקת N800" #: ../conduit/modules/N800Module/N800Module.py:140 msgid "Synchronizes music to a N800 device" msgstr "סנכרן מוזיקה להתקן N800" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:146 msgid "Music" msgstr "מוזיקה" #: ../conduit/modules/N800Module/N800Module.py:163 msgid "N800 Videos" msgstr "" #: ../conduit/modules/N800Module/N800Module.py:164 #: ../conduit/modules/N800Module/N800Module.py:188 msgid "Synchronizes video to a N800 device" msgstr "" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:170 msgid "Video" msgstr "וידאו" #: ../conduit/modules/N800Module/N800Module.py:187 msgid "N800 Photos" msgstr "תמונות N800" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:194 msgid "Photo" msgstr "תמונה" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "רשת" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:37 msgid "Rhythmbox Music" msgstr "מוזיקת Rhymbox" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:38 msgid "Sync songs from your Rhythmbox playlists" msgstr "" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:57 msgid "Unknown" msgstr "לא ידוע" #: ../conduit/modules/RhythmboxModule/config.glade.h:1 msgid "Synchronize the Following Playlists" msgstr "" #: ../conduit/modules/RhythmboxModule/config.glade.h:2 msgid "Rhythmbox Playlists" msgstr "רשימות השמעה של Rhythmbox" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:5 msgid "Shutterfly" msgstr "‏Shutterfly" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 msgid "Sync your Shutterfly photos" msgstr "סנכרן את תמונות ה-Shutterfly שלך" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "%Y-%m-%d %H:%M:%S" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 #: ../conduit/modules/SmugMugModule/config.glade.h:6 msgid "SmugMug" msgstr "‏SmugMug" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 msgid "Sync your SmugMug.com photos" msgstr "סנכרן את תמונות ה-SmugMug.com שלך" conduit-0.3.17/po/vi.po0000644000175000017500000006642111172176633011604 00000000000000# Vietnamese translation for Conduit. # Copyright © 2008 GNOME i18n Project for Vietnamese. # Clytie Siddall , 2008. # msgid "" msgstr "" "Project-Id-Version: conduit GNOME TRUNK\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-06-07 07:56+0000\n" "PO-Revision-Date: 2008-06-15 22:14+0930\n" "Last-Translator: Clytie Siddall \n" "Language-Team: Vietnamese \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" #: ../data/conduit.desktop.in.in.h:1 #: ../data/conduit-autostart.desktop.in.in.h:2 msgid "Conduit Synchronizer" msgstr "Bộ đồng bộ hoá ống dẫn Conduit" #: ../data/conduit.desktop.in.in.h:2 #: ../data/conduit-autostart.desktop.in.in.h:3 msgid "Synchronization for GNOME" msgstr "Chức năng đồng bộ hoá cho GNOME" #. Translators: Translate this in derived classes. #: ../data/conduit-autostart.desktop.in.in.h:1 #: ../conduit/modules/N800Module/N800Module.py:54 msgid "Conduit" msgstr "Ống dẫn" #: ../data/conduit.glade.h:1 msgid "Default Synchronization Options" msgstr "Tùy chọn Đồng bộ hoá Mặc định" #: ../data/conduit.glade.h:2 msgid "General" msgstr "Chung" #: ../data/conduit.glade.h:3 msgid "Always Up To Date" msgstr "Luôn luôn hiện thời" #: ../data/conduit.glade.h:4 msgid "Ask Me What to Do" msgstr "Nhắc nhở" #: ../data/conduit.glade.h:5 msgid "Ask me what to do" msgstr "Nhắc nhở" #: ../data/conduit.glade.h:6 msgid "Cancel Synchronization" msgstr "Thôi đồng bộ hoá" #: ../data/conduit.glade.h:7 msgid "Cancel currently synchronizing groups" msgstr "Thôi bất cứ nhóm nào đang đồng bộ hoá" #: ../data/conduit.glade.h:8 msgid "Clear Canvas" msgstr "Xoá vùng vẽ" #: ../data/conduit.glade.h:9 msgid "Compare" msgstr "So sánh" #: ../data/conduit.glade.h:10 msgid "Conduit Properties" msgstr "Thuộc tính ống dẫn" #: ../data/conduit.glade.h:11 msgid "Configuration" msgstr "Cấu hình" #: ../data/conduit.glade.h:12 msgid "Configure Item" msgstr "Cấu hình mục" #: ../data/conduit.glade.h:13 msgid "Configure the synchronization settings for this item" msgstr "Cấu hình thiết lập đồng bộ hoá cho mục này" #: ../data/conduit.glade.h:14 msgid "Conflict Options" msgstr "Tùy chọn xung đột" #: ../data/conduit.glade.h:15 msgid "Conflicts" msgstr "Xung đột" #: ../data/conduit.glade.h:16 msgid "Contents" msgstr "Nội dung" #: ../data/conduit.glade.h:17 msgid "Data Conversions" msgstr "Chuyển đổi dữ liệu" #: ../data/conduit.glade.h:18 msgid "Data Providers" msgstr "Cung cấp dữ liệu" #: ../data/conduit.glade.h:19 msgid "Delete Group" msgstr "Xoá nhóm" #: ../data/conduit.glade.h:20 msgid "Delete Item" msgstr "Xoá mục" #: ../data/conduit.glade.h:21 msgid "Delete Options" msgstr "Tùy chọn xoá" #: ../data/conduit.glade.h:22 msgid "Delete from the corresponding sink" msgstr "Xoá khỏi ổ chìm tượng ứng" #: ../data/conduit.glade.h:23 msgid "Delete the Corresponding Item" msgstr "Xoá mục tương ứng" #: ../data/conduit.glade.h:24 msgid "Editor" msgstr "Bộ soạn thảo" #: ../data/conduit.glade.h:25 msgid "Minimize to notification area" msgstr "Thu nhỏ vào vùng thông báo" #: ../data/conduit.glade.h:26 msgid "Refresh Group" msgstr "Cập nhật nhóm" #: ../data/conduit.glade.h:27 msgid "Refresh Item" msgstr "Cập nhật mục" #: ../data/conduit.glade.h:28 msgid "Replace the Older Item" msgstr "Thay thế mục cũ" #: ../data/conduit.glade.h:29 msgid "Replace the older item" msgstr "Thay thế mục cũ" #: ../data/conduit.glade.h:30 msgid "Resolve Conflicts" msgstr "Giải quyết sự xung đột" #: ../data/conduit.glade.h:31 msgid "Save settings on exit" msgstr "Lưu thiết lập khi thoát" #: ../data/conduit.glade.h:32 msgid "Show status icon" msgstr "Hiện biểu tượng trạng thái" #: ../data/conduit.glade.h:33 msgid "Skip" msgstr "Bỏ qua" #: ../data/conduit.glade.h:34 msgid "Slow Sync" msgstr "Đồng bộ hoá chậm" #: ../data/conduit.glade.h:35 msgid "Sync Options" msgstr "Tùy chọn đồng bộ hoá" #: ../data/conduit.glade.h:36 msgid "Synchronize All" msgstr "Đồng bộ hoá tất cả" #: ../data/conduit.glade.h:37 msgid "Synchronize Group" msgstr "Đồng bộ hoá nhóm" #: ../data/conduit.glade.h:38 msgid "Synchronize group" msgstr "Đồng bộ hoá nhóm" #: ../data/conduit.glade.h:39 msgid "Synchronizes all groups" msgstr "Đồng bộ hoá tất cả các nhóm" #: ../data/conduit.glade.h:40 msgid "Title" msgstr "Tựa đề" #: ../data/conduit.glade.h:41 msgid "Two Way Sync" msgstr "Đồng bộ hoá hai chiều" #: ../data/conduit.glade.h:42 msgid "Use built in Web browser" msgstr "Dùng trình duyệt Web có sẵn" #: ../data/conduit.glade.h:43 msgid "When an item has been deleted:" msgstr "Khi một mục đã bị xoá:" #: ../data/conduit.glade.h:44 msgid "When an item is deleted..." msgstr "Khi một mục bị xoá..." #: ../data/conduit.glade.h:45 msgid "When there is a conflict..." msgstr "Khi gặp sự xung đột..." #: ../data/conduit.glade.h:46 msgid "When there is a two way conflict:" msgstr "Khi gặp sự xung đột hai chiều :" #: ../data/conduit.glade.h:47 msgid "_Edit" msgstr "_Sửa" #: ../data/conduit.glade.h:48 msgid "_File" msgstr "_Tập tin" #: ../data/conduit.glade.h:49 msgid "_Help" msgstr "Trợ g_iúp" #: ../conduit/gtkui/Canvas.py:65 msgid "Drag a Data Provider here to continue" msgstr "Kéo một bộ cung cấp dữ liệu vào đây để tiếp tục" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:82 msgid "Source" msgstr "Nguồn" #: ../conduit/gtkui/ConflictResolver.py:96 msgid "Resolution" msgstr "Độ phân giải" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:101 msgid "Sink" msgstr "Ổ chìm" #: ../conduit/gtkui/ConflictResolver.py:165 #: ../conduit/gtkui/ConflictResolver.py:166 #, python-format msgid "Conflicts (%s)" msgstr "Xung đột (%s)" #. Build some liststores to display #: ../conduit/gtkui/UI.py:235 msgid "Convert from" msgstr "Chuyển đổi từ" #: ../conduit/gtkui/UI.py:236 msgid "into" msgstr "sang" #: ../conduit/gtkui/UI.py:291 msgid "Conversions Available" msgstr "Chuyển đổi có thể" #: ../conduit/gtkui/UI.py:297 ../conduit/gtkui/Tree.py:349 #: ../conduit/modules/FileModule/FileConfiguration.py:104 msgid "Name" msgstr "Tên" #: ../conduit/gtkui/UI.py:301 msgid "Loaded" msgstr "Đã nạp" #: ../conduit/gtkui/UI.py:399 ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "Đang đồng bố hoá. Bạn có muốn hủy bỏ không?" #: ../conduit/gtkui/UI.py:556 msgid "_Synchronize All" msgstr "Đồng bộ hoá _tất cả" #: ../conduit/gtkui/UI.py:556 msgid "Synchronizes All Groups" msgstr "Đồng bộ hoá mọi nhóm" #: ../conduit/gtkui/UI.py:557 msgid "_Cancel Synchronization" msgstr "T_hôi đồng bộ hoá" #: ../conduit/gtkui/UI.py:557 msgid "Cancels Currently Synchronizing Groups" msgstr "Thôi các tiến trình đồng bộ hoá nhóm đang chạy" #: ../conduit/gtkui/UI.py:558 msgid "_Quit" msgstr "T_hoát" #: ../conduit/gtkui/UI.py:558 msgid "Close Conduit" msgstr "Đóng ống dẫn" #: ../conduit/gtkui/UI.py:559 msgid "_About" msgstr "_Giới thiệu" #: ../conduit/gtkui/UI.py:559 msgid "About Conduit" msgstr "Giới thiệu ống dẫn" #: ../conduit/gtkui/UI.py:599 msgid "Synchronization Error" msgstr "Lỗi đồng bộ hoá" #: ../conduit/gtkui/UI.py:602 msgid "Synchronization Complete" msgstr "Đồng bộ hoá hoàn thành" #: ../conduit/gtkui/UI.py:618 msgid "Synchronizing" msgstr "Đang đồng bộ hoá" #: ../conduit/gtkui/Tree.py:358 msgid "Description" msgstr "Mô tả" #: ../conduit/dataproviders/DataProvider.py:19 msgid "Ready" msgstr "Sẵn sàng" #: ../conduit/dataproviders/DataProvider.py:20 msgid "New data to sync" msgstr "Dữ liệu mới cần đồng bộ hoá" #: ../conduit/dataproviders/DataProvider.py:21 msgid "Refreshing..." msgstr "Đang cập nhật..." #: ../conduit/dataproviders/DataProvider.py:22 msgid "Refreshed OK" msgstr "Cập nhật thành công" #: ../conduit/dataproviders/DataProvider.py:23 msgid "Error Refreshing" msgstr "Lỗi cập nhật" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Synchronizing..." msgstr "Đang đồng bộ hoá..." #: ../conduit/dataproviders/DataProvider.py:25 msgid "Synchronized OK" msgstr "Hai bên đồng bộ" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Synchronizing" msgstr "Lỗi đồng bộ hoá" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronization Skipped" msgstr "Đồng bộ hoá bị bỏ qua" #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronization Cancelled" msgstr "Đồng bộ hoá bị bỏ thôi" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Synchronization Conflict" msgstr "Đồng bộ hoá bị xung đột" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Not Configured Correctly" msgstr "Sai cấu hình" #: ../conduit/modules/BackpackModule/BackpackModule.py:55 msgid "Backpack Notes" msgstr "Ghi chú Backpack" #: ../conduit/modules/BackpackModule/BackpackModule.py:56 msgid "Store things in Backpack Notes" msgstr "Lưu gì vào ghi chú Backpack" #: ../conduit/modules/BackpackModule/config.glade.h:1 #: ../conduit/modules/FlickrModule/config.glade.h:1 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:1 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:1 #: ../conduit/modules/GoogleModule/youtube-config.glade.h:1 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:1 #: ../conduit/modules/SmugMugModule/config.glade.h:1 #: ../conduit/modules/ZotoModule/zoto.glade.h:1 msgid "Account Details" msgstr "Chi tiết tài khoản" #: ../conduit/modules/BackpackModule/config.glade.h:2 msgid "Saved Note Settings" msgstr "Thiết lập ghi chú đã lưu" #: ../conduit/modules/BackpackModule/config.glade.h:3 msgid "API key:" msgstr "Khoá API:" #: ../conduit/modules/BackpackModule/config.glade.h:4 msgid "Backpack" msgstr "Backpack" #: ../conduit/modules/BackpackModule/config.glade.h:5 msgid "Save notes in page:" msgstr "Lưu ghi chú trên trang:" #: ../conduit/modules/BackpackModule/config.glade.h:6 #: ../conduit/modules/FlickrModule/config.glade.h:8 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:8 #: ../conduit/modules/GoogleModule/youtube-config.glade.h:9 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:6 #: ../conduit/modules/SmugMugModule/config.glade.h:7 #: ../conduit/modules/ZotoModule/zoto.glade.h:5 msgid "Username:" msgstr "Tên người dùng:" #: ../conduit/modules/BansheeModule/BansheeModule.py:30 msgid "Banshee Playlists" msgstr "Danh mục nhạc Banshee" #: ../conduit/modules/BansheeModule/BansheeModule.py:31 msgid "Sync your Banshee playlists" msgstr "Đồng bố hoá danh mục nhạc Banshee" #. column 1 is the tag name #: ../conduit/modules/BansheeModule/BansheeModule.py:137 #: ../conduit/modules/FspotModule/FspotModule.py:245 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:129 msgid "Tag Name" msgstr "Tên thẻ" #: ../conduit/modules/BansheeModule/BansheeModule.py:145 #: ../conduit/modules/FspotModule/FspotModule.py:253 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:137 msgid "Enabled" msgstr "Đã bật" #: ../conduit/modules/BansheeModule/config.glade.h:1 msgid "Return Playlists" msgstr "Trả về danh mục nhạc" #: ../conduit/modules/BansheeModule/config.glade.h:2 msgid "Banshee" msgstr "Banshee" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 #: ../conduit/modules/BoxDotNetModule/config.glade.h:1 msgid "Box.net" msgstr "Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 msgid "Sync your Box.net files" msgstr "Đồng bố hoá tập tin Box.net" #: ../conduit/modules/BoxDotNetModule/config.glade.h:2 msgid "Folder:" msgstr "Thư mục:" #: ../conduit/modules/BoxDotNetModule/config.glade.h:3 #: ../conduit/modules/FlickrModule/config.glade.h:4 msgid "Load" msgstr "Nạp" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:107 #, python-format msgid "Select %s:" msgstr "Chọn %s:" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:146 msgid "Evolution Contacts" msgstr "Liên lạc Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:147 msgid "Sync your contacts" msgstr "Đồng bố hoá liên lạc" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:198 msgid "Evolution Calendar" msgstr "Lịch Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:199 msgid "Sync your calendar" msgstr "Đồng bố hoá lịch" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:256 msgid "Evolution Tasks" msgstr "Tác vụ Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:257 msgid "Sync your tasks" msgstr "Đồng bố hoá tác vụ" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:313 msgid "Evolution Memos" msgstr "Ghi nhớ Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:314 msgid "Sync your memos" msgstr "Đồng bộ hoá ghi nhớ" #: ../conduit/modules/EvolutionModule/config.glade.h:1 msgid "Addressbook:" msgstr "Sổ địa chỉ:" #: ../conduit/modules/EvolutionModule/config.glade.h:2 msgid "Evolution" msgstr "Evolution" #: ../conduit/modules/FacebookModule/FacebookModule.py:37 msgid "Facebook" msgstr "Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 msgid "Sync your Facebook photos" msgstr "Đồng bố hoá ảnh chụp Facebook" #: ../conduit/modules/FeedModule/FeedModule.py:30 #: ../conduit/modules/FeedModule/config.glade.h:9 msgid "RSS Feed" msgstr "Nguồn tin RSS" #: ../conduit/modules/FeedModule/FeedModule.py:31 msgid "Sync data from RSS enclosures" msgstr "Đồng bố hoá dữ liệu từ gói RSS" #: ../conduit/modules/FeedModule/config.glade.h:1 msgid "Enclosure Settings" msgstr "Thiết lập gói" #: ../conduit/modules/FeedModule/config.glade.h:2 msgid "Feed Details" msgstr "Chi tiết nguồn tin" #: ../conduit/modules/FeedModule/config.glade.h:3 msgid "Download Audio Files" msgstr "Tải về tập tin âm thanh" #: ../conduit/modules/FeedModule/config.glade.h:4 msgid "Download Photos" msgstr "Tải về ảnh chụp" #: ../conduit/modules/FeedModule/config.glade.h:5 msgid "Download Video Files" msgstr "Tải về tập tin phim" #: ../conduit/modules/FeedModule/config.glade.h:6 msgid "Feed Address:" msgstr "Địa chỉ nguồn tin:" #: ../conduit/modules/FeedModule/config.glade.h:7 msgid "" "Limit the Number of\n" "Enclosures Downloaded to:" msgstr "" "Giới hạn số gói\n" "được tải về:" #: ../conduit/modules/FileModule/FileConfiguration.py:98 msgid "Icon" msgstr "Biểu tượng" #: ../conduit/modules/FileModule/FileConfiguration.py:110 msgid "Items" msgstr "Mục" #: ../conduit/modules/FileModule/FileConfiguration.py:136 #, python-format msgid "Contains %s files" msgstr "Chứa tập tin %s" #: ../conduit/modules/FileModule/FileConfiguration.py:226 msgid "Include file..." msgstr "Bao gồm tập tin..." #: ../conduit/modules/FileModule/FileConfiguration.py:236 msgid "All files" msgstr "Mọi tập tin" #: ../conduit/modules/FileModule/FileConfiguration.py:251 msgid "Include folder..." msgstr "Bao gồm thư mục..." #: ../conduit/modules/FileModule/FileConfiguration.py:296 msgid "Please Name All Folders" msgstr "Đặt tên mọi thư mục" #: ../conduit/modules/FileModule/FileConfiguration.py:297 msgid "" "All folders require a descriptive name. To name a folder simply click on it" msgstr "" "Mọi thư mục đều cần một tên diễn tả. Để đặt tên của một thư mục, đơn giản " "hãy nhấn vào nó." #: ../conduit/modules/FileModule/FileConfiguration.py:341 msgid "Please Enter a Folder Name" msgstr "Hãy nhập một tên thư mục" #: ../conduit/modules/FileModule/FileConfiguration.py:342 msgid "" "All folders require a descriptive name. To name a folder enter its name " "where indicated" msgstr "" "Mọi thư mục đều cần một tên diễn tả. Để đặt tên của một thư mục, đơn giản " "hãy nhập tên vào nơi được ngụ ý." #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "Tập tin" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "Nguồn để đồng bộ hoá nhiều tập tin" #: ../conduit/modules/FileModule/FileModule.py:62 msgid "Folder" msgstr "Thư mục" #: ../conduit/modules/FileModule/FileModule.py:63 msgid "Synchronize folders" msgstr "Đồng bộ hoá thư mục" #: ../conduit/modules/FileModule/config.glade.h:1 msgid "Items to Synchronize" msgstr "Mục cần đồng bộ hoá" #: ../conduit/modules/FileModule/config.glade.h:2 msgid "Add Directory" msgstr "Thêm thư mục" #: ../conduit/modules/FileModule/config.glade.h:3 msgid "Add File" msgstr "Thêm tập tin" #: ../conduit/modules/FileModule/config.glade.h:4 msgid "Advanced" msgstr "Cấp cao" #: ../conduit/modules/FileModule/config.glade.h:5 msgid "File Configuration" msgstr "Cấu hình tập tin" #: ../conduit/modules/FileModule/config.glade.h:6 msgid "Folder Configuration" msgstr "Cấu hình thư mục" #: ../conduit/modules/FileModule/config.glade.h:7 msgid "Folder Location:" msgstr "Vị trí thư mục:" #: ../conduit/modules/FileModule/config.glade.h:8 msgid "Folder Name:" msgstr "Tên thư mục:" #: ../conduit/modules/FileModule/config.glade.h:9 msgid "Follow Symbolic Links" msgstr "Theo liên kết mềm" #: ../conduit/modules/FileModule/config.glade.h:10 msgid "Ignore File Modification Times" msgstr "Bỏ qua giờ sửa đổi tập tin" #: ../conduit/modules/FileModule/config.glade.h:11 msgid "Include Hidden Files" msgstr "Bao gồm tập tin ẩn" #: ../conduit/modules/FileModule/config.glade.h:12 msgid "Select A Folder" msgstr "Chọn thư mục" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 #: ../conduit/modules/FlickrModule/config.glade.h:3 msgid "Flickr" msgstr "Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 msgid "Sync your Flickr.com photos" msgstr "Đồng bộ hoá ảnh chụp Flickr" #: ../conduit/modules/FlickrModule/config.glade.h:2 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:2 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:2 #: ../conduit/modules/SmugMugModule/config.glade.h:2 #: ../conduit/modules/ZotoModule/zoto.glade.h:2 msgid "Saved Photo Settings" msgstr "Thiết lập ảnh chụp đã lưu" #: ../conduit/modules/FlickrModule/config.glade.h:5 msgid "Photos are public" msgstr "Ảnh chụp công bố" #: ../conduit/modules/FlickrModule/config.glade.h:6 msgid "Photoset Name:" msgstr "Tên tập ảnh chụp:" #: ../conduit/modules/FlickrModule/config.glade.h:7 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:7 #: ../conduit/modules/SmugMugModule/config.glade.h:5 msgid "Resize Photos:" msgstr "Đổi cỡ ảnh chụp:" #: ../conduit/modules/FspotModule/FspotModule.py:25 #: ../conduit/modules/FspotModule/config.glade.h:3 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 msgid "Sync your F-Spot photos" msgstr "Đồng bộ hoá ảnh chụp F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:126 msgid "F-Spot DBus interface is operating in read only mode" msgstr "Giao diện DBus F-Spot đang chạy ở chế đô chỉ đọc" #: ../conduit/modules/FspotModule/config.glade.h:1 msgid "Return Photos Tagged With" msgstr "Trả về ảnh chụp có thẻ" #: ../conduit/modules/FspotModule/config.glade.h:2 msgid "Create Tags: " msgstr "Tạo thẻ:" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "GConf Settings" msgstr "Thiết lập GConf" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Sync your desktop preferences" msgstr "Đồng bộ hoá tùy thích môi trường" #: ../conduit/modules/GoogleModule/GoogleModule.py:368 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:4 msgid "Google Calendar" msgstr "Lịch Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:369 msgid "Sync your Google Calendar" msgstr "Đồng bộ hoá Lịch Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:554 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:6 msgid "Picasa" msgstr "Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:555 msgid "Sync your Google Picasa photos" msgstr "Đồng bộ hoá ảnh chụp Picasa Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:772 msgid "Google Contacts" msgstr "Liên lạc Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:773 msgid "Sync your Gmail contacts" msgstr "Đồng bộ hoá liên lạc GMail" #: ../conduit/modules/GoogleModule/GoogleModule.py:1028 msgid "Google Documents" msgstr "Tài liệu Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:1029 msgid "Sync your Google Documents" msgstr "Đồng bộ hoá Tài liệu Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:1309 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:57 msgid "Unknown" msgstr "Không rõ" #: ../conduit/modules/GoogleModule/GoogleModule.py:1310 msgid "miscellaneous" msgstr "linh tinh" #: ../conduit/modules/GoogleModule/GoogleModule.py:1311 msgid "No description." msgstr "Không mô tả" #: ../conduit/modules/GoogleModule/GoogleModule.py:1320 msgid "YouTube" msgstr "YouTube" #: ../conduit/modules/GoogleModule/GoogleModule.py:1321 msgid "Sync data from YouTube" msgstr "Đồng bộ hoá dữ liệu từ YouTube" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:2 msgid "Calendar:" msgstr "Lịch:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:3 msgid "Email:" msgstr "Thư :" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:5 msgid "Load Calendars" msgstr "Nạp lịch" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:6 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:5 #: ../conduit/modules/GoogleModule/youtube-config.glade.h:6 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:4 #: ../conduit/modules/SmugMugModule/config.glade.h:4 #: ../conduit/modules/ZotoModule/zoto.glade.h:4 msgid "Password:" msgstr "Mật khẩu :" #: ../conduit/modules/GoogleModule/picasa-config.glade.h:3 #: ../conduit/modules/iPodModule/config.glade.h:1 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:3 #: ../conduit/modules/SmugMugModule/config.glade.h:3 #: ../conduit/modules/ZotoModule/zoto.glade.h:3 msgid "Album:" msgstr "Tập:" #: ../conduit/modules/GoogleModule/picasa-config.glade.h:4 msgid "Login" msgstr "Đăng nhập" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:2 msgid "Download Videos" msgstr "Tải về phim" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:3 msgid "Favorites of above user" msgstr "Ưa thích của người dùng trên" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:4 msgid "Max retrieved videos (0 is unlimited):" msgstr "Số tối đa phim trả về (0 thì vô hạn):" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:5 msgid "Most viewed" msgstr "Xem nhất" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:7 msgid "Top rated" msgstr "Đánh giá cao nhất" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:8 msgid "Uploaded by above user" msgstr "Tải lên bởi người dùng trên" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:10 msgid "YouTube Source" msgstr "Nguồn YouTube" #: ../conduit/modules/iPodModule/config.glade.h:2 msgid "iPod Photos" msgstr "Ảnh chụp iPod" #. Translators: Format string used to describe the acceptable formats the #. device accepts. The first arg is replaced with DEFAULT_FOLDER and the second #. arg is a comma seperated list of encodings #: ../conduit/modules/N800Module/N800Module.py:58 #, python-format msgid "%s Format (%s)" msgstr "Định dạng %s (%s)" #. Signifies that a conversion should not take place #: ../conduit/modules/N800Module/N800Module.py:60 msgid "unchanged" msgstr "chưa đổi" #: ../conduit/modules/N800Module/N800Module.py:119 msgid "N800 Files" msgstr "Tập tin N800" #: ../conduit/modules/N800Module/N800Module.py:120 msgid "Synchronizes files/folders to a N800 device" msgstr "Đồng bộ hoá các tập tin/thư mục vào một thiết bị N800" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:125 msgid "Backups" msgstr "Sao lưu" #: ../conduit/modules/N800Module/N800Module.py:140 msgid "N800 Music" msgstr "Nhạc N800" #: ../conduit/modules/N800Module/N800Module.py:141 msgid "Synchronizes music to a N800 device" msgstr "Đồng bộ hoá âm nhạc vào một thiết bị N800" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:147 msgid "Music" msgstr "Nhạc" #: ../conduit/modules/N800Module/N800Module.py:164 msgid "N800 Videos" msgstr "Phim N800" #: ../conduit/modules/N800Module/N800Module.py:165 #: ../conduit/modules/N800Module/N800Module.py:189 msgid "Synchronizes video to a N800 device" msgstr "Đồng bộ hoá phim vào một thiết bị N800" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:171 msgid "Video" msgstr "Phim" #: ../conduit/modules/N800Module/N800Module.py:188 msgid "N800 Photos" msgstr "Ảnh chụp N800" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:195 msgid "Photo" msgstr "Ảnh chụp" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "Mạng" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "Bật đồng bộ hoá qua mạng" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:37 msgid "Rhythmbox Music" msgstr "Nhạc Rhythmbox" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:38 msgid "Sync songs from your Rhythmbox playlists" msgstr "Đồng bộ hoá bài hát từ các danh mục nhạc Rhythmbox" #: ../conduit/modules/RhythmboxModule/config.glade.h:1 msgid "Synchronize the Following Playlists" msgstr "Đồng bộ hoá các danh mục nhạc theo đây" #: ../conduit/modules/RhythmboxModule/config.glade.h:2 msgid "Rhythmbox Playlists" msgstr "Danh mục nhạc Rhythmbox" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:5 msgid "Shutterfly" msgstr "Shutterfly" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 msgid "Sync your Shutterfly photos" msgstr "Đồng bộ hoá ảnh chụp Shutterfly" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "%Y-%m-%d %H:%M:%S" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 #: ../conduit/modules/SmugMugModule/config.glade.h:6 msgid "SmugMug" msgstr "SmugMug" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 msgid "Sync your SmugMug.com photos" msgstr "Đồng bộ hoá ảnh chụp SmugMug.com" #: ../conduit/modules/ZotoModule/ZotoModule.py:121 #: ../conduit/modules/ZotoModule/zoto.glade.h:6 msgid "Zoto" msgstr "Zoto" #: ../conduit/modules/ZotoModule/ZotoModule.py:122 msgid "Sync your Zoto photos" msgstr "Đồng bộ hoá ảnh chụp Zoto"conduit-0.3.17/po/fi.po0000644000175000017500000011072111321403566011547 00000000000000# Finnish messages for conduit # Copyright (C) 2008 Free Software Foundation, Inc. # Ilkka Tuohela 2008. # Timo Jyrinki 2008-2009. # # Huom: synkronisointi, ei synkronointi (lokalisointi.org) # msgid "" msgstr "" "Project-Id-Version: conduit\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-08-26 10:52+0300\n" "PO-Revision-Date: 2009-08-26 10:52+0300\n" "Last-Translator: Ilkka Tuohela \n" "Language-Team: Finnish \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" #: ../data/conduit.desktop.in.in.h:1 msgid "Conduit Synchronizer" msgstr "Conduit-synkronisointi" #: ../data/conduit.desktop.in.in.h:2 msgid "Synchronization for GNOME" msgstr "Synkronisointi Gnomelle" #: ../data/conduit.glade.h:1 msgid "Default Synchronization Options" msgstr "Synkronisoinnin oletusvalinnat" #: ../data/conduit.glade.h:2 msgid "General" msgstr "Yleiset" #: ../data/conduit.glade.h:3 msgid "Always Up-To-Date" msgstr "Aina ajan tasalla" #: ../data/conduit.glade.h:4 msgid "Ask Me What to Do" msgstr "Kysy, mitä tehdään" #: ../data/conduit.glade.h:5 msgid "Ask me what to do" msgstr "Kysy, mitä tehdään" #: ../data/conduit.glade.h:6 msgid "Cancel Synchronization" msgstr "Peru synkronisointi" #: ../data/conduit.glade.h:7 msgid "Cancel currently-synchronizing groups" msgstr "Peru tällä hetkellä synkronisoituvat ryhmät" #: ../data/conduit.glade.h:8 msgid "Clear Canvas" msgstr "Tyhjennä kangas" #: ../data/conduit.glade.h:9 msgid "Compare" msgstr "Vertaa" #: ../data/conduit.glade.h:10 msgid "Conduit Preferences" msgstr "Conduitin asetukset" #: ../data/conduit.glade.h:11 msgid "Configuration" msgstr "Asetukset" #: ../data/conduit.glade.h:12 msgid "Configure Item" msgstr "Kohdan asetukset" #: ../data/conduit.glade.h:13 msgid "Configure the synchronization settings for this item" msgstr "Määrittele tämän kohdan synkronisointiasetukset" #: ../data/conduit.glade.h:14 msgid "Conflict Options" msgstr "Ristiriitaiset valinnat" #: ../data/conduit.glade.h:15 msgid "Conflicts" msgstr "Ristiriidat" #: ../data/conduit.glade.h:16 msgid "Contents" msgstr "Sisältö" #: ../data/conduit.glade.h:17 msgid "Data Conversions" msgstr "Tietomuunnokset" #: ../data/conduit.glade.h:18 msgid "Data Providers" msgstr "Tiedon tarjoajat" #: ../data/conduit.glade.h:19 msgid "Delete Group" msgstr "Poista ryhmä" #: ../data/conduit.glade.h:20 msgid "Delete Item" msgstr "Poista kohta" #: ../data/conduit.glade.h:21 msgid "Delete Options" msgstr "Poiston valinnat" #: ../data/conduit.glade.h:22 msgid "Delete from the corresponding sink" msgstr "Poista vastaavasta kohteesta" #: ../data/conduit.glade.h:23 msgid "Delete the Corresponding Item" msgstr "Poista vastaava kohta" #: ../data/conduit.glade.h:24 msgid "Editor" msgstr "Muokkain" #: ../data/conduit.glade.h:25 msgid "Minimize to notification area" msgstr "Pienennä ilmoitusalueelle" #: ../data/conduit.glade.h:26 msgid "Refresh Group" msgstr "Virkistä ryhmä" #: ../data/conduit.glade.h:27 msgid "Refresh Item" msgstr "Virkistä kohta" #: ../data/conduit.glade.h:28 msgid "Replace the Older Item" msgstr "Korvaa vanhempi kohde" #: ../data/conduit.glade.h:29 msgid "Replace the older item" msgstr "Korvaa vanhempi kohde" #: ../data/conduit.glade.h:30 msgid "Resolve Conflicts" msgstr "Selvitä ristiriidat" #: ../data/conduit.glade.h:31 msgid "Save settings on exit" msgstr "Tallenna asetukset lopetettaessa" #: ../data/conduit.glade.h:32 msgid "Show Hints" msgstr "Näytä vihjeet" #: ../data/conduit.glade.h:33 msgid "Show status icon" msgstr "Näytä tilakuvake" #: ../data/conduit.glade.h:34 msgid "Skip" msgstr "Ohita" #: ../data/conduit.glade.h:35 msgid "Slow Synchronization" msgstr "Hidas synkronisointi" #: ../data/conduit.glade.h:36 msgid "Start Conduit at login" msgstr "Käynnistä Conduit kirjauduttaessa sisään" #: ../data/conduit.glade.h:37 msgid "Synchronization Options" msgstr "Synkronisoinnin valinnat" #: ../data/conduit.glade.h:38 msgid "Synchronize All" msgstr "Synkronisoi kaikki" #: ../data/conduit.glade.h:39 msgid "Synchronize Group" msgstr "Synkronisoi ryhmä" #: ../data/conduit.glade.h:40 msgid "Synchronize group" msgstr "Synkronisoi ryhmä" #: ../data/conduit.glade.h:41 msgid "Synchronizes all groups" msgstr "Synkronisoi kaikki ryhmät" #: ../data/conduit.glade.h:42 msgid "Title" msgstr "Otsikko" #: ../data/conduit.glade.h:43 msgid "Two-Way Synchronization" msgstr "Kaksisuuntainen synkronisointi" #: ../data/conduit.glade.h:44 msgid "When an item has been deleted:" msgstr "Kun kohde on poistettu:" #: ../data/conduit.glade.h:45 msgid "When an item is deleted..." msgstr "Kun kohde poistetaan..." #: ../data/conduit.glade.h:46 msgid "When there is a conflict..." msgstr "Kun on ristiriita..." #: ../data/conduit.glade.h:47 msgid "When there is a two-way conflict:" msgstr "Kun tapahtuu kaksisuuntainen ristiriita:" #: ../data/conduit.glade.h:48 msgid "_Edit" msgstr "_Muokkaa" #: ../data/conduit.glade.h:49 msgid "_File" msgstr "_Tiedosto" #: ../data/conduit.glade.h:50 msgid "_Help" msgstr "O_hje" #: ../conduit/Knowledge.py:8 msgid "What Do You Want to Synchronize?" msgstr "Mitä haluat synkronisoida?" #: ../conduit/Knowledge.py:9 msgid "Drag and Drop a Data Provider on the Canvas" msgstr "Raahaa tietolähde kankaalle" #: ../conduit/Knowledge.py:11 msgid "Synchronization Group Created" msgstr "Synkronisointiryhmä luotu" #: ../conduit/Knowledge.py:12 msgid "Add Another Data Provider to the Group to Synchronize it" msgstr "Raahaa toinen tietolähde ryhmään synkronisoidaksesi sen" #: ../conduit/Knowledge.py:14 msgid "You Are Now Ready to Synchronize" msgstr "Valmis synkronisointiin" #: ../conduit/Knowledge.py:15 msgid "Right Click on Group for Options" msgstr "Napsauta ryhmää hiiren oikealla painikkeella valintoja varten" #. source,sinc #comment #. twoway #: ../conduit/Knowledge.py:22 msgid "Synchronize Two Folders" msgstr "Synkronisoi kaksi kansiota" #: ../conduit/Knowledge.py:24 msgid "Backup Folder to Box.net" msgstr "Varmuuskopioi kansio Box.net:iin" #: ../conduit/Knowledge.py:26 msgid "Synchronize Tagged F-Spot Photos to Flickr" msgstr "Synkronisoi merkityt F-Spot-valokuvat Flickriin" #: ../conduit/Main.py:59 msgid "Conduit is a synchronization application." msgstr "Conduit on synkronisointisovellus." #: ../conduit/Main.py:63 #, python-format msgid "Launch without GUI. [default: %default]" msgstr "" #: ../conduit/Main.py:67 #, python-format msgid "Save dataprovider configuration to FILE. [default: %default]" msgstr "" #: ../conduit/Main.py:71 #, python-format msgid "Iconify on startup. [default: %default]" msgstr "" #: ../conduit/Main.py:75 #, python-format msgid "Run with the specified UI. [default: %default]" msgstr "" #: ../conduit/Main.py:79 msgid "Only load modules in the named files. [default: load all modules]" msgstr "" #: ../conduit/Main.py:83 msgid "Do not load modules in the named files. [default: load all modules]" msgstr "" #: ../conduit/Main.py:87 msgid "" "Explicitly set internal Conduit settings (keys) to the given values for this " "session. [default: do not set]" msgstr "" #: ../conduit/Main.py:91 #, python-format msgid "" "Enable loading of unfinished or unsupported dataproviders. [default: %" "default]" msgstr "" #: ../conduit/Main.py:95 #, python-format msgid "Generate more debugging information. [default: %default]" msgstr "" #: ../conduit/Main.py:99 #, python-format msgid "Generate less debugging information. [default: %default]" msgstr "" #: ../conduit/Main.py:103 #, python-format msgid "Generate no debugging information. [default: %default]" msgstr "" #: ../conduit/dataproviders/DataProvider.py:22 msgid "Ready" msgstr "Valmis" #: ../conduit/dataproviders/DataProvider.py:23 msgid "New data to sync" msgstr "Uusia synkronisoitavia tietoja" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Refreshing..." msgstr "Virkistetään..." #: ../conduit/dataproviders/DataProvider.py:25 msgid "Refreshed OK" msgstr "Virkistys onnistui" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Refreshing" msgstr "Virhe virkistettäessä" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronizing..." msgstr "Synkronisoidaan..." #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronized OK" msgstr "Synkronisointi onnistui" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Error Synchronizing" msgstr "Virhe synkronisoitaessa" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Synchronization Skipped" msgstr "Synkronisointi ohitettiin" #: ../conduit/dataproviders/DataProvider.py:31 msgid "Synchronization Cancelled" msgstr "Synkronisointi peruttiin" #: ../conduit/dataproviders/DataProvider.py:32 msgid "Synchronization Conflict" msgstr "Ristiriita synkronisoinnissa" #: ../conduit/dataproviders/DataProvider.py:33 msgid "Not Configured" msgstr "Asetuksia ei ole tehty" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "640x480" msgstr "640x480" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "800x600" msgstr "800x600" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "1024x768" msgstr "1024x768" #. Signifies that a conversion should not take place #: ../conduit/dataproviders/Image.py:35 #: ../conduit/modules/N800Module/N800Module.py:57 msgid "None" msgstr "Ei mitään" #. Default Categories for the DataProviders #: ../conduit/dataproviders/__init__.py:6 msgid "Files and Folders" msgstr "Tiedostot ja kansiot" #: ../conduit/dataproviders/__init__.py:7 #: ../conduit/modules/iPodModule/iPodModule.py:179 msgid "Notes" msgstr "Muistilaput" #: ../conduit/dataproviders/__init__.py:8 #: ../conduit/modules/iPodModule/iPodModule.py:367 msgid "Photos" msgstr "Valokuvat" #: ../conduit/dataproviders/__init__.py:9 msgid "Office" msgstr "Toimisto" #: ../conduit/dataproviders/__init__.py:10 msgid "Settings" msgstr "Asetukset" #: ../conduit/dataproviders/__init__.py:11 msgid "Miscellaneous" msgstr "Sekalaiset" #: ../conduit/dataproviders/__init__.py:12 msgid "Media" msgstr "Media" #: ../conduit/dataproviders/__init__.py:13 msgid "Bookmarks" msgstr "Kirjanmerkit" #: ../conduit/dataproviders/__init__.py:14 msgid "Test" msgstr "Testi" #: ../conduit/gtkui/Canvas.py:152 msgid "Drag a Data Provider here to continue" msgstr "Raahaa tietolähde tähän jatkaaksesi" #: ../conduit/gtkui/Canvas.py:217 msgid "Show me" msgstr "Näytä kohde" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:91 msgid "Source" msgstr "Lähde" #: ../conduit/gtkui/ConflictResolver.py:105 msgid "Resolution" msgstr "Tarkkuus" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:110 msgid "Sink" msgstr "Kohde" #: ../conduit/gtkui/ConflictResolver.py:150 #: ../conduit/gtkui/ConflictResolver.py:151 #, python-format msgid "Conflicts (%s)" msgstr "Ristiriidassa (%s)" #. name, #url #: ../conduit/gtkui/UI.py:33 msgid "Introduction" msgstr "Johdanto" #: ../conduit/gtkui/UI.py:34 msgid "Writing a Data Provider" msgstr "Tietolähteen kirjoittaminen" #: ../conduit/gtkui/UI.py:35 msgid "API Documentation" msgstr "API-dokumentaatio" #: ../conduit/gtkui/UI.py:36 msgid "Test Results" msgstr "Testitulokset" #: ../conduit/gtkui/UI.py:129 #, python-format msgid " - %s (Development Version)" msgstr " - %s (kehitysversio)" #: ../conduit/gtkui/UI.py:131 msgid " - Running Uninstalled" msgstr " - suoritetaan asentamattomana" #: ../conduit/gtkui/UI.py:165 msgid "Examples" msgstr "Esimerkit" #: ../conduit/gtkui/UI.py:177 msgid "Developers" msgstr "Kehittäjät" #. Build some liststores to display #: ../conduit/gtkui/UI.py:318 msgid "Convert from" msgstr "Muunna muodosta" #: ../conduit/gtkui/UI.py:319 msgid "into" msgstr "muotoon" #: ../conduit/gtkui/UI.py:370 msgid "Relationship Database" msgstr "Riippuvuussuhteiden tietokanta" #: ../conduit/gtkui/UI.py:374 msgid "Conversions Available" msgstr "Muunnoksia saatavilla" #: ../conduit/gtkui/UI.py:380 ../conduit/gtkui/Tree.py:348 #: ../conduit/modules/FileModule/FileConfiguration.py:117 msgid "Name" msgstr "Nimi" #: ../conduit/gtkui/UI.py:384 msgid "Loaded" msgstr "Ladattu" #: ../conduit/gtkui/UI.py:512 ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "Synkronisointi on käynnissä. Haluatko perua sen?" #: ../conduit/gtkui/UI.py:684 msgid "_Synchronize All" msgstr "_Synkronisoi kaikki" #: ../conduit/gtkui/UI.py:684 msgid "Synchronizes All Groups" msgstr "Synkronisoi kaikki ryhmät" #: ../conduit/gtkui/UI.py:685 msgid "_Cancel Synchronization" msgstr "_Peru synkronisointi" #: ../conduit/gtkui/UI.py:685 msgid "Cancels Currently Synchronizing Groups" msgstr "Peruu käynnissä olevat synkronisointiryhmät" #: ../conduit/gtkui/UI.py:686 msgid "_Quit" msgstr "_Lopeta" #: ../conduit/gtkui/UI.py:686 msgid "Close Conduit" msgstr "Sulje Conduit" #: ../conduit/gtkui/UI.py:726 msgid "Synchronization Error" msgstr "Synkronisointivirhe" #: ../conduit/gtkui/UI.py:729 msgid "Synchronization Complete" msgstr "Synkronisointi valmis" #: ../conduit/gtkui/UI.py:745 msgid "Synchronizing" msgstr "Synkronisoidaan" #: ../conduit/gtkui/Tree.py:357 msgid "Description" msgstr "Kuvaus" #: ../conduit/gtkui/ConfigItems.py:729 #, python-format msgid "Total: %d" msgstr "Yhteensä: %d" #: ../conduit/gtkui/WindowConfigurator.py:14 msgid "Configure" msgstr "Aseta" #: ../conduit/modules/BackpackModule/BackpackModule.py:58 msgid "Backpack Notes" msgstr "Backpack Notes" #: ../conduit/modules/BackpackModule/BackpackModule.py:59 msgid "Store things in Backpack Notes" msgstr "Tallenna asioita Backpack Notes -muistilappupalveluun" #: ../conduit/modules/BackpackModule/BackpackModule.py:105 #: ../conduit/modules/FlickrModule/FlickrModule.py:307 #: ../conduit/modules/ZotoModule/ZotoModule.py:243 msgid "Account details" msgstr "Tilin yksityiskohdat" #: ../conduit/modules/BackpackModule/BackpackModule.py:106 msgid "Login" msgstr "Käyttäjätunnus" #: ../conduit/modules/BackpackModule/BackpackModule.py:109 msgid "API key" msgstr "API-avain" #: ../conduit/modules/BackpackModule/BackpackModule.py:112 msgid "Saved notes" msgstr "Tallennetut muistilaput" #: ../conduit/modules/BackpackModule/BackpackModule.py:113 msgid "Save notes in page" msgstr "Tallenna muistilaput sivulle" #: ../conduit/modules/BansheeModule/BansheeModule.py:52 msgid "Banshee Playlists" msgstr "Banshee-soittolistat" #: ../conduit/modules/BansheeModule/BansheeModule.py:53 msgid "Synchronize your Banshee playlists" msgstr "Synkronisoi Banshee-soittolistat" #: ../conduit/modules/BansheeModule/BansheeModule.py:187 #: ../conduit/modules/BansheeModule/BansheeModule.py:188 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:116 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:117 msgid "Playlists" msgstr "Soittolistat" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 msgid "Box.net" msgstr "Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 msgid "Synchronize your Box.net files" msgstr "Synkronisoi Box.net-tiedostot" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:290 #: ../conduit/modules/FileModule/FileModule.py:82 msgid "Folder" msgstr "Kansio" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:291 msgid "Folder name" msgstr "Kansion nimi" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:295 msgid "Load folders" msgstr "Lataa kansiot" #: ../conduit/modules/ConverterModule.py:91 msgid "Note-" msgstr "Muistilappu-" #: ../conduit/modules/DesktopWallpaperModule.py:38 msgid "Wallpaper" msgstr "Taustakuva" #: ../conduit/modules/DesktopWallpaperModule.py:39 msgid "Changes your Desktop Wallpaper" msgstr "Vaihtaa työpöydän taustakuvan" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:107 #, python-format msgid "Select %s" msgstr "Valitse %s" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:127 msgid "Evolution Contacts" msgstr "Evolution-yhteystiedot" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:128 msgid "Synchronize your contacts" msgstr "Synkronisoi yhteystiedot" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:178 msgid "Evolution Calendar" msgstr "Evolution-kalenteri" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:179 msgid "Synchronize your calendar" msgstr "Synkronisoi kalenterit" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:240 msgid "Evolution Tasks" msgstr "Evolution-tehtävät" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:241 msgid "Synchronize your tasks" msgstr "Synkronisoi tehtävät" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:297 msgid "Evolution Memos" msgstr "Evolution-muistilaput" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:298 msgid "Synchronize your memos" msgstr "Synkronisoi muistilaput" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 msgid "Facebook" msgstr "Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:39 msgid "Synchronize your Facebook photos" msgstr "Synkronisoi Facebook-valokuvat" #: ../conduit/modules/FacebookModule/FacebookModule.py:124 #: ../conduit/modules/FlickrModule/FlickrModule.py:282 msgid "Loading album list..." msgstr "Avataan levyluetteloa..." #: ../conduit/modules/FacebookModule/FacebookModule.py:128 msgid "Failed to connect" msgstr "Yhdistäminen epäonnistui" #: ../conduit/modules/FacebookModule/FacebookModule.py:131 msgid "Logged in" msgstr "Kirjauduttiin sisään" #: ../conduit/modules/FacebookModule/FacebookModule.py:133 msgid "Failed to login" msgstr "Sisään kirjautuminen epäonnistui" #: ../conduit/modules/FacebookModule/FacebookModule.py:145 #: ../conduit/modules/FspotModule/FspotModule.py:243 msgid "Status" msgstr "Tila" #: ../conduit/modules/FacebookModule/FacebookModule.py:150 #: ../conduit/modules/iPodModule/iPodModule.py:461 #: ../conduit/modules/ZotoModule/ZotoModule.py:252 msgid "Album" msgstr "Levy" #: ../conduit/modules/FacebookModule/FacebookModule.py:151 msgid "Album name" msgstr "Levyn nimi" #: ../conduit/modules/FacebookModule/FacebookModule.py:156 msgid "Load albums" msgstr "Lataa levyt" #: ../conduit/modules/FeedModule/FeedModule.py:58 msgid "RSS Feed" msgstr "RSS-virta" #: ../conduit/modules/FeedModule/FeedModule.py:59 msgid "Synchronize data from RSS enclosures" msgstr "Synkronisoi tietoja RSS-liitteistä" #. FIXME: Add Randomize #: ../conduit/modules/FeedModule/FeedModule.py:114 msgid "Feed details" msgstr "Virran yksityiskohdat" #: ../conduit/modules/FeedModule/FeedModule.py:115 msgid "Feed address" msgstr "Virran osoite" #: ../conduit/modules/FeedModule/FeedModule.py:118 msgid "Enclosure settings" msgstr "Liiteasetukset" #: ../conduit/modules/FeedModule/FeedModule.py:119 msgid "Limit downloaded enclosures" msgstr "Rajoita ladattuja liitteitä" #: ../conduit/modules/FeedModule/FeedModule.py:125 msgid "Limit to" msgstr "Rajoita määrään" #: ../conduit/modules/FeedModule/FeedModule.py:129 msgid "Randomize enclosures" msgstr "Satunnaista liitteet" #: ../conduit/modules/FeedModule/FeedModule.py:133 msgid "Download types" msgstr "Noutotyypit" #: ../conduit/modules/FeedModule/FeedModule.py:134 msgid "Download audio files" msgstr "Nouda äänitiedostoja" #: ../conduit/modules/FeedModule/FeedModule.py:135 msgid "Download video files" msgstr "Nouda videotiedostoja" #: ../conduit/modules/FeedModule/FeedModule.py:136 msgid "Download photo files" msgstr "Nouda valokuvatiedostoja" #: ../conduit/modules/FileModule/FileConfiguration.py:111 msgid "Icon" msgstr "Kuvake" #: ../conduit/modules/FileModule/FileConfiguration.py:123 #: ../conduit/modules/GConfModule/GConfModule.py:138 msgid "Items" msgstr "Kohtia" #: ../conduit/modules/FileModule/FileConfiguration.py:149 #, python-format msgid "Contains %s files" msgstr "Sisältää %s tiedostoa" #: ../conduit/modules/FileModule/FileConfiguration.py:248 msgid "Include file..." msgstr "Sisällytä tiedosto..." #: ../conduit/modules/FileModule/FileConfiguration.py:258 msgid "All files" msgstr "Kaikki tiedostot" #: ../conduit/modules/FileModule/FileConfiguration.py:271 msgid "Include folder..." msgstr "Sisällytä kansio..." #: ../conduit/modules/FileModule/FileConfiguration.py:314 msgid "Please Name All Folders" msgstr "Nimeä kaikki kansiot" #: ../conduit/modules/FileModule/FileConfiguration.py:315 msgid "" "All folders require a descriptive name. To name a folder simply click on it" msgstr "" "Kaikilla kansioilla tulee olla kuvaava nimi. Nimeä kansio napsauttamalla sitä" #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "Tiedostot" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "Usean tiedoston synkronisointiin käytettävä lähde" #: ../conduit/modules/FileModule/FileModule.py:83 msgid "Synchronize folders" msgstr "Synkronisoi kansioita" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:40 msgid "Firefox 3 Bookmarks" msgstr "Firefox 3 -kirjanmerkit" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:41 msgid "Syncronize your Firefox 3 Bookmarks" msgstr "Synkronisoi Firefox 3 -kirjanmerkit" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:100 msgid "Firefox Profile" msgstr "Firefox-profiili" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 msgid "Flickr" msgstr "Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 msgid "Synchronize your Flickr.com photos" msgstr "Synkronisoi Flickr.com-valokuvat" #: ../conduit/modules/FlickrModule/FlickrModule.py:287 msgid "Failed to connect." msgstr "Yhdistäminen epäonnistui." #: ../conduit/modules/FlickrModule/FlickrModule.py:290 msgid "Album names loaded." msgstr "Levynimet avattiin." #: ../conduit/modules/FlickrModule/FlickrModule.py:292 msgid "Failed to login." msgstr "" #: ../conduit/modules/FlickrModule/FlickrModule.py:303 msgid "Logging in, please wait..." msgstr "Kirjaudutaan sisään, odota..." #: ../conduit/modules/FlickrModule/FlickrModule.py:308 #: ../conduit/modules/GoogleBookmarksModule.py:67 #: ../conduit/modules/ZotoModule/ZotoModule.py:244 msgid "Username" msgstr "Käyttäjätunnus" #: ../conduit/modules/FlickrModule/FlickrModule.py:318 msgid "Authenticate" msgstr "Todennus" #: ../conduit/modules/FlickrModule/FlickrModule.py:322 #: ../conduit/modules/ZotoModule/ZotoModule.py:251 msgid "Saved photo settings" msgstr "Tallennettujen valokuvien asetukset" #: ../conduit/modules/FlickrModule/FlickrModule.py:327 msgid "Resize photos" msgstr "Muuta valokuvien kokoa" #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "Do not resize" msgstr "Älä muuta kokoa" #: ../conduit/modules/FlickrModule/FlickrModule.py:331 msgid "Photos are public" msgstr "Valokuvat ovat julkisia" #: ../conduit/modules/FspotModule/FspotModule.py:25 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 msgid "Synchronize your F-Spot photos" msgstr "Synkronisoi F-Spot-valokuvat" #: ../conduit/modules/FspotModule/FspotModule.py:152 msgid "F-Spot DBus interface is operating in read-only mode" msgstr "F-Spotin DBus-käyttöliittymä toimii vain luku -tilassa" #: ../conduit/modules/FspotModule/FspotModule.py:218 msgid "F-Spot is running" msgstr "F-Spot on käynnissä" #: ../conduit/modules/FspotModule/FspotModule.py:219 msgid "Please start F-Spot or activate the D-Bus Extension" msgstr "Käynnistä F-Spot tai aktivoi D-Bus-laajennus" #: ../conduit/modules/FspotModule/FspotModule.py:244 msgid "Start F-Spot" msgstr "Käynnistä F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:248 #: ../conduit/modules/FspotModule/FspotModule.py:249 msgid "Tags" msgstr "Luokitukset" #: ../conduit/modules/FspotModule/FspotModule.py:262 msgid "Add tags" msgstr "Lisää luokituksia" #: ../conduit/modules/FspotModule/FspotModule.py:263 msgid "Tag name" msgstr "Luokituksen nimi" #: ../conduit/modules/FspotModule/FspotModule.py:266 msgid "Add tag" msgstr "Lisää luokitus" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "Application Settings" msgstr "Sovellusasetukset" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Synchronize your application settings" msgstr "Synkronisoi sovellusasetukset" #: ../conduit/modules/GConfModule/GConfModule.py:31 msgid "Metacity" msgstr "Metacity" #: ../conduit/modules/GConfModule/GConfModule.py:32 msgid "Nautilus" msgstr "Nautilus" #: ../conduit/modules/GConfModule/GConfModule.py:33 msgid "Preferred Applications" msgstr "Oletussovellukset" #: ../conduit/modules/GConfModule/GConfModule.py:34 msgid "Desktop Interface" msgstr "Työpöydän käyttöliittymä" #: ../conduit/modules/GConfModule/GConfModule.py:35 msgid "Gnome Terminal" msgstr "Gnomen pääte" #: ../conduit/modules/GConfModule/GConfModule.py:137 msgid "Applications to Synchronize" msgstr "Synkronisoitavat sovellukset" #: ../conduit/modules/GoogleBookmarksModule.py:19 msgid "Google Bookmarks" msgstr "Google-kirjanmerkit" #: ../conduit/modules/GoogleBookmarksModule.py:20 #, fuzzy msgid "Sync your Google Bookmarks" msgstr "Synkronisoi Google Documents -asiakirjat" #: ../conduit/modules/GoogleBookmarksModule.py:66 msgid "Login Details" msgstr "Sisäänkirjautumisen yksityiskohdat" #: ../conduit/modules/GoogleBookmarksModule.py:70 #: ../conduit/modules/ZotoModule/ZotoModule.py:247 msgid "Password" msgstr "Salasana" #: ../conduit/modules/GoogleModule/GoogleModule.py:399 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:4 msgid "Google Calendar" msgstr "Google-kalenteri" #: ../conduit/modules/GoogleModule/GoogleModule.py:400 msgid "Synchronize your Google Calendar" msgstr "Synkronisoi Google-kalenteri" #: ../conduit/modules/GoogleModule/GoogleModule.py:582 msgid "Picasa" msgstr "Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:583 msgid "Synchronize your Google Picasa photos" msgstr "Synkronisoi Google Picasa -valokuvat" #: ../conduit/modules/GoogleModule/GoogleModule.py:745 msgid "Google Contacts" msgstr "Google-yhteystiedot" #: ../conduit/modules/GoogleModule/GoogleModule.py:746 msgid "Synchronize your Google Mail contacts" msgstr "Synkronisoi Google Mail -yhteystiedot" #: ../conduit/modules/GoogleModule/GoogleModule.py:1076 msgid "Google Documents" msgstr "Google-asiakirjat" #: ../conduit/modules/GoogleModule/GoogleModule.py:1077 msgid "Synchronize your Google Documents" msgstr "Synkronisoi Google Documents -asiakirjat" #: ../conduit/modules/GoogleModule/GoogleModule.py:1322 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:69 msgid "Unknown" msgstr "Tuntematon" #: ../conduit/modules/GoogleModule/GoogleModule.py:1323 msgid "miscellaneous" msgstr "sekalaista" #: ../conduit/modules/GoogleModule/GoogleModule.py:1324 msgid "No description." msgstr "Ei kuvausta." #: ../conduit/modules/GoogleModule/GoogleModule.py:1333 msgid "YouTube" msgstr "YouTube" #: ../conduit/modules/GoogleModule/GoogleModule.py:1334 msgid "Synchronize data from YouTube" msgstr "Synkronisoi tietoja YouTubesta" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:1 msgid "Account Details" msgstr "Tilin yksityiskohdat" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:2 msgid "Calendar:" msgstr "Kalenteri:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:3 msgid "Email:" msgstr "Sähköposti:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:5 msgid "Load Calendars" msgstr "Lataa kalenterit" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:6 msgid "Password:" msgstr "Salasana:" #: ../conduit/modules/iPodModule/iPodModule.py:180 #, fuzzy msgid "Synchronize your iPod notes" msgstr "Synkronisoi yhteystiedot" #: ../conduit/modules/iPodModule/iPodModule.py:295 #: ../conduit/modules/SynceModule.py:311 msgid "Contacts" msgstr "Yhteystiedot" #: ../conduit/modules/iPodModule/iPodModule.py:296 #, fuzzy msgid "Synchronize your iPod contacts" msgstr "Synkronisoi yhteystiedot" #: ../conduit/modules/iPodModule/iPodModule.py:331 #: ../conduit/modules/SynceModule.py:449 msgid "Calendar" msgstr "Kalenteri" #: ../conduit/modules/iPodModule/iPodModule.py:332 #, fuzzy msgid "Synchronize your iPod calendar" msgstr "Synkronisoi kalenterit" #: ../conduit/modules/iPodModule/iPodModule.py:368 #, fuzzy msgid "Synchronize your iPod photos" msgstr "Synkronisoi Zoto-valokuvat" #: ../conduit/modules/iPodModule/iPodModule.py:465 msgid "Delete" msgstr "Poista" #: ../conduit/modules/iPodModule/iPodModule.py:695 #: ../conduit/modules/iPodModule/iPodModule.py:812 #: ../conduit/modules/N800Module/N800Module.py:77 msgid "Encoding" msgstr "Merkistö" #: ../conduit/modules/iPodModule/iPodModule.py:811 msgid "Conversion options" msgstr "Muunnosvalinnat" #: ../conduit/modules/iPodModule/iPodModule.py:816 msgid "Keep converted files" msgstr "Pidä muunnetut tiedostot" #: ../conduit/modules/iPodModule/iPodModule.py:846 #, fuzzy msgid "iPod Music" msgstr "Musiikki" #: ../conduit/modules/iPodModule/iPodModule.py:847 #, fuzzy msgid "Synchronize your iPod music" msgstr "Synkronisoi muistilaput" #: ../conduit/modules/iPodModule/iPodModule.py:882 #, fuzzy msgid "iPod Video" msgstr "Video" #: ../conduit/modules/iPodModule/iPodModule.py:883 #, fuzzy msgid "Synchronize your iPod videos" msgstr "Synkronisoi muistilaput" #: ../conduit/modules/iPodModule/iPodModule.py:907 msgid "Movie" msgstr "Elokuva" #: ../conduit/modules/iPodModule/iPodModule.py:908 msgid "Music Video" msgstr "Musiikkivideo" #: ../conduit/modules/iPodModule/iPodModule.py:909 msgid "TV Show" msgstr "TV-ohjelma" #: ../conduit/modules/iPodModule/iPodModule.py:911 #, fuzzy msgid "Video kind" msgstr "Video" #. Translators: Translate this in derived classes. #: ../conduit/modules/N800Module/N800Module.py:55 msgid "Conduit" msgstr "Conduit" #: ../conduit/modules/N800Module/N800Module.py:105 msgid "N800 Files" msgstr "N800-tiedostot" #: ../conduit/modules/N800Module/N800Module.py:106 msgid "Synchronizes files/folders to a N800 device" msgstr "Synkronisoi tiedostot ja kansiot N800-tabletille" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:111 msgid "Backups" msgstr "Varmuuskopiot" #: ../conduit/modules/N800Module/N800Module.py:126 msgid "N800 Music" msgstr "N800-musiikki" #: ../conduit/modules/N800Module/N800Module.py:127 msgid "Synchronizes music to a N800 device" msgstr "Synkronisoi musiikki N800-tabletille" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:133 msgid "Music" msgstr "Musiikki" #: ../conduit/modules/N800Module/N800Module.py:150 msgid "N800 Videos" msgstr "N800-videot" #: ../conduit/modules/N800Module/N800Module.py:151 msgid "Synchronizes video to a N800 device" msgstr "Synkronisoi videot N800-tabletille" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:157 msgid "Video" msgstr "Video" #: ../conduit/modules/N800Module/N800Module.py:174 msgid "N800 Photos" msgstr "N800-valokuvat" #: ../conduit/modules/N800Module/N800Module.py:175 msgid "Synchronizes photos to an N800 device" msgstr "Synkronisoi valokuvat N800-tabletille" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:181 msgid "Photo" msgstr "Valokuvat" #: ../conduit/modules/NautilusBookmarksModule.py:19 msgid "Nautilus Bookmarks" msgstr "Nautilus-kirjanmerkit" #: ../conduit/modules/NautilusBookmarksModule.py:20 msgid "Sync your Nautilus Bookmarks" msgstr "" #: ../conduit/modules/NautilusBookmarksModule.py:145 msgid "Sync bookmarks to local places/files" msgstr "" #: ../conduit/modules/NautilusBookmarksModule.py:148 msgid "Sync bookmarks to remote places/files" msgstr "" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "Verkko" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "Käytä verkkosynkronisointia" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:44 msgid "Rhythmbox Music" msgstr "Rytmilaatikon musiikki" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:45 msgid "Synchronize songs from your Rhythmbox playlists" msgstr "Synkronisoi kappaleet Rytmilaatikon soittolistoista" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 msgid "Shutterfly" msgstr "Shutterfly" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 msgid "Synchronize your Shutterfly photos" msgstr "Synkronisoi Shutterfly-valokuvat" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "%Y-%m-%d %H:%M:%S" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 msgid "SmugMug" msgstr "SmugMug" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 msgid "Synchronize your SmugMug.com photos" msgstr "Synkronisoi SmugMug.com-valokuvat" #: ../conduit/modules/SynceModule.py:139 msgid "Create Partnership" msgstr "" #: ../conduit/modules/SynceModule.py:312 #, fuzzy msgid "Windows Mobile Contacts" msgstr "Google-yhteystiedot" #: ../conduit/modules/SynceModule.py:450 #, fuzzy msgid "Windows Mobile Calendar" msgstr "Google-kalenteri" #: ../conduit/modules/SynceModule.py:459 msgid "Tasks" msgstr "Tehtävät" #: ../conduit/modules/SynceModule.py:460 msgid "Windows Mobile Tasks" msgstr "" #: ../conduit/modules/ZotoModule/ZotoModule.py:154 msgid "Zoto" msgstr "Zoto" #: ../conduit/modules/ZotoModule/ZotoModule.py:155 msgid "Synchronize your Zoto photos" msgstr "Synkronisoi Zoto-valokuvat" #~ msgid "Saved Note Settings" #~ msgstr "Tallennetun muistilapun asetukset" #~ msgid "Backpack" #~ msgstr "Backpack" #~ msgid "Enabled" #~ msgstr "Käytössä" #~ msgid "Return Playlists" #~ msgstr "Palauta soittolistat" #~ msgid "Banshee" #~ msgstr "Banshee" #~ msgid "Folder:" #~ msgstr "Kansio:" #~ msgid "Load" #~ msgstr "Lataa" #~ msgid "Addressbook:" #~ msgstr "Osoitekirja:" #~ msgid "Evolution" #~ msgstr "Evolution" #~ msgid "" #~ "Limit the Number of\n" #~ "Enclosures Downloaded to:" #~ msgstr "" #~ "Rajoita noudettavien\n" #~ "liitteiden lukumäärä arvoon:" #~ msgid "Items to Synchronize" #~ msgstr "Synkronisoitavat kohteet" #~ msgid "Add Directory" #~ msgstr "Lisää kansio" #~ msgid "Add File" #~ msgstr "Lisää tiedosto" #~ msgid "Advanced" #~ msgstr "Lisäasetukset" #~ msgid "File Configuration" #~ msgstr "Tiedostojen määrittely" #~ msgid "Folder Configuration" #~ msgstr "Kansioiden määrittely" #~ msgid "Folder Location:" #~ msgstr "Kansion sijainti:" #~ msgid "Follow Symbolic Links" #~ msgstr "Seuraa symbolisia linkkejä" #~ msgid "Ignore File Modification Times" #~ msgstr "Älä huomioi tiedostojen muokkausaikoja" #~ msgid "Include Hidden Files" #~ msgstr "Ota piilotiedostot mukaan" #~ msgid "Select A Folder" #~ msgstr "Valitse kansio" #~ msgid "Photoset Name:" #~ msgstr "Valokuvakokoelman nimi:" #~ msgid "Downloaded Document Format" #~ msgstr "Noudettujen asiakirjojen nouto" #~ msgid "Presentations" #~ msgstr "Esitykset" #~ msgid "Spreadsheets" #~ msgstr "Laskentataulukot" #~ msgid "Download Videos" #~ msgstr "Videoiden nouto" #~ msgid "Favorites of above user" #~ msgstr "Yllä olevan käyttäjän suosikit" #~ msgid "Max retrieved videos (0 is unlimited):" #~ msgstr "Noudettavien videoiden enimmäismäärä (0 rajoittamaton):" #~ msgid "Top rated" #~ msgstr "Parhaiten arvostellut" #~ msgid "Uploaded by above user" #~ msgstr "Lähetetty yllä olevan käyttäjän toimesta" #~ msgid "YouTube Source" #~ msgstr "YouTube-lähde" #~ msgid "Encoding" #~ msgstr "Merkistö" #~ msgid "iPod Photos" #~ msgstr "iPod-valokuvat" #~ msgid "%s Format (%s)" #~ msgstr "%s-muoto (%s)" #~ msgid "unchanged" #~ msgstr "ei muutoksia" #~ msgid "Firefox" #~ msgstr "Firefox" #~ msgid "Return Photos Tagged With" #~ msgstr "Palauta valokuvat, joilla luokitukset" #~ msgid "Create Tags: " #~ msgstr "Luo luokituksia: " #~ msgid "Synchronize your desktop preferences" #~ msgstr "Synkronisoi työpöytäasetukset" #~ msgid "Synchronize the Following Playlists" #~ msgstr "Synkronisoi seuraavat soittolistat" #~ msgid "Rhythmbox Playlists" #~ msgstr "Rytmilaatikon soittolistat" #~ msgid "Slow Sync" #~ msgstr "Hidas synkronisointi" #~ msgid "Sync Options" #~ msgstr "Synkronisoinnin valinnat" #~ msgid "Two Way Sync" #~ msgstr "Kaksisuuntainen synkronisointi" #~ msgid "_About" #~ msgstr "_Tietoja" #~ msgid "About Conduit" #~ msgstr "Tietoja Conduitista" #~ msgid "Use built in Web browser" #~ msgstr "Käytä sisäänrakennettua selainta" #~ msgid "Please Enter a Folder Name" #~ msgstr "Anna kansion nimi" #~ msgid "F-Spot Photos" #~ msgstr "F-Spot -valokuvat" #~ msgid "Sync contacts from Google" #~ msgstr "Synkronisoi yhteystiedot Googlesta" #~ msgid "By user" #~ msgstr "Käyttäjältä" #~ msgid "User: " #~ msgstr "Käyttäjä:" conduit-0.3.17/po/pt.po0000644000175000017500000012337211321403566011602 00000000000000# conduit's Portuguese translation # Copyright © 2008, 2009 conduit # This file is distributed under the same license as the conduit package. # # António Lima , 2008, 2009. , 2009. msgid "" msgstr "" "Project-Id-Version: conduit\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=conduit&component=documentation and translation\n" "POT-Creation-Date: 2009-07-12 10:46+0000\n" "PO-Revision-Date: 2009-07-23 00:15+0000\n" "Last-Translator: António Lima \n" "Language-Team: portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Portuguese\n" "X-Poedit-Country: PORTUGAL\n" #: ../data/conduit.desktop.in.in.h:1 msgid "Conduit Synchronizer" msgstr "Sincronizador Conduit" #: ../data/conduit.desktop.in.in.h:2 msgid "Synchronization for GNOME" msgstr "Sincronização para o GNOME" #: ../data/conduit.glade.h:1 msgid "Default Synchronization Options" msgstr "Opções de Sincronização Predefinidas" #: ../data/conduit.glade.h:2 msgid "General" msgstr "Geral" #: ../data/conduit.glade.h:3 msgid "Always Up-To-Date" msgstr "Sempre Actualizado" #: ../data/conduit.glade.h:4 msgid "Ask Me What to Do" msgstr "Perguntar-Me o Que Fazer" #: ../data/conduit.glade.h:5 msgid "Ask me what to do" msgstr "Perguntar-me o que fazer" #: ../data/conduit.glade.h:6 msgid "Cancel Synchronization" msgstr "Cancelar Sincronização" #: ../data/conduit.glade.h:7 msgid "Cancel currently-synchronizing groups" msgstr "Cancelar grupos actuais a sincronizar " #: ../data/conduit.glade.h:8 msgid "Clear Canvas" msgstr "Limpar a Janela" #: ../data/conduit.glade.h:9 msgid "Compare" msgstr "Comparar" #: ../data/conduit.glade.h:10 msgid "Conduit Preferences" msgstr "Preferências do Conduit" #: ../data/conduit.glade.h:11 msgid "Configuration" msgstr "Configuração" #: ../data/conduit.glade.h:12 msgid "Configure Item" msgstr "Configurar Item" #: ../data/conduit.glade.h:13 msgid "Configure the synchronization settings for this item" msgstr "Configurar as definições de sincronização para este item" #: ../data/conduit.glade.h:14 msgid "Conflict Options" msgstr "Opções de Conflitos" #: ../data/conduit.glade.h:15 msgid "Conflicts" msgstr "Conflitos" #: ../data/conduit.glade.h:16 msgid "Contents" msgstr "Conteúdo" #: ../data/conduit.glade.h:17 msgid "Data Conversions" msgstr "Conversões de Dados" #: ../data/conduit.glade.h:18 msgid "Data Providers" msgstr "Fornecedores de Dados" #: ../data/conduit.glade.h:19 msgid "Delete Group" msgstr "Eliminar Grupo" #: ../data/conduit.glade.h:20 msgid "Delete Item" msgstr "Eliminar Item" #: ../data/conduit.glade.h:21 msgid "Delete Options" msgstr "Eliminar Opções" #: ../data/conduit.glade.h:22 msgid "Delete from the corresponding sink" msgstr "Eliminar do depósito correspondente" #: ../data/conduit.glade.h:23 msgid "Delete the Corresponding Item" msgstr "Eliminar o Item Correspondente" #: ../data/conduit.glade.h:24 msgid "Editor" msgstr "Editor" #: ../data/conduit.glade.h:25 msgid "Minimize to notification area" msgstr "Minimizar para a área de notificação" #: ../data/conduit.glade.h:26 msgid "Refresh Group" msgstr "Actualizar Grupo" #: ../data/conduit.glade.h:27 msgid "Refresh Item" msgstr "Actualizar Item" #: ../data/conduit.glade.h:28 msgid "Replace the Older Item" msgstr "Substituir o Item Mais Antigo" #: ../data/conduit.glade.h:29 msgid "Replace the older item" msgstr "Substituir o item mais antigo" #: ../data/conduit.glade.h:30 msgid "Resolve Conflicts" msgstr "Resolver Conflitos" #: ../data/conduit.glade.h:31 msgid "Save settings on exit" msgstr "Gravar definições ao sair" #: ../data/conduit.glade.h:32 msgid "Show Hints" msgstr "Apresentar Dicas" #: ../data/conduit.glade.h:33 msgid "Show status icon" msgstr "Apresentar o Ícone de estado" #: ../data/conduit.glade.h:34 msgid "Skip" msgstr "Ignorar" #: ../data/conduit.glade.h:35 msgid "Slow Synchronization" msgstr "Sincronização Lenta" #: ../data/conduit.glade.h:36 msgid "Start Conduit at login" msgstr "Iniciar o Conduit ao iniciar uma sessão" #: ../data/conduit.glade.h:37 msgid "Synchronization Options" msgstr "Opções de Sincronização" #: ../data/conduit.glade.h:38 msgid "Synchronize All" msgstr "Sincronizar Tudo" #: ../data/conduit.glade.h:39 msgid "Synchronize Group" msgstr "Sincronizar Grupo" #: ../data/conduit.glade.h:40 msgid "Synchronize group" msgstr "Sincronizar grupo" #: ../data/conduit.glade.h:41 msgid "Synchronizes all groups" msgstr "Sincronizar todos os grupos" #: ../data/conduit.glade.h:42 msgid "Title" msgstr "Título" #: ../data/conduit.glade.h:43 msgid "Two-Way Synchronization" msgstr "Sincronização Bi-Direccional" #: ../data/conduit.glade.h:44 msgid "When an item has been deleted:" msgstr "Quando um item tiver sido eliminado:" #: ../data/conduit.glade.h:45 msgid "When an item is deleted..." msgstr "Quando um item é eliminado..." #: ../data/conduit.glade.h:46 msgid "When there is a conflict..." msgstr "Quando houver um conflito..." #: ../data/conduit.glade.h:47 msgid "When there is a two-way conflict:" msgstr "Quando houver um conflito bi-direccional:" #: ../data/conduit.glade.h:48 msgid "_Edit" msgstr "_Editar" #: ../data/conduit.glade.h:49 msgid "_File" msgstr "_Ficheiro" #: ../data/conduit.glade.h:50 msgid "_Help" msgstr "_Ajuda" #: ../conduit/Knowledge.py:8 #| msgid "Applications to Synchronize" msgid "What Do You Want to Synchronize?" msgstr "Deseja Sincronizar?" #: ../conduit/Knowledge.py:9 #| msgid "Drag a Data Provider here to continue" msgid "Drag and Drop a Data Provider on the Canvas" msgstr "Arrastar e Largar um Fornecedor de Dados para a Tela" #: ../conduit/Knowledge.py:11 #| msgid "Synchronization Complete" msgid "Synchronization Group Created" msgstr "Grupo de Sincronização Criado" #: ../conduit/Knowledge.py:12 #| msgid "Drag a Data Provider here to continue" msgid "Add Another Data Provider to the Group to Synchronize it" msgstr "Adicionar outro Fornecedor de Dados ao Grupo para Sincronizar" #: ../conduit/Knowledge.py:14 msgid "You Are Now Ready to Synchronize" msgstr "Está Agora Pronto para Sincronizar" #: ../conduit/Knowledge.py:15 msgid "Right Click on Group for Options" msgstr "Clique com o Botão Direito no Grupo para Opções" #. source,sinc #comment #. twoway #: ../conduit/Knowledge.py:22 #| msgid "Synchronize folders" msgid "Synchronize Two Folders" msgstr "Sincronizar Duas Pastas" #: ../conduit/Knowledge.py:24 msgid "Backup Folder to Box.net" msgstr "Fazer Cópia de Segurança de Pasta para Box.net" #: ../conduit/Knowledge.py:26 #| msgid "Synchronize your F-Spot photos" msgid "Synchronize Tagged F-Spot Photos to Flickr" msgstr "Sincronizar as suas Fotos Etiquetadas do F-Spot para o Flickr" #: ../conduit/Main.py:59 #| msgid "Synchronization Options" msgid "Conduit is a synchronization application." msgstr "O Conduit é uma aplicação de Sincronização." #: ../conduit/Main.py:63 #, python-format msgid "Launch without GUI. [default: %default]" msgstr "Iniciar sem IGU. [por omissão: %default]" #: ../conduit/Main.py:67 #, python-format msgid "Save dataprovider configuration to FILE. [default: %default]" msgstr "" "Gravar configuração do fornecedor de dados para FICHEIRO. [por omissão: %" "default]" #: ../conduit/Main.py:71 #, python-format msgid "Iconify on startup. [default: %default]" msgstr "Iconificar ao iniciar. [por omissão: %default]" #: ../conduit/Main.py:75 #, python-format msgid "Run with the specified UI. [default: %default]" msgstr "Executar com a IU especificada. [por omissão: %default]" #: ../conduit/Main.py:79 msgid "Only load modules in the named files. [default: load all modules]" msgstr "" "Apenas carregar módulos nos ficheiros nomeados. [por omissão: carregar todos " "os módulos]" #: ../conduit/Main.py:83 msgid "Do not load modules in the named files. [default: load all modules]" msgstr "" "Não carregar módulos nos ficheiros nomeados. [por omissão: carregar todos os " "módulos]" #: ../conduit/Main.py:87 msgid "" "Explicitly set internal Conduit settings (keys) to the given values for this " "session. [default: do not set]" msgstr "" "Definir explicitamente as definições do Conduit (chaves) para os valores " "dados para esta sessão. [por omissão: não definir]" #: ../conduit/Main.py:91 #, python-format msgid "" "Enable loading of unfinished or unsupported dataproviders. [default: %" "default]" msgstr "" "Activar carregamento de fornecedores de dados inacabados ou não suportados. " "[por omissão: %default]" #: ../conduit/Main.py:95 #, python-format msgid "Generate more debugging information. [default: %default]" msgstr "Gerar mais informação de depuração. [por omissão: %defalut]" #: ../conduit/Main.py:99 #, python-format msgid "Generate less debugging information. [default: %default]" msgstr "Gerar menos informação de depuração. [por omissão: %default]" #: ../conduit/Main.py:103 #, python-format msgid "Generate no debugging information. [default: %default]" msgstr "Não gerar informação de depuração. [por omissão: %default]" #: ../conduit/dataproviders/DataProvider.py:22 msgid "Ready" msgstr "Pronto" #: ../conduit/dataproviders/DataProvider.py:23 msgid "New data to sync" msgstr "Novos dados para sincronizar" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Refreshing..." msgstr "A Actualizar..." #: ../conduit/dataproviders/DataProvider.py:25 msgid "Refreshed OK" msgstr "Actualizado com Sucesso" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Refreshing" msgstr "Erro ao Actualizar" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronizing..." msgstr "A Sincronizar..." #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronized OK" msgstr "Sincronização com Sucesso" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Error Synchronizing" msgstr "Erro ao Sincronizar" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Synchronization Skipped" msgstr "Sincronização Ignorada" #: ../conduit/dataproviders/DataProvider.py:31 msgid "Synchronization Cancelled" msgstr "Sincronização Cancelada" #: ../conduit/dataproviders/DataProvider.py:32 msgid "Synchronization Conflict" msgstr "Conflito de Sincronização" #: ../conduit/dataproviders/DataProvider.py:33 msgid "Not Configured" msgstr "Não Configurado" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "640x480" msgstr "640x480" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "800x600" msgstr "800x600" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "1024x768" msgstr "1024x768" #. Signifies that a conversion should not take place #: ../conduit/dataproviders/Image.py:35 #: ../conduit/modules/N800Module/N800Module.py:57 msgid "None" msgstr "Nenhum" #. Default Categories for the DataProviders #: ../conduit/dataproviders/__init__.py:6 #| msgid "Please Name All Folders" msgid "Files and Folders" msgstr "Ficheiros e Pastas" #: ../conduit/dataproviders/__init__.py:7 #: ../conduit/modules/iPodModule/iPodModule.py:179 #| msgid "None" msgid "Notes" msgstr "Notas" #: ../conduit/dataproviders/__init__.py:8 #: ../conduit/modules/iPodModule/iPodModule.py:367 #| msgid "Photo" msgid "Photos" msgstr "Fotos" #: ../conduit/dataproviders/__init__.py:9 msgid "Office" msgstr "Escritório" #: ../conduit/dataproviders/__init__.py:10 msgid "Settings" msgstr "Definições" #: ../conduit/dataproviders/__init__.py:11 #| msgid "miscellaneous" msgid "Miscellaneous" msgstr "Diversos" #: ../conduit/dataproviders/__init__.py:12 msgid "Media" msgstr "Média" #: ../conduit/dataproviders/__init__.py:13 #| msgid "Firefox 3 Bookmarks" msgid "Bookmarks" msgstr "Marcadores" #: ../conduit/dataproviders/__init__.py:14 msgid "Test" msgstr "Testar" #: ../conduit/gtkui/Canvas.py:152 msgid "Drag a Data Provider here to continue" msgstr "Arraste para aqui um Fornecedor de Dados para continuar" #: ../conduit/gtkui/Canvas.py:217 msgid "Show me" msgstr "Mostrar-me" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:91 msgid "Source" msgstr "Fonte" #: ../conduit/gtkui/ConflictResolver.py:105 msgid "Resolution" msgstr "Resolução" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:110 msgid "Sink" msgstr "Depósito" #: ../conduit/gtkui/ConflictResolver.py:150 #: ../conduit/gtkui/ConflictResolver.py:151 #, python-format msgid "Conflicts (%s)" msgstr "Conflitos (%s)" #. name, #url #: ../conduit/gtkui/UI.py:33 msgid "Introduction" msgstr "Introdução" #: ../conduit/gtkui/UI.py:34 #| msgid "Data Providers" msgid "Writing a Data Provider" msgstr "Escrever um Fornecedores de Dados" #: ../conduit/gtkui/UI.py:35 #| msgid "Documents" msgid "API Documentation" msgstr "Documentação da API" #: ../conduit/gtkui/UI.py:36 msgid "Test Results" msgstr "Resultados do Teste" #: ../conduit/gtkui/UI.py:129 #, python-format msgid " - %s (Development Version)" msgstr " - %s (Versão de Desenvolvimento)" #: ../conduit/gtkui/UI.py:131 msgid " - Running Uninstalled" msgstr " - A Executar Desinstalado" #: ../conduit/gtkui/UI.py:165 msgid "Examples" msgstr "Exemplos" #: ../conduit/gtkui/UI.py:177 msgid "Developers" msgstr "Programadores" #. Build some liststores to display #: ../conduit/gtkui/UI.py:318 msgid "Convert from" msgstr "Converter a partir de" #: ../conduit/gtkui/UI.py:319 msgid "into" msgstr "para" #: ../conduit/gtkui/UI.py:370 msgid "Relationship Database" msgstr "Base de Dados de Relações" #: ../conduit/gtkui/UI.py:374 msgid "Conversions Available" msgstr "Conversões Disponíveis" #: ../conduit/gtkui/UI.py:380 ../conduit/gtkui/Tree.py:348 #: ../conduit/modules/FileModule/FileConfiguration.py:117 msgid "Name" msgstr "Nome" #: ../conduit/gtkui/UI.py:384 msgid "Loaded" msgstr "Carregado" #: ../conduit/gtkui/UI.py:512 ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "Sincronização em progresso. Deseja cancelar?" #: ../conduit/gtkui/UI.py:678 msgid "_Synchronize All" msgstr "_Sincronizar Tudo" #: ../conduit/gtkui/UI.py:678 msgid "Synchronizes All Groups" msgstr "Sincronizar Todos os Grupos" #: ../conduit/gtkui/UI.py:679 msgid "_Cancel Synchronization" msgstr "_Cancelar Sincronização" #: ../conduit/gtkui/UI.py:679 msgid "Cancels Currently Synchronizing Groups" msgstr "Cancela os Grupos Actuais a Sincronizar" #: ../conduit/gtkui/UI.py:680 msgid "_Quit" msgstr "_Sair" #: ../conduit/gtkui/UI.py:680 msgid "Close Conduit" msgstr "Fechar o Conduit" #: ../conduit/gtkui/UI.py:720 msgid "Synchronization Error" msgstr "Erro de Sincronização" #: ../conduit/gtkui/UI.py:723 msgid "Synchronization Complete" msgstr "Sincronização Terminada" #: ../conduit/gtkui/UI.py:739 msgid "Synchronizing" msgstr "A Sincronizar" #: ../conduit/gtkui/Tree.py:357 msgid "Description" msgstr "Descrição" #: ../conduit/gtkui/ConfigItems.py:729 #, python-format msgid "Total: %d" msgstr "Total: %d" #: ../conduit/gtkui/WindowConfigurator.py:14 msgid "Configure" msgstr "Configurar" #: ../conduit/modules/BackpackModule/BackpackModule.py:58 msgid "Backpack Notes" msgstr "Notas Backpack" #: ../conduit/modules/BackpackModule/BackpackModule.py:59 msgid "Store things in Backpack Notes" msgstr "Armazenar dados nas Notas do Backpack" #: ../conduit/modules/BackpackModule/BackpackModule.py:105 #: ../conduit/modules/FlickrModule/FlickrModule.py:307 #: ../conduit/modules/ZotoModule/ZotoModule.py:243 #| msgid "Account Details" msgid "Account details" msgstr "Detalhes da conta" #: ../conduit/modules/BackpackModule/BackpackModule.py:106 msgid "Login" msgstr "Iniciar Sessão" #: ../conduit/modules/BackpackModule/BackpackModule.py:109 #| msgid "API key:" msgid "API key" msgstr "Chave API" #: ../conduit/modules/BackpackModule/BackpackModule.py:112 #| msgid "Save notes in page:" msgid "Saved notes" msgstr "Notas gravadas" #: ../conduit/modules/BackpackModule/BackpackModule.py:113 #| msgid "Save notes in page:" msgid "Save notes in page" msgstr "Gravar notas na página" #: ../conduit/modules/BansheeModule/BansheeModule.py:52 msgid "Banshee Playlists" msgstr "Listas de Reprodução do Banshee" #: ../conduit/modules/BansheeModule/BansheeModule.py:53 msgid "Synchronize your Banshee playlists" msgstr "Sincronizar as suas listas de reprodução do Banshee" #: ../conduit/modules/BansheeModule/BansheeModule.py:187 #: ../conduit/modules/BansheeModule/BansheeModule.py:188 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:116 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:117 #| msgid "Playlist Name" msgid "Playlists" msgstr "Listas de Reprodução" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 msgid "Box.net" msgstr "Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 msgid "Synchronize your Box.net files" msgstr "Sincronizar os seus ficheiros Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:290 #: ../conduit/modules/FileModule/FileModule.py:82 msgid "Folder" msgstr "Pasta" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:291 #| msgid "Folder Name:" msgid "Folder name" msgstr "Nome da Pasta" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:295 #| msgid "Load Calendars" msgid "Load folders" msgstr "Carregar pastas" #: ../conduit/modules/ConverterModule.py:89 #| msgid "None" msgid "Note-" msgstr "Nota-" #: ../conduit/modules/DesktopWallpaperModule.py:18 msgid "Wallpaper" msgstr "Fundo da Área de Trabalho" #: ../conduit/modules/DesktopWallpaperModule.py:19 msgid "Changes your Desktop Wallpaper" msgstr "Altera o seu Fundo da Área de Trabalho" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:107 #, python-format #| msgid "Select %s:" msgid "Select %s" msgstr "Seleccionar %s" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:127 msgid "Evolution Contacts" msgstr "Contactos do Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:128 msgid "Synchronize your contacts" msgstr "Sincronizar os seus contactos" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:178 msgid "Evolution Calendar" msgstr "Calendário do Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:179 msgid "Synchronize your calendar" msgstr "Sincronizar o seu calendário" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:240 msgid "Evolution Tasks" msgstr "Tarefas do Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:241 msgid "Synchronize your tasks" msgstr "Sincronizar as suas tarefas" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:297 msgid "Evolution Memos" msgstr "Memos do Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:298 msgid "Synchronize your memos" msgstr "Sincronizar os seus memos" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 msgid "Facebook" msgstr "Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:39 msgid "Synchronize your Facebook photos" msgstr "Sincronizar as suas fotos do Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:124 #: ../conduit/modules/FlickrModule/FlickrModule.py:282 msgid "Loading album list..." msgstr "A carregar lista de álbuns..." #: ../conduit/modules/FacebookModule/FacebookModule.py:128 msgid "Failed to connect" msgstr "Falha ao ligar" #: ../conduit/modules/FacebookModule/FacebookModule.py:131 msgid "Logged in" msgstr "Com sessão iniciada" #: ../conduit/modules/FacebookModule/FacebookModule.py:133 msgid "Failed to login" msgstr "Falha ao iniciar sessão" #: ../conduit/modules/FacebookModule/FacebookModule.py:145 #: ../conduit/modules/FspotModule/FspotModule.py:243 msgid "Status" msgstr "Estado" #: ../conduit/modules/FacebookModule/FacebookModule.py:150 #: ../conduit/modules/iPodModule/iPodModule.py:461 #: ../conduit/modules/ZotoModule/ZotoModule.py:252 #| msgid "Album:" msgid "Album" msgstr "Álbum" #: ../conduit/modules/FacebookModule/FacebookModule.py:151 #| msgid "Album Name" msgid "Album name" msgstr "Nome do álbum" #: ../conduit/modules/FacebookModule/FacebookModule.py:156 #| msgid "Loading album list..." msgid "Load albums" msgstr "A carregar álbuns" #: ../conduit/modules/FeedModule/FeedModule.py:58 msgid "RSS Feed" msgstr "Fontes RSS" #: ../conduit/modules/FeedModule/FeedModule.py:59 msgid "Synchronize data from RSS enclosures" msgstr "Sincronizar dados de componentes RSS" #. FIXME: Add Randomize #: ../conduit/modules/FeedModule/FeedModule.py:114 #| msgid "Feed Details" msgid "Feed details" msgstr "Detalhes da fonte" #: ../conduit/modules/FeedModule/FeedModule.py:115 #| msgid "Feed Address:" msgid "Feed address" msgstr "Endereço da fonte" #: ../conduit/modules/FeedModule/FeedModule.py:118 #| msgid "Enclosure Settings" msgid "Enclosure settings" msgstr "Definições de componente" #: ../conduit/modules/FeedModule/FeedModule.py:119 msgid "Limit downloaded enclosures" msgstr "Limitar componentes transferidas" #: ../conduit/modules/FeedModule/FeedModule.py:125 msgid "Limit to" msgstr "Limitar a" #: ../conduit/modules/FeedModule/FeedModule.py:129 #| msgid "Randomize Enclosures" msgid "Randomize enclosures" msgstr "Tornar componentes aleatórias" #: ../conduit/modules/FeedModule/FeedModule.py:133 #| msgid "Download Photos" msgid "Download types" msgstr "Tipos de transferirências" #: ../conduit/modules/FeedModule/FeedModule.py:134 #| msgid "Download Audio Files" msgid "Download audio files" msgstr "Transferir ficheiros áudio" #: ../conduit/modules/FeedModule/FeedModule.py:135 #| msgid "Download Video Files" msgid "Download video files" msgstr "Transferir ficheiros vídeo" #: ../conduit/modules/FeedModule/FeedModule.py:136 #| msgid "Download Photos" msgid "Download photo files" msgstr "Transferir ficheiros de imagem" #: ../conduit/modules/FileModule/FileConfiguration.py:111 msgid "Icon" msgstr "Ícone" #: ../conduit/modules/FileModule/FileConfiguration.py:123 #: ../conduit/modules/GConfModule/GConfModule.py:138 msgid "Items" msgstr "Itens" #: ../conduit/modules/FileModule/FileConfiguration.py:149 #, python-format msgid "Contains %s files" msgstr "Contém %s ficheiros" #: ../conduit/modules/FileModule/FileConfiguration.py:248 msgid "Include file..." msgstr "Incluir ficheiro..." #: ../conduit/modules/FileModule/FileConfiguration.py:258 msgid "All files" msgstr "Todos os ficheiros" #: ../conduit/modules/FileModule/FileConfiguration.py:271 msgid "Include folder..." msgstr "Incluir pasta..." #: ../conduit/modules/FileModule/FileConfiguration.py:314 msgid "Please Name All Folders" msgstr "Por Favor dê um Nome a Todas as Pastas" #: ../conduit/modules/FileModule/FileConfiguration.py:315 msgid "" "All folders require a descriptive name. To name a folder simply click on it" msgstr "" "Todas as pastas requerem um nome descritivo. Para dar um nome a uma pasta " "simplesmente clique nesta" #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "Ficheiros" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "Fonte para sincronizar múltiplos ficheiros" #: ../conduit/modules/FileModule/FileModule.py:83 msgid "Synchronize folders" msgstr "Sincronizar pastas" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:26 msgid "Firefox 3 Bookmarks" msgstr "Marcadores do Firefox 3" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:27 msgid "Syncronize your Firefox 3 Bookmarks" msgstr "Sincronizar os seus Marcadores do Firefox 3" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:87 msgid "Firefox Profile" msgstr "Perfil do Firefox" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 msgid "Flickr" msgstr "Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 msgid "Synchronize your Flickr.com photos" msgstr "Sincronizar as suas fotos do Flickr.com" #: ../conduit/modules/FlickrModule/FlickrModule.py:287 #| msgid "Failed to connect" msgid "Failed to connect." msgstr "Falha ao ligar." #: ../conduit/modules/FlickrModule/FlickrModule.py:290 #| msgid "Album Name" msgid "Album names loaded." msgstr "Nomes de álbum carregados." #: ../conduit/modules/FlickrModule/FlickrModule.py:292 #| msgid "Failed to login" msgid "Failed to login." msgstr "Falha ao iniciar sessão." #: ../conduit/modules/FlickrModule/FlickrModule.py:303 msgid "Logging in, please wait..." msgstr "A iniciar sessão, por favor aguarde..." #: ../conduit/modules/FlickrModule/FlickrModule.py:308 #: ../conduit/modules/GoogleBookmarksModule.py:67 #: ../conduit/modules/ZotoModule/ZotoModule.py:244 #| msgid "Username:" msgid "Username" msgstr "Nome de Utilizador" #: ../conduit/modules/FlickrModule/FlickrModule.py:318 msgid "Authenticate" msgstr "Auntenticar" #: ../conduit/modules/FlickrModule/FlickrModule.py:322 #: ../conduit/modules/ZotoModule/ZotoModule.py:251 #| msgid "Saved Photo Settings" msgid "Saved photo settings" msgstr "Definições de fotos gravadas" #: ../conduit/modules/FlickrModule/FlickrModule.py:327 #| msgid "Resize Photos:" msgid "Resize photos" msgstr "Redimensionar fotos" #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "Do not resize" msgstr "Não redimensionar" #: ../conduit/modules/FlickrModule/FlickrModule.py:331 msgid "Photos are public" msgstr "As fotos são públicas" #: ../conduit/modules/FspotModule/FspotModule.py:25 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 msgid "Synchronize your F-Spot photos" msgstr "Sincronizar as suas fotos do F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:152 msgid "F-Spot DBus interface is operating in read-only mode" msgstr "A interface DBus do F-Spot está a operar em modo só de leitura" #: ../conduit/modules/FspotModule/FspotModule.py:218 msgid "F-Spot is running" msgstr "F-Spot encontra-se em execução" #: ../conduit/modules/FspotModule/FspotModule.py:219 msgid "Please start F-Spot or activate the D-Bus Extension" msgstr "Inicie o F-Spot ou active a Extensão D-Bus" #: ../conduit/modules/FspotModule/FspotModule.py:244 #| msgid "F-Spot" msgid "Start F-Spot" msgstr "Iniciar o F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:248 #: ../conduit/modules/FspotModule/FspotModule.py:249 msgid "Tags" msgstr "Etiquetas" #: ../conduit/modules/FspotModule/FspotModule.py:262 msgid "Add tags" msgstr "Adicionar etiquetas" #: ../conduit/modules/FspotModule/FspotModule.py:263 #| msgid "Tag Name" msgid "Tag name" msgstr "Nome da etiqueta" #: ../conduit/modules/FspotModule/FspotModule.py:266 msgid "Add tag" msgstr "Adicionar etiqueta" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "Application Settings" msgstr "Definições da Aplicação" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Synchronize your application settings" msgstr "Sincronizar as definições da aplicação" #: ../conduit/modules/GConfModule/GConfModule.py:31 msgid "Metacity" msgstr "Metacity" #: ../conduit/modules/GConfModule/GConfModule.py:32 msgid "Nautilus" msgstr "Nautilus" #: ../conduit/modules/GConfModule/GConfModule.py:33 msgid "Preferred Applications" msgstr "Aplicações Preferidas" #: ../conduit/modules/GConfModule/GConfModule.py:34 msgid "Desktop Interface" msgstr "Interface de Ambiente de Trabalho" #: ../conduit/modules/GConfModule/GConfModule.py:35 msgid "Gnome Terminal" msgstr "Consola Gnome" #: ../conduit/modules/GConfModule/GConfModule.py:137 msgid "Applications to Synchronize" msgstr "Aplicações a Sincronizar" #: ../conduit/modules/GoogleBookmarksModule.py:19 #| msgid "Google Contacts" msgid "Google Bookmarks" msgstr "Marcadores do Google" #: ../conduit/modules/GoogleBookmarksModule.py:20 #| msgid "Syncronize your Firefox 3 Bookmarks" msgid "Sync your Google Bookmarks" msgstr "Sincronizar os seus Marcadores do Google" #: ../conduit/modules/GoogleBookmarksModule.py:66 msgid "Login Details" msgstr "Detalhes de Início de Sessão" #: ../conduit/modules/GoogleBookmarksModule.py:70 #: ../conduit/modules/ZotoModule/ZotoModule.py:247 #| msgid "Password:" msgid "Password" msgstr "Senha" #: ../conduit/modules/GoogleModule/GoogleModule.py:399 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:4 msgid "Google Calendar" msgstr "Google Calendar" #: ../conduit/modules/GoogleModule/GoogleModule.py:400 msgid "Synchronize your Google Calendar" msgstr "Sincronizar o seu Google Calendar" #: ../conduit/modules/GoogleModule/GoogleModule.py:582 msgid "Picasa" msgstr "Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:583 msgid "Synchronize your Google Picasa photos" msgstr "Sincronizar as suas fotos do Google Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:745 msgid "Google Contacts" msgstr "Contactos do Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:746 msgid "Synchronize your Google Mail contacts" msgstr "Sincronizar os seus contactos do Gmail" #: ../conduit/modules/GoogleModule/GoogleModule.py:1076 msgid "Google Documents" msgstr "Documentos do Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:1077 msgid "Synchronize your Google Documents" msgstr "Sincronizar os seus documentos do Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:1322 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:69 msgid "Unknown" msgstr "Desconhecido" #: ../conduit/modules/GoogleModule/GoogleModule.py:1323 msgid "miscellaneous" msgstr "diversos" #: ../conduit/modules/GoogleModule/GoogleModule.py:1324 msgid "No description." msgstr "Sem descrição." #: ../conduit/modules/GoogleModule/GoogleModule.py:1333 msgid "YouTube" msgstr "Youtube" #: ../conduit/modules/GoogleModule/GoogleModule.py:1334 msgid "Synchronize data from YouTube" msgstr "Sincronizar dados do YouTube" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:1 msgid "Account Details" msgstr "Detalhes de Conta" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:2 msgid "Calendar:" msgstr "Calendário:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:3 msgid "Email:" msgstr "Email:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:5 msgid "Load Calendars" msgstr "Carregar Calendários" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:6 msgid "Password:" msgstr "Senha:" #: ../conduit/modules/iPodModule/iPodModule.py:180 #| msgid "Synchronize your contacts" msgid "Synchronize your iPod notes" msgstr "Sincronizar as suas notes do iPod" #: ../conduit/modules/iPodModule/iPodModule.py:295 #: ../conduit/modules/SynceModule.py:311 #| msgid "Contents" msgid "Contacts" msgstr "Contactos" #: ../conduit/modules/iPodModule/iPodModule.py:296 #| msgid "Synchronize your contacts" msgid "Synchronize your iPod contacts" msgstr "Sincronizar os seus contactos do iPod" #: ../conduit/modules/iPodModule/iPodModule.py:331 #: ../conduit/modules/SynceModule.py:449 #| msgid "Calendar:" msgid "Calendar" msgstr "Calendário" #: ../conduit/modules/iPodModule/iPodModule.py:332 #| msgid "Synchronize your calendar" msgid "Synchronize your iPod calendar" msgstr "Sincronizar o seu calendário do iPod" #: ../conduit/modules/iPodModule/iPodModule.py:368 #| msgid "Synchronize your Zoto photos" msgid "Synchronize your iPod photos" msgstr "Sincronizar as suas fotos do iPod" #: ../conduit/modules/iPodModule/iPodModule.py:465 #| msgid "Delete Item" msgid "Delete" msgstr "Eliminar" #: ../conduit/modules/iPodModule/iPodModule.py:695 #: ../conduit/modules/iPodModule/iPodModule.py:812 #: ../conduit/modules/N800Module/N800Module.py:77 msgid "Encoding" msgstr "Codificação" #: ../conduit/modules/iPodModule/iPodModule.py:811 #| msgid "Conflict Options" msgid "Conversion options" msgstr "Opções de conversão" #: ../conduit/modules/iPodModule/iPodModule.py:816 msgid "Keep converted files" msgstr "Manter ficheiros convertidos" #: ../conduit/modules/iPodModule/iPodModule.py:846 #| msgid "Music" msgid "iPod Music" msgstr "Música do iPod" #: ../conduit/modules/iPodModule/iPodModule.py:847 #| msgid "Synchronize your memos" msgid "Synchronize your iPod music" msgstr "Sincronizar a sua música do iPod" #: ../conduit/modules/iPodModule/iPodModule.py:882 #| msgid "Video" msgid "iPod Video" msgstr "Vídeo do iPod" #: ../conduit/modules/iPodModule/iPodModule.py:883 #| msgid "Synchronize your memos" msgid "Synchronize your iPod videos" msgstr "Sincronizar os seus vídeos do iPod" #: ../conduit/modules/iPodModule/iPodModule.py:907 #| msgid "Most viewed" msgid "Movie" msgstr "Filme" #: ../conduit/modules/iPodModule/iPodModule.py:908 #| msgid "Music" msgid "Music Video" msgstr "Vídeo Musical" #: ../conduit/modules/iPodModule/iPodModule.py:909 msgid "TV Show" msgstr "Programa de TV" #: ../conduit/modules/iPodModule/iPodModule.py:911 #| msgid "Video" msgid "Video kind" msgstr "Tipo de vídeo" #. Translators: Translate this in derived classes. #: ../conduit/modules/N800Module/N800Module.py:55 msgid "Conduit" msgstr "Conduit" #: ../conduit/modules/N800Module/N800Module.py:105 msgid "N800 Files" msgstr "Ficheiros N800" #: ../conduit/modules/N800Module/N800Module.py:106 msgid "Synchronizes files/folders to a N800 device" msgstr "Sincroniza ficheiros/pastas para um dispositivo N800" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:111 msgid "Backups" msgstr "Cópias de Segurança" #: ../conduit/modules/N800Module/N800Module.py:126 msgid "N800 Music" msgstr "Música N800" #: ../conduit/modules/N800Module/N800Module.py:127 msgid "Synchronizes music to a N800 device" msgstr "Sincroniza música para um dispositivo N800" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:133 msgid "Music" msgstr "Música" #: ../conduit/modules/N800Module/N800Module.py:150 msgid "N800 Videos" msgstr "Vídeos N800" #: ../conduit/modules/N800Module/N800Module.py:151 msgid "Synchronizes video to a N800 device" msgstr "Sincronizar vídeos para um dispositivo N800" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:157 msgid "Video" msgstr "Vídeo" #: ../conduit/modules/N800Module/N800Module.py:174 msgid "N800 Photos" msgstr "Fotos N800" #: ../conduit/modules/N800Module/N800Module.py:175 msgid "Synchronizes photos to an N800 device" msgstr "Sincroniza fotos para um dispositivo N800" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:181 msgid "Photo" msgstr "Foto" #: ../conduit/modules/NautilusBookmarksModule.py:19 msgid "Nautilus Bookmarks" msgstr "Marcadores do Nautilus" #: ../conduit/modules/NautilusBookmarksModule.py:20 #| msgid "Syncronize your Firefox 3 Bookmarks" msgid "Sync your Nautilus Bookmarks" msgstr "Sincronizar os seus Marcadores do Nautilus" #: ../conduit/modules/NautilusBookmarksModule.py:145 msgid "Sync bookmarks to local places/files" msgstr "Sincronizar marcadores para locais/ficheiros locais" #: ../conduit/modules/NautilusBookmarksModule.py:148 msgid "Sync bookmarks to remote places/files" msgstr "Sincronizar marcadores para locais/ficheiros remotos" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "Rede" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "Activar sincronização via rede" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:44 msgid "Rhythmbox Music" msgstr "Música do Rhythmbox" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:45 msgid "Synchronize songs from your Rhythmbox playlists" msgstr "Sincronizar músicas das suas listas de reprodução do Rhythmbox" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 msgid "Shutterfly" msgstr "Shutterfly" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 msgid "Synchronize your Shutterfly photos" msgstr "Sincronizar as suas fotos do Shutterfly" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "%Y-%m-%d %H:%M:%S" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 msgid "SmugMug" msgstr "SmugMug" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 msgid "Synchronize your SmugMug.com photos" msgstr "Sincronizar as suas fotos do SmugMug.com" #: ../conduit/modules/SynceModule.py:139 msgid "Create Partnership" msgstr "Criar Parceria" #: ../conduit/modules/SynceModule.py:312 msgid "Windows Mobile Contacts" msgstr "Contactos do Windows Mobile" #: ../conduit/modules/SynceModule.py:450 #| msgid "Windows Mobile Contacts" msgid "Windows Mobile Calendar" msgstr "Calendário do Windows Mobile" #: ../conduit/modules/SynceModule.py:459 msgid "Tasks" msgstr "Tarefas" #: ../conduit/modules/SynceModule.py:460 #| msgid "Windows Mobile Todo" msgid "Windows Mobile Tasks" msgstr "Tarefas do Windows Mobile" #: ../conduit/modules/ZotoModule/ZotoModule.py:154 msgid "Zoto" msgstr "Zoto" #: ../conduit/modules/ZotoModule/ZotoModule.py:155 msgid "Synchronize your Zoto photos" msgstr "Sincronizar as suas fotos do Zoto" #~ msgid "Items to Synchronize" #~ msgstr "Itens a Sincronizar" #~ msgid "Add Directory" #~ msgstr "Adicionar Directório" #~ msgid "Add File" #~ msgstr "Adicionar Ficheiro" #~ msgid "Advanced" #~ msgstr "Avançado" #~ msgid "File Configuration" #~ msgstr "Configuração do Ficheiro" #~ msgid "Folder Configuration" #~ msgstr "Configuração da Pasta" #~ msgid "Folder Location:" #~ msgstr "Localização da Pasta:" #~ msgid "Follow Symbolic Links" #~ msgstr "Seguir Atalhos" #~ msgid "Ignore File Modification Times" #~ msgstr "Ignorar Datas de Alteração dos Ficheiros" #~ msgid "Include Hidden Files" #~ msgstr "Incluir Ficheiros Ocultos" #~ msgid "Select A Folder" #~ msgstr "Seleccionar Uma Pasta" #~ msgid "Downloaded Document Format" #~ msgstr "Formato do Documento Transferido" #~ msgid "Presentations" #~ msgstr "Apresentações" #~ msgid "Spreadsheets" #~ msgstr "Folhas de Cálculo" #~ msgid "Download Videos" #~ msgstr "Transferir Vídeos" #~ msgid "Favorites of above user" #~ msgstr "Favoritos do utilizados acima" #~ msgid "Max retrieved videos (0 is unlimited):" #~ msgstr "Número máximo de vídeos obtidos (0 é ilimitado):" #~ msgid "Top rated" #~ msgstr "Melhor classificados" #~ msgid "Uploaded by above user" #~ msgstr "Carregado pelo utilizador acima" #~ msgid "YouTube Source" #~ msgstr "Fonte do YouTube" #~ msgid "Saved Note Settings" #~ msgstr "Definições de Notas Gravadas" #~ msgid "Backpack" #~ msgstr "Mochila" #~ msgid "Enabled" #~ msgstr "Activado" #~ msgid "Return Playlists" #~ msgstr "Apresentar Listas de Reprodução" #~ msgid "Banshee" #~ msgstr "Banshee" #~ msgid "Addressbook:" #~ msgstr "Livro de Endereços:" #~ msgid "Evolution" #~ msgstr "Evolution" #~ msgid "Load" #~ msgstr "Carregar" #~ msgid "" #~ "Limit the Number of\n" #~ "Enclosures Downloaded to:" #~ msgstr "" #~ "Limitar o Número de\n" #~ "Componentes Transferidos para:" #~ msgid "Photoset Name:" #~ msgstr "Nome do Álbum Fotográfico:" #~ msgid "Encoding" #~ msgstr "Codificação" #~ msgid "iPod Photos" #~ msgstr "Fotos do iPod" #~ msgid "%s Format (%s)" #~ msgstr "%s Formato (%s)" #~ msgid "unchanged" #~ msgstr "inalterado" #~ msgid "Firefox" #~ msgstr "Firefox" #~ msgid "Folder:" #~ msgstr "Pasta:" #~ msgid "Return Photos Tagged With" #~ msgstr "Apresentar Fotos Etiquetadas Com" #~ msgid "Create Tags: " #~ msgstr "Criar Etiquetas:" #~ msgid "Synchronize your desktop preferences" #~ msgstr "Sincronizar as suas preferências de ambiente trabalho" #~ msgid "Synchronize the Following Playlists" #~ msgstr "Sincronizar as Seguintes Listas de Reprodução" #~ msgid "Rhythmbox Playlists" #~ msgstr "Listas de Reprodução do Rhythmbox" #~ msgid "Slow Sync" #~ msgstr "Sincronização Lenta" #~ msgid "Sync Options" #~ msgstr "Opções de Sincronização" #~ msgid "Two Way Sync" #~ msgstr "Sincronização Bi-Direccional" #~ msgid "Use built in Web browser" #~ msgstr "Utilizar Navegador embutido" #~ msgid "_About" #~ msgstr "_Sobre" #~ msgid "About Conduit" #~ msgstr "Sobre o Conduit" #~ msgid "_Synchronize" #~ msgstr "_Sincronizar" #~ msgid "Synchronize all dataproviders" #~ msgstr "Sincronizar todos os fornecedores de dados" #~ msgid "Please Enter a Folder Name" #~ msgstr "Por Favor Insira um Nome de Pasta" #~ msgid "" #~ "All folders require a descriptive name. To name a folder enter its name " #~ "where indicated" #~ msgstr "" #~ "Todas as pastas requerem um nome descritivo. Para dar um nome a uma pasta " #~ "insira o seu nome onde é indicado" #~ msgid "F-Spot Photos" #~ msgstr "Fotos do F-Spot" #~ msgid "Gmail Emails" #~ msgstr "Endereços de Email do Gmail" #~ msgid "Sync your emails" #~ msgstr "Sincronizar os seus emails" #~ msgid "Return Emails Matching" #~ msgstr "Apresentar Emails Que Coincidem Com" #~ msgid "When Saving Emails" #~ msgstr "Ao Gravar Emails" #~ msgid "Add Label:" #~ msgstr "Adicionar Etiqueta:" #~ msgid "All emails" #~ msgstr "Todos os emails" #~ msgid "Emails in folder:" #~ msgstr "Emails na pasta:" #~ msgid "Emails with label:" #~ msgstr "Emails com etiqueta:" #~ msgid "Unread emails" #~ msgstr "Emails não lidos" #~ msgid "By user" #~ msgstr "Pelo utilizador" #~ msgid "User: " #~ msgstr "Utilizador: " #~ msgid "Sync your Evolution contacts" #~ msgstr "Sincronizar os seus contactos do Evolution" #~ msgid "Evolution Events" #~ msgstr "Eventos do Evolution" #~ msgid "Sync your Evolution events" #~ msgstr "Sincronizar os seus eventos do Evolution" #~ msgid "Evolution Todo" #~ msgstr "Tarefas do Evolution" #~ msgid "Sync your Evolution tasks" #~ msgstr "Sincronizar as suas tarefas do Evolution" #~ msgid "Picasa Desktop" #~ msgstr "Picasa Desktop" #~ msgid "Sync your Picasa photos" #~ msgstr "Sincronizar as suas fotos do Picasa" #~ msgid "Return Photos In The Following Albums" #~ msgstr "Apresentar Fotos Nos Seguintes Álbuns" #~ msgid "Sync your devices contacts" #~ msgstr "Sincronizar os seus contactos de dispositivos" #~ msgid "Windows Mobile Events" #~ msgstr "Eventos do Windows Mobile" #~ msgid "Sync your devices events" #~ msgstr "Sincronizar os seus eventos dos dispositivos" #~ msgid "Sync your devices tasks" #~ msgstr "Sincronizar as tarefas dos seus dispositivos" conduit-0.3.17/po/ChangeLog0000644000175000017500000003070011175026630012361 000000000000002009-04-18 Mario Blättermann * de.po: Updated German translation 2009-03-28 Simos Xenitellis * LINGUAS: Added el. 2009-03-27 Philip Withnall * en_GB.po: Updated British English translation by Jen Ockwell . 2009-03-26 Daniel Nylander * sv.po: Updated Swedish translation. 2009-03-13 Gabor Kelemen * hu.po: Translation updated. 2009-03-04 Daniel Nylander * sv.po: Updated Swedish translation. 2009-02-27 Mario Blättermann * de.po: Updated German translation 2009-02-24 Jorge Gonzalez * es.po: Updated Spanish translation 2009-02-22 Duarte Loreto * pt.po: Updated Portuguese translation by António Lima . 2009-02-22 Timo Jyrinki * fi.po: Updated Finnish translation. 2009-02-16 Simos Xenitellis * el.po: Updated Greek translation (Jennie Petoumenou). 2009-02-01 Jorge Gonzalez * es.po: Updated Spanish translation 2009-02-01 Daniel Nylander * sv.po: Updated Swedish translation. 2009-01-30 John Stowers * POTFILES.in: * POTFILES.skip: Remove conduit-autostart.desktop.* 2009-01-28 Jorge Gonzalez * es.po: Updated Spanish translation 2009-01-27 Gil Forcada * ca.po: Updated Catalan translation by David Planella. 2009-01-24 Andre Klapper * de.po: Updated German translation. 2009-01-23 Jorge Gonzalez * es.po: Updated Spanish translation. 2008-12-16 Gabor Kelemen * hu.po: Translation updated. 2008-12-05 Mario Blättermann * de.po: Updated German translation 2008-11-28 Claude Paroz * fr.po: Updated French translation. 2008-11-15 Petr Kovar * cs.po: Added Czech translation by Jiri Eischmann and Jan Dobrovolny. * LINGUAS: Added cs. 2008-11-13 Og Maciel * pt_BR.po: Updated Brazilian Portuguese translation by Vladimir Melo. 2008-11-12 Timo Jyrinki * fi.po: Updated Finnish translation. 2008-11-11 Duarte Loreto * pt.po: Updated Portuguese translation by António Lima . 2008-11-10 Luca Ferretti * it.po: Updated Italian translation by Gianvito Cavasoli. 2008-11-03 Jorge Gonzalez * es.po: Updated Spanish translation 2008-10-27 Jorge Gonzalez * es.po: Updated Spanish translation 2008-10-26 Daniel Nylander * sv.po: Updated Swedish translation. 2008-10-22 Daniel Nylander * sv.po: Updated Swedish translation. 2008-10-21 Philip Withnall * en_GB.po: Updated British English translation. 2008-10-19 Djihed Afifi * ar.po: Updated Arabic Translation by Djihed Afifi. 2008-10-11 Luca Ferretti * it.po: Updated Italian translation by Gianvito Cavasoli. 2008-10-10 Jorge Gonzalez * es.po: Updated Spanish translation 2008-10-09 Og Maciel * pt_BR.po: Updated Brazilian Portuguese translation by Vladimir Melo. 2008-10-05 Claude Paroz * fr.po: Updated French translation. 2008-09-30 Chao-Hsiung Liao * LINGUAS: Added zh_HK zh_TW * zh_HK.po: Added Traditional Chinese translation(Hong Kong). * zh_TW.po: Added Traditional Chinese translation(Taiwan). 2008-09-24 Daniel Nylander * sv.po: Updated Swedish translation. 2008-09-21 Og Maciel * pt_BR.po: Updated Brazilian Portuguese translation by Vladimir Melo. 2008-09-18 Djihed Afifi * ar.po: Updated Arabic Translation by Djihed Afifi. 2008-09-15 Timo Jyrinki * fi.po: Updated Finnish translation. 2008-09-15 Djihed Afifi * ar.po: Updated Arabic Translation by Youssef Chahibi. 2008-09-13 Leonardo Ferreira Fontenelle * pt_BR.po: Terminology fixes in Brazilian Portuguese translation. 2008-09-12 Hendrik Richter * de.po: Updated German translation. 2008-09-11 Hendrik Richter * de.po: Updated German translation. 2008-09-10 Jorge Gonzalez * es.po: Updated Spanish translation by Gabriel Felipe Cornejo and me. 2008-09-06 Leonardo Ferreira Fontenelle * pt_BR.po: Brazilian Portuguese translation updated by Michel Recondo. 2008-09-07 Gil Forcada * ca.po: Updated Catalan translation by David Planella. 2008-09-01 Daniel Nylander * sv.po: Updated Swedish translation. 2008-08-22 Jorge Gonzalez * es.po: Updated Spanish translation 2008-08-13 Tomasz Dominikowski * pl.po: Added Polish translation. * LINGUAS: Added pl. 2008-08-07 Timo Jyrinki * fi.po: Updated Finnish translation 2008-08-06 Djihed Afifi * ar.po: Updated Arabic Translation by Youssef Chahibi. 2008-08-03 Jorge Gonzalez * es.po: Updated Spanish translation 2008-08-02 Ignacio Casal Quinteiro * gl.po: Updated Galician translation 2008-07-29 Duarte Loreto * pt.po: Updated Portuguese translation by António Lima . 2008-07-29 Djihed Afifi * ar.po: Updated Arabic Translation by Djihed Afifi. 2008-07-21 Leonardo Ferreira Fontenelle * pt_BR.po: Translation updated by Fábio Nogueira. 2008-07-20 Jorge Gonzalez * es.po: Updated Spanish translation 2008-07-19 Ignacio Casal Quinteiro * gl.po: Updated Galician Translation. 2008-07-17 John Stowers * POTFILES.in: * POTFILES.skip: Fix build. 2008-07-12 Ignacio Casal Quinteiro * gl.po: Updated Galician Translation. 2008-07-09 Jorge Gonzalez * es.po: Updated Spanish translation 2008-07-09 Kjartan Maraas * POTFILES.in: Added missing file. * nb.po: Updated Norwegian bokmål translation. 2008-07-05 Jorge Gonzalez * es.po: Updated Spanish translation 2008-07-03 Yannig Marchegay * oc.po: Added Occitan translation. 2008-06-27 Jorge Gonzalez * es.po: Updated Spanish translation 2008-06-15 Clytie Siddall * vi.po: Updated Vietnamese translation. 2008-06-11 Djihed Afifi * ar.po: Updated Arabic Translation by Djihed Afifi. 2008-06-07 Jonh Wendell * pt_BR.po: Updated Brazilian Portuguese translation by Fábio Nogueira. 2008-06-07 Jorge Gonzalez * es.po: Updated Spanish translation 2008-06-07 Ignacio Casal Quinteiro * gl.po: Updated Galician Translation. 2008-06-06 Amanpreet Singh * pa.po: New Translation added * LINGUAS: 'pa' Punjabi Translation added 2008-06-05 Andre Klapper * de.po: * LINGUAS: Added German translation. 2008-06-03 Clytie Siddall * vi.po: Added Vietnamese translation (and to LINGUAS). 2008-05-23 Kjartan Maraas * nb.po: Updated Norwegian bokmål translation. 2008-05-22 Djihed Afifi * ar.po: Updated Arabic Translation by Djihed Afifi. 2008-05-19 Djihed Afifi * ar.po: Updated Arabic Translation by Djihed Afifi. 2008-05-16 Claude Paroz * fr.po: Updated French translation. 2008-05-12 Ignacio Casal Quinteiro * gl.po: Added Galician Translation. * LINGUAS: Added 'gl'. 2008-05-12 Luca Ferretti * it.po: Updated Italian translation by Gianvito Cavasoli 2008-05-09 Jorge Gonzalez * es.po: Updated Spanish translation by Gabriel Felipe Cornejo Salas 2008-05-06 Kjartan Maraas * POTFILES.in: Add Zoto stuff too. * nb.po: Updated Norwegian bokmål translation. 2008-05-06 Kjartan Maraas * nb.po: Again. 2008-05-06 Kjartan Maraas * nb.po: Updated Norwegian bokmål translation. 2008-05-04 Yair Hershkovitz * he.po, LINGUAS: Added Hebrew translation. 2008-04-30 John Stowers * POTFILES.in: * POTFILES.skip: To pass make distcheck, those modules that are not distributed must be in POTFILES.skip 2008-04-26 Gabor Kelemen * hu.po: Translation added. * LINGUAS: Added hu. 2008-04-25 Jorge Gonzalez * es.po: Updated Spanish translation by Gabriel Felipe Cornejo Salas 2008-04-22 Philip Withnall * en_GB.po: Fixed British English translation. 2008-04-22 Ilkka Tuohela * fi.po: Added Finnish translation. * LINGUAS: Added fi to LINGUAS. 2008-04-22 Philip Withnall * en_GB.po: Updated British English translation. 2008-04-20 Jorge Gonzalez * es.po: Updated Spanish translation by Gabriel Felipe Cornejo Salas 2008-04-12 Matej Urbančič * sl.po: Added Slovenian translation 2008-04-05 Jorge Gonzalez * es.po: Updated Spanish translation by Gabriel Felipe Cornejo Salas 2008-03-08 Philip Withnall * LINGUAS: Added en_GB (British English) translation. * en_GB.po: Added British English translation. 2008-03-08 Luca Ferretti * it.po: Updated Italian translation by Gianvito Cavasoli. 2008-03-07 Daniel Nylander * sv.po: Updated Swedish translation. 2008-03-05 Stéphane Raimbault * fr.po: Updated French translation by Robert-André Mauchin. 2008-03-05 Gil Forcada * ca.po: Updated Catalan translation by David Planella. 2008-03-04 Duarte Loreto * pt.po: Added Portuguese translation by António Lima . * LINGUAS: Added Portuguese (pt) 2008-03-01 Leonardo Ferreira Fontenelle * pt_BR.po: Brazilian Portuguese translation updated by Vladimir Melo, with fixes by Og Maciel and further translation by myself. 2008-02-19 Daniel Nylander * sv.po: Updated Swedish translation. 2008-02-19 Jorge Gonzalez * es.po: Updated Spanish translation 2008-02-19 Kjartan Maraas * LINGUAS: Add nb * POTFILES.in: Add missing files * nb.po: Updated Norwegian bokmål translation. 2008-02-09 John Stowers * ar.po: * ca.po: * es.po: * fr.po: * it.po: * pt_BR.po: * ru.po: * sv.po: Change Dataprovider to Data Provider 2008-02-08 Luca Ferretti * it.po: Updated Italian translation by Gianvito Cavasoli. 2008-02-01 Luca Ferretti * LINGUAS: * it.po: Added Italian translation by Gianvito Cavasoli. * conduit.pot: removed, shouldn't be in svn. 2008-01-21 Gil Forcada * LINGUAS: Added ca. * ca.po: Added Catalan translation by David Planella. * conduit.pot: Updated. 2008-01-20 John Stowers * POTFILES.in: Moved refs to picasa glade file 2008-01-05 Stéphane Raimbault * conduit.pot: Updated. * fr.po: Updated French translation by Robert-André Mauchin and Stéphane Raimbault. 2008-01-04 Djihed Afifi * LINGUAS: Add ar. 2007-12-26 Djihed Afifi * ar.po: Updated Arabic Translation by Djihed Afifi. 2007-12-16 Daniel Nylander * sv.po: Updated Swedish translation. 2007-12-11 Jorge Gonzalez * es.po: Added initial Spanish translation. 2007-12-06 Claude Paroz * POTFILES.in: Updated file list. * fr.po: Updated French translation. conduit-0.3.17/po/POTFILES.in0000644000175000017500000000312611326116710012363 00000000000000[encoding: UTF-8] data/conduit.desktop.in.in data/conduit.ui conduit/Knowledge.py conduit/Main.py #conduit/Module.py conduit/dataproviders/DataProvider.py conduit/dataproviders/Image.py conduit/dataproviders/__init__.py conduit/gtkui/Canvas.py conduit/gtkui/ConflictResolver.py conduit/gtkui/UI.py conduit/gtkui/Tree.py conduit/gtkui/ConfigItems.py conduit/gtkui/WindowConfigurator.py conduit/hildonui/Canvas.py conduit/hildonui/UI.py conduit/modules/BackpackModule/BackpackModule.py conduit/modules/BackpackModule/backpack/backpack.py conduit/modules/BansheeModule/BansheeModule.py conduit/modules/BoxDotNetModule/BoxDotNetModule.py conduit/modules/ConverterModule.py conduit/modules/DesktopWallpaperModule.py conduit/modules/EvolutionModule/EvolutionModule.py conduit/modules/FacebookModule/FacebookModule.py conduit/modules/FeedModule/FeedModule.py conduit/modules/FileModule/FileConfiguration.py conduit/modules/FileModule/FileModule.py conduit/modules/Firefox3Module/Firefox3Module.py conduit/modules/FlickrModule/FlickrModule.py conduit/modules/FspotModule/FspotModule.py conduit/modules/GConfModule/GConfModule.py conduit/modules/GoogleBookmarksModule.py conduit/modules/GoogleModule/GoogleModule.py conduit/modules/iPodModule/iPodModule.py conduit/modules/N800Module/N800Module.py conduit/modules/NautilusBookmarksModule.py conduit/modules/NetworkModule/Server.py conduit/modules/RhythmboxModule/RhythmboxModule.py conduit/modules/ShutterflyModule/ShutterflyModule.py conduit/modules/ShutterflyModule/shutterfly/shutterfly.py conduit/modules/SmugMugModule/SmugMugModule.py conduit/modules/ZotoModule/ZotoModule.py conduit-0.3.17/po/POTFILES.skip0000644000175000017500000000137011326116717012731 00000000000000conduit/Main.py conduit/libconduit.py conduit/XMLSerialization.py data/conduit.desktop.in tools/eog-plugin/conduit.py tools/totem-plugin/conduit.py tools/test-db-wrapper/main.ui conduit/modules/TestModule.py conduit/modules/SettingsModule/GConfUtils.py conduit/modules/SettingsModule/layout_loader.py conduit/modules/SettingsModule/layout_save.py conduit/modules/UNSUPPORTED/RTMModule/RTMModule.py conduit/modules/UNSUPPORTED/RTMModule/config.glade conduit/modules/UNSUPPORTED/PicasaDesktopModule/PicasaDesktopModule.py conduit/modules/UNSUPPORTED/PicasaDesktopModule/config.glade conduit/modules/UNSUPPORTED/RhythmboxDBusModule/RhythmboxDBusModule.py conduit/modules/UNSUPPORTED/RhythmboxDBusModule/config.glade conduit/modules/UNSUPPORTED/SynceModule.py conduit-0.3.17/po/de.po0000644000175000017500000011030111321742770011536 00000000000000# translation of conduit.HEAD.po to German # Copyright (C) 2008 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the Conduit package. # # Andre Klapper , 2008, 2009. # Hendrik Richter , 2008. # Mario Blättermann , 2008, 2009. # Christian Kirbach , 2009, 2010. msgid "" msgstr "" "Project-Id-Version: conduit\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-01-08 12:51+0100\n" "PO-Revision-Date: 2010-01-08 12:56+0100\n" "Last-Translator: Christian Kirbach \n" "Language-Team: German \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: German\n" "X-Poedit-Country: GERMANY\n" #: ../data/conduit.desktop.in.in.h:1 msgid "Conduit Synchronizer" msgstr "Conduit Datenabgleich" #: ../data/conduit.desktop.in.in.h:2 msgid "Synchronization for GNOME" msgstr "Datenabgleich für GNOME" #: ../conduit/Knowledge.py:8 msgid "What Do You Want to Synchronize?" msgstr "Was wollen Sie abgleichen?" #: ../conduit/Knowledge.py:9 msgid "Drag and Drop a Data Provider on the Canvas" msgstr "Legen Sie eine Datenquelle im Ansichtsbereich ab" #: ../conduit/Knowledge.py:11 msgid "Synchronization Group Created" msgstr "Abgleichgruppe wurde erstellt" #: ../conduit/Knowledge.py:12 msgid "Add Another Data Provider to the Group to Synchronize it" msgstr "Fügen Sie der Gruppe eine Datenquelle hinzu, um abzugleichen" #: ../conduit/Knowledge.py:14 msgid "You Are Now Ready to Synchronize" msgstr "Sie sind nun bereit zum Abgleich" #: ../conduit/Knowledge.py:15 msgid "Right Click on Group for Options" msgstr "Für Optionen klicken Sie mit der rechten Maustaste auf »Gruppe«" #: ../conduit/Knowledge.py:24 msgid "Synchronize Two Folders" msgstr "Zwei Ordner abgleichen" #: ../conduit/Knowledge.py:27 msgid "Backup Folder to Box.net" msgstr "Ordner in Box.net sichern" #: ../conduit/Knowledge.py:30 msgid "Synchronize Tagged F-Spot Photos to Flickr" msgstr "Markierte F-Spot-Fotos mit Flickr abgleichen" #: ../conduit/Knowledge.py:33 msgid "Synchronize Photos to Flickr" msgstr "Fotos mit Flickr abgleichen" #: ../conduit/Knowledge.py:36 msgid "Upload Photos to Facebook" msgstr "Fotos nach Facebook hochladen" #: ../conduit/Knowledge.py:39 msgid "Synchronize Desktop Wallpaper from a RSS Feed" msgstr "Hintergrund der Arbeitsfläche mit RSS-Feed abgleichen" #: ../conduit/Main.py:59 msgid "Conduit is a synchronization application." msgstr "Conduit ist eine Anwendung zum Datenabgleich." #: ../conduit/Main.py:63 #, python-format msgid "Launch without GUI. [default: %default]" msgstr "Ohne GUI starten. [Vorgabe: %default]" #: ../conduit/Main.py:67 #, python-format msgid "Save dataprovider configuration to FILE. [default: %default]" msgstr "Konfiguration der Datenquelle in DATEI speichern. [Vorgabe: %default]" #: ../conduit/Main.py:71 #, python-format msgid "Iconify on startup. [default: %default]" msgstr "Im minimierten Zustand starten. [Vorgabe: %default]" #: ../conduit/Main.py:75 #, python-format msgid "Run with the specified UI. [default: %default]" msgstr "Mit der angegebenen Benutzeroberfläche starten. [Vorgabe: %default]" #: ../conduit/Main.py:79 msgid "Only load modules in the named files. [default: load all modules]" msgstr "" "Nur Module aus den genannten Dateien laden. [Vorgabe: alle Module laden]" #: ../conduit/Main.py:83 msgid "Do not load modules in the named files. [default: load all modules]" msgstr "" "Keine Module aus den genannten Dateien laden. [Vorgabe: alle Module laden]" #: ../conduit/Main.py:87 msgid "" "Explicitly set internal Conduit settings (keys) to the given values for this " "session. [default: do not set]" msgstr "" "Explizit interne Conduit-Einstellungen (Schlüssel) für diese Sitzung auf die " "angegebenen Werte setzen. [Vorgabe: nicht setzen]" #: ../conduit/Main.py:91 #, python-format msgid "" "Enable loading of unfinished or unsupported dataproviders. [default: %" "default]" msgstr "" "Laden von unvollständig eingerichteten oder nicht unterstützten Datenquellen " "aktivieren. [Vorgabe: %default]" #: ../conduit/Main.py:95 #, python-format msgid "Generate more debugging information. [default: %default]" msgstr "Mehr Informationen zur Fehlerdiagnose erstellen. [Vorgabe: %default]" #: ../conduit/Main.py:99 #, python-format msgid "Generate less debugging information. [default: %default]" msgstr "" "Weniger Informationen zur Fehlerdiagnose erstellen. [Vorgabe: %default]" #: ../conduit/Main.py:103 #, python-format msgid "Generate no debugging information. [default: %default]" msgstr "Keine Informationen zur Fehlerdiagnose erstellen. [Vorgabe: %default]" #: ../conduit/dataproviders/DataProvider.py:22 msgid "Ready" msgstr "Bereit" #: ../conduit/dataproviders/DataProvider.py:23 msgid "New data to sync" msgstr "Neue Daten zum Abgleichen" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Refreshing..." msgstr "Wird aufgefrischt …" #: ../conduit/dataproviders/DataProvider.py:25 msgid "Refreshed OK" msgstr "Auffrischen erfolgreich" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Refreshing" msgstr "Auffrischen gescheitert" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronizing..." msgstr "Datenabgleich …" #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronized OK" msgstr "Datenabgleich erfolgreich" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Error Synchronizing" msgstr "Datenabgleich gescheitert" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Synchronization Skipped" msgstr "Datenabgleich übersprungen" #: ../conduit/dataproviders/DataProvider.py:31 msgid "Synchronization Cancelled" msgstr "Datenabgleich abgebrochen" #: ../conduit/dataproviders/DataProvider.py:32 msgid "Synchronization Conflict" msgstr "Konflikt beim Datenabgleich" #: ../conduit/dataproviders/DataProvider.py:33 msgid "Not Configured" msgstr "Nicht konfiguriert" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "640x480" msgstr "640x480" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "800x600" msgstr "800x600" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "1024x768" msgstr "1024x768" #. Signifies that a conversion should not take place #: ../conduit/dataproviders/Image.py:35 #: ../conduit/modules/N800Module/N800Module.py:57 msgid "None" msgstr "Nichts" #. Default Categories for the DataProviders #: ../conduit/dataproviders/__init__.py:6 msgid "Files and Folders" msgstr "Dateien und Ordner" #: ../conduit/dataproviders/__init__.py:7 #: ../conduit/modules/iPodModule/iPodModule.py:179 msgid "Notes" msgstr "Notizen" #: ../conduit/dataproviders/__init__.py:8 #: ../conduit/modules/iPodModule/iPodModule.py:367 msgid "Photos" msgstr "Fotos" #: ../conduit/dataproviders/__init__.py:9 msgid "Office" msgstr "Büro-Anwendungen" #: ../conduit/dataproviders/__init__.py:10 msgid "Settings" msgstr "Einstellungen" #: ../conduit/dataproviders/__init__.py:11 msgid "Miscellaneous" msgstr "Verschiedenes" #: ../conduit/dataproviders/__init__.py:12 msgid "Media" msgstr "Medien" #: ../conduit/dataproviders/__init__.py:13 msgid "Bookmarks" msgstr "Lesezeichen" #: ../conduit/dataproviders/__init__.py:14 msgid "Test" msgstr "Test" #: ../conduit/gtkui/Canvas.py:152 msgid "Drag a Data Provider here to continue" msgstr "Legen Sie hier eine Datenquelle ab, um fortzufahren" #: ../conduit/gtkui/Canvas.py:217 msgid "Show me" msgstr "Zeigen" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:91 msgid "Source" msgstr "Quelle" #: ../conduit/gtkui/ConflictResolver.py:105 msgid "Resolution" msgstr "Lösung" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:110 msgid "Sink" msgstr "Empfänger" #: ../conduit/gtkui/ConflictResolver.py:150 #: ../conduit/gtkui/ConflictResolver.py:151 #, python-format msgid "Conflicts (%s)" msgstr "Konflikte (%s)" #. name, #url #: ../conduit/gtkui/UI.py:33 msgid "Introduction" msgstr "Einführung" #: ../conduit/gtkui/UI.py:34 msgid "Writing a Data Provider" msgstr "Eine Datenquelle schreiben" #: ../conduit/gtkui/UI.py:35 msgid "API Documentation" msgstr "API-Dokumentation" #: ../conduit/gtkui/UI.py:36 msgid "Test Results" msgstr "Testergebnisse" #: ../conduit/gtkui/UI.py:52 msgid "Examples" msgstr "Beispiele" #. Build some liststores to display #: ../conduit/gtkui/UI.py:139 msgid "Convert from" msgstr "Umwandeln von" #: ../conduit/gtkui/UI.py:140 msgid "into" msgstr "nach" #: ../conduit/gtkui/UI.py:190 msgid "Relationship Database" msgstr "Beziehungsdatenbank" #: ../conduit/gtkui/UI.py:194 msgid "Conversions Available" msgstr "Umwandlungen verfügbar" #: ../conduit/gtkui/UI.py:200 ../conduit/gtkui/Tree.py:348 #: ../conduit/modules/FileModule/FileConfiguration.py:117 msgid "Name" msgstr "Name" #: ../conduit/gtkui/UI.py:204 msgid "Loaded" msgstr "Geladen" #: ../conduit/gtkui/UI.py:329 #, python-format msgid " - %s (Development Version)" msgstr " - %s (Entwicklerversion)" #: ../conduit/gtkui/UI.py:331 msgid " - Running Uninstalled" msgstr " - Ausführung ohne Installation" #: ../conduit/gtkui/UI.py:375 msgid "Developers" msgstr "Enwickler" #: ../conduit/gtkui/UI.py:539 ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "Datenabgleich läuft. Soll er abgebrochen werden?" #: ../conduit/gtkui/UI.py:711 msgid "_Synchronize All" msgstr "_Alle abgleichen" #: ../conduit/gtkui/UI.py:711 msgid "Synchronizes All Groups" msgstr "Alle Gruppen abgleichen" #: ../conduit/gtkui/UI.py:712 msgid "_Cancel Synchronization" msgstr "Datena_bgleich abbrechen" #: ../conduit/gtkui/UI.py:712 msgid "Cancels Currently Synchronizing Groups" msgstr "Momentanen Abgleich der Gruppen abbrechen" #: ../conduit/gtkui/UI.py:713 msgid "_Quit" msgstr "_Beenden" #: ../conduit/gtkui/UI.py:713 msgid "Close Conduit" msgstr "Conduit schließen" #: ../conduit/gtkui/UI.py:753 msgid "Synchronization Error" msgstr "Fehler beim Datenabgleich" #: ../conduit/gtkui/UI.py:756 msgid "Synchronization Complete" msgstr "Datenabgleich abgeschlossen" #: ../conduit/gtkui/UI.py:764 msgid "Synchronizing" msgstr "Datenabgleich läuft" #: ../conduit/gtkui/Tree.py:357 msgid "Description" msgstr "Beschreibung" #: ../conduit/gtkui/ConfigItems.py:733 #, python-format msgid "Total: %d" msgstr "Gesamt: %d" #: ../conduit/gtkui/WindowConfigurator.py:14 msgid "Configure" msgstr "Einstellungen" #: ../conduit/modules/BackpackModule/BackpackModule.py:58 msgid "Backpack Notes" msgstr "Backpack-Notizen" #: ../conduit/modules/BackpackModule/BackpackModule.py:59 msgid "Store things in Backpack Notes" msgstr "Dinge in Backpack-Notizen speichern" #: ../conduit/modules/BackpackModule/BackpackModule.py:105 #: ../conduit/modules/FlickrModule/FlickrModule.py:307 #: ../conduit/modules/ZotoModule/ZotoModule.py:243 msgid "Account details" msgstr "Konto-Details" #: ../conduit/modules/BackpackModule/BackpackModule.py:106 msgid "Login" msgstr "Anmelden" #: ../conduit/modules/BackpackModule/BackpackModule.py:109 msgid "API key" msgstr "API-Schlüssel" #: ../conduit/modules/BackpackModule/BackpackModule.py:112 msgid "Saved notes" msgstr "Gespeicherte Notizen" #: ../conduit/modules/BackpackModule/BackpackModule.py:113 msgid "Save notes in page" msgstr "Notizen in dieser Seite speichern" #: ../conduit/modules/BansheeModule/BansheeModule.py:52 msgid "Banshee Playlists" msgstr "Banshee-Wiedergabeliste" #: ../conduit/modules/BansheeModule/BansheeModule.py:53 msgid "Synchronize your Banshee playlists" msgstr "Banshee-Wiedergabelisten abgleichen" #: ../conduit/modules/BansheeModule/BansheeModule.py:187 #: ../conduit/modules/BansheeModule/BansheeModule.py:188 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:116 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:117 msgid "Playlists" msgstr "Wiedergabelisten" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 msgid "Box.net" msgstr "Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 msgid "Synchronize your Box.net files" msgstr "Box.net-Dateien abgleichen" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:290 #: ../conduit/modules/FileModule/FileModule.py:82 msgid "Folder" msgstr "Ordner" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:291 msgid "Folder name" msgstr "Ordnername" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:295 msgid "Load folders" msgstr "Ordner laden" #: ../conduit/modules/ConverterModule.py:91 msgid "Note-" msgstr "Notiz-" #: ../conduit/modules/DesktopWallpaperModule.py:38 msgid "Wallpaper" msgstr "Hintergrund" #: ../conduit/modules/DesktopWallpaperModule.py:39 msgid "Changes your Desktop Wallpaper" msgstr "Ändern Ihres Arbeitsflächenhintergrundes" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:107 #, python-format msgid "Select %s" msgstr "%s auswählen" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:127 msgid "Evolution Contacts" msgstr "Evolution-Kontakte" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:128 msgid "Synchronize your contacts" msgstr "Kontakte abgleichen" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:178 msgid "Evolution Calendar" msgstr "Evolution-Kalender" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:179 msgid "Synchronize your calendar" msgstr "Kalender abgleichen" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:240 msgid "Evolution Tasks" msgstr "Evolution-Aufgaben" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:241 msgid "Synchronize your tasks" msgstr "Aufgaben abgleichen" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:297 msgid "Evolution Memos" msgstr "Evolution-Notizen" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:298 msgid "Synchronize your memos" msgstr "Notizen abgleichen" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 msgid "Facebook" msgstr "Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:39 msgid "Synchronize your Facebook photos" msgstr "Facebook-Fotos abgleichen" #: ../conduit/modules/FacebookModule/FacebookModule.py:124 #: ../conduit/modules/FlickrModule/FlickrModule.py:282 msgid "Loading album list..." msgstr "Albenliste wird geladen …" #: ../conduit/modules/FacebookModule/FacebookModule.py:128 msgid "Failed to connect" msgstr "Verbindung gescheitert" #: ../conduit/modules/FacebookModule/FacebookModule.py:131 msgid "Logged in" msgstr "Angemeldet" #: ../conduit/modules/FacebookModule/FacebookModule.py:133 msgid "Failed to login" msgstr "Anmeldung gescheitert" #: ../conduit/modules/FacebookModule/FacebookModule.py:145 #: ../conduit/modules/FspotModule/FspotModule.py:243 msgid "Status" msgstr "Status" #: ../conduit/modules/FacebookModule/FacebookModule.py:150 #: ../conduit/modules/iPodModule/iPodModule.py:461 #: ../conduit/modules/ZotoModule/ZotoModule.py:252 msgid "Album" msgstr "Album" #: ../conduit/modules/FacebookModule/FacebookModule.py:151 msgid "Album name" msgstr "Albumname" #: ../conduit/modules/FacebookModule/FacebookModule.py:156 msgid "Load albums" msgstr "Alben laden" #: ../conduit/modules/FeedModule/FeedModule.py:58 msgid "RSS Feed" msgstr "RSS-Feed" #: ../conduit/modules/FeedModule/FeedModule.py:59 msgid "Synchronize data from RSS enclosures" msgstr "Daten aus RSS-Containern abgleichen" #. FIXME: Add Randomize #: ../conduit/modules/FeedModule/FeedModule.py:114 msgid "Feed details" msgstr "Feed-Details" #: ../conduit/modules/FeedModule/FeedModule.py:115 msgid "Feed address" msgstr "Feed-Adresse" #: ../conduit/modules/FeedModule/FeedModule.py:118 msgid "Enclosure settings" msgstr "Einstellungen zur Einbettung" #: ../conduit/modules/FeedModule/FeedModule.py:119 msgid "Limit downloaded enclosures" msgstr "Eingebettete Downloads begrenzen" #: ../conduit/modules/FeedModule/FeedModule.py:125 msgid "Limit to" msgstr "Begrenzen auf" #: ../conduit/modules/FeedModule/FeedModule.py:129 msgid "Randomize enclosures" msgstr "Zufällig einbetten" #: ../conduit/modules/FeedModule/FeedModule.py:133 msgid "Download types" msgstr "Download-Typen" #: ../conduit/modules/FeedModule/FeedModule.py:134 msgid "Download audio files" msgstr "Audio-Dateien herunterladen" #: ../conduit/modules/FeedModule/FeedModule.py:135 msgid "Download video files" msgstr "Video-Dateien herunterladen" #: ../conduit/modules/FeedModule/FeedModule.py:136 msgid "Download photo files" msgstr "Foto-Dateien herunterladen" #: ../conduit/modules/FileModule/FileConfiguration.py:111 msgid "Icon" msgstr "Symbol" #: ../conduit/modules/FileModule/FileConfiguration.py:123 #: ../conduit/modules/GConfModule/GConfModule.py:138 msgid "Items" msgstr "Elemente" #: ../conduit/modules/FileModule/FileConfiguration.py:149 #, python-format msgid "Contains %s files" msgstr "Enthält %s Dateien" #: ../conduit/modules/FileModule/FileConfiguration.py:248 msgid "Include file..." msgstr "Datei hinzufügen …" #: ../conduit/modules/FileModule/FileConfiguration.py:258 msgid "All files" msgstr "Alle Dateien" #: ../conduit/modules/FileModule/FileConfiguration.py:271 msgid "Include folder..." msgstr "Ordner hinzufügen …" #: ../conduit/modules/FileModule/FileConfiguration.py:314 msgid "Please Name All Folders" msgstr "Bitte benennen Sie alle Ordner" #: ../conduit/modules/FileModule/FileConfiguration.py:315 msgid "" "All folders require a descriptive name. To name a folder simply click on it" msgstr "" "Jeder Ordner benötigt einen beschreibenden Namen. Um einen Ordner zu " "benennen, müssen Sie ihn nur anklicken." #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "Dateien" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "Quelle, um mehrere Dateien abzugleichen" #: ../conduit/modules/FileModule/FileModule.py:83 msgid "Synchronize folders" msgstr "Ordner abgleichen" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:40 msgid "Firefox 3 Bookmarks" msgstr "Firefox-3-Lesezeichen" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:41 msgid "Syncronize your Firefox 3 Bookmarks" msgstr "Firefox-3-Lesezeichen abgleichen" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:100 msgid "Firefox Profile" msgstr "Firefox-Profil" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 msgid "Flickr" msgstr "Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 msgid "Synchronize your Flickr.com photos" msgstr "Flickr.com-Fotos abgleichen" #: ../conduit/modules/FlickrModule/FlickrModule.py:287 msgid "Failed to connect." msgstr "Verbindung gescheitert." #: ../conduit/modules/FlickrModule/FlickrModule.py:290 msgid "Album names loaded." msgstr "Albumnamen wurden geladen." #: ../conduit/modules/FlickrModule/FlickrModule.py:292 msgid "Failed to login." msgstr "Anmeldung gescheitert." #: ../conduit/modules/FlickrModule/FlickrModule.py:303 msgid "Logging in, please wait..." msgstr "Anmeldung läuft, bitte warten …" #: ../conduit/modules/FlickrModule/FlickrModule.py:308 #: ../conduit/modules/GoogleBookmarksModule.py:67 #: ../conduit/modules/ZotoModule/ZotoModule.py:244 msgid "Username" msgstr "Benutzername" #: ../conduit/modules/FlickrModule/FlickrModule.py:319 msgid "Authenticate" msgstr "Legitimieren" #: ../conduit/modules/FlickrModule/FlickrModule.py:323 #: ../conduit/modules/ZotoModule/ZotoModule.py:251 msgid "Saved photo settings" msgstr "Einstellungen für gespeicherte Fotos" #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "Resize photos" msgstr "Fotogrößen ändern" #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "Do not resize" msgstr "Größe nicht ändern" #: ../conduit/modules/FlickrModule/FlickrModule.py:332 msgid "Photos are public" msgstr "Fotos sind öffentlich" #: ../conduit/modules/FspotModule/FspotModule.py:25 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 msgid "Synchronize your F-Spot photos" msgstr "F-Spot-Fotos abgleichen" #: ../conduit/modules/FspotModule/FspotModule.py:152 msgid "F-Spot DBus interface is operating in read-only mode" msgstr "F-Spots DBus-Schnittstelle arbeitet im Nur-Lesen-Modus" #: ../conduit/modules/FspotModule/FspotModule.py:218 msgid "F-Spot is running" msgstr "F-Spot läuft" #: ../conduit/modules/FspotModule/FspotModule.py:219 msgid "Please start F-Spot or activate the D-Bus Extension" msgstr "Bitte starten Sie F-Spot oder aktivieren Sie die D-Bus-Erweiterung" #: ../conduit/modules/FspotModule/FspotModule.py:244 msgid "Start F-Spot" msgstr "F-Spot starten" #: ../conduit/modules/FspotModule/FspotModule.py:248 #: ../conduit/modules/FspotModule/FspotModule.py:249 msgid "Tags" msgstr "Markierungen" #: ../conduit/modules/FspotModule/FspotModule.py:262 msgid "Add tags" msgstr "Markierungen hinzufügen" #: ../conduit/modules/FspotModule/FspotModule.py:263 msgid "Tag name" msgstr "Name der Markierung" #: ../conduit/modules/FspotModule/FspotModule.py:266 msgid "Add tag" msgstr "Markierung hinzufügen" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "Application Settings" msgstr "Anwendungseinstellungen" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Synchronize your application settings" msgstr "Abgleichen Ihrer Anwendungseinstellungen" #: ../conduit/modules/GConfModule/GConfModule.py:31 msgid "Metacity" msgstr "Metacity" #: ../conduit/modules/GConfModule/GConfModule.py:32 msgid "Nautilus" msgstr "Nautilus" #: ../conduit/modules/GConfModule/GConfModule.py:33 msgid "Preferred Applications" msgstr "Bevorzugte Anwendungen" #: ../conduit/modules/GConfModule/GConfModule.py:34 msgid "Desktop Interface" msgstr "Arbeitsflächenschnittstelle" #: ../conduit/modules/GConfModule/GConfModule.py:35 msgid "Gnome Terminal" msgstr "GNOME-Terminal" #: ../conduit/modules/GConfModule/GConfModule.py:137 msgid "Applications to Synchronize" msgstr "Abzugleichende Anwendungen " #: ../conduit/modules/GoogleBookmarksModule.py:19 msgid "Google Bookmarks" msgstr "Google-Lesezeichen" #: ../conduit/modules/GoogleBookmarksModule.py:20 msgid "Sync your Google Bookmarks" msgstr "Google-Lesezeichen abgleichen" #: ../conduit/modules/GoogleBookmarksModule.py:66 msgid "Login Details" msgstr "Anmeldungsdetails" #: ../conduit/modules/GoogleBookmarksModule.py:70 #: ../conduit/modules/ZotoModule/ZotoModule.py:247 msgid "Password" msgstr "Passwort" #: ../conduit/modules/GoogleModule/GoogleModule.py:399 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:4 msgid "Google Calendar" msgstr "Google-Kalender" #: ../conduit/modules/GoogleModule/GoogleModule.py:400 msgid "Synchronize your Google Calendar" msgstr "Google-Kalender abgleichen" #: ../conduit/modules/GoogleModule/GoogleModule.py:582 msgid "Picasa" msgstr "Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:583 msgid "Synchronize your Google Picasa photos" msgstr "Picasa-Fotos abgleichen" #: ../conduit/modules/GoogleModule/GoogleModule.py:745 msgid "Google Contacts" msgstr "Google-Kontakte" # Gmail heißt in Deutschland GoogleMail #: ../conduit/modules/GoogleModule/GoogleModule.py:746 msgid "Synchronize your Google Mail contacts" msgstr "GoogleMail-Kontakte abgleichen" #: ../conduit/modules/GoogleModule/GoogleModule.py:1076 msgid "Google Documents" msgstr "Google-Dokumente" #: ../conduit/modules/GoogleModule/GoogleModule.py:1077 msgid "Synchronize your Google Documents" msgstr "Google-Dokumente abgleichen" #: ../conduit/modules/GoogleModule/GoogleModule.py:1322 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:69 msgid "Unknown" msgstr "Unbekannt" #: ../conduit/modules/GoogleModule/GoogleModule.py:1323 msgid "miscellaneous" msgstr "Verschiedenes" #: ../conduit/modules/GoogleModule/GoogleModule.py:1324 msgid "No description." msgstr "Keine Beschreibung." #: ../conduit/modules/GoogleModule/GoogleModule.py:1333 msgid "YouTube" msgstr "YouTube" #: ../conduit/modules/GoogleModule/GoogleModule.py:1334 msgid "Synchronize data from YouTube" msgstr "YouTube-Daten abgleichen" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:1 msgid "Account Details" msgstr "Konto-Details" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:2 msgid "Calendar:" msgstr "Kalender:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:3 msgid "Email:" msgstr "E-Mail:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:5 msgid "Load Calendars" msgstr "Kalender laden" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:6 msgid "Password:" msgstr "Passwort:" #: ../conduit/modules/iPodModule/iPodModule.py:180 msgid "Synchronize your iPod notes" msgstr "iPod-Notizen abgleichen" #: ../conduit/modules/iPodModule/iPodModule.py:295 #: ../conduit/modules/SynceModule.py:311 msgid "Contacts" msgstr "Kontakte" #: ../conduit/modules/iPodModule/iPodModule.py:296 msgid "Synchronize your iPod contacts" msgstr "iPod-Kontakte abgleichen" #: ../conduit/modules/iPodModule/iPodModule.py:331 #: ../conduit/modules/SynceModule.py:449 msgid "Calendar" msgstr "Kalender" #: ../conduit/modules/iPodModule/iPodModule.py:332 msgid "Synchronize your iPod calendar" msgstr "iPod-Kalender abgleichen" #: ../conduit/modules/iPodModule/iPodModule.py:368 msgid "Synchronize your iPod photos" msgstr "iPod-Fotos abgleichen" #: ../conduit/modules/iPodModule/iPodModule.py:465 msgid "Delete" msgstr "Löschen" #: ../conduit/modules/iPodModule/iPodModule.py:695 #: ../conduit/modules/iPodModule/iPodModule.py:812 #: ../conduit/modules/N800Module/N800Module.py:77 msgid "Encoding" msgstr "Kodierung" #: ../conduit/modules/iPodModule/iPodModule.py:811 msgid "Conversion options" msgstr "Umwandlungsoptionen" #: ../conduit/modules/iPodModule/iPodModule.py:816 msgid "Keep converted files" msgstr "Umgewandelte Dateien behalten" #: ../conduit/modules/iPodModule/iPodModule.py:846 msgid "iPod Music" msgstr "iPod-Musik" #: ../conduit/modules/iPodModule/iPodModule.py:847 msgid "Synchronize your iPod music" msgstr "iPod-Musik abgleichen" #: ../conduit/modules/iPodModule/iPodModule.py:882 msgid "iPod Video" msgstr "iPod-Video" #: ../conduit/modules/iPodModule/iPodModule.py:883 msgid "Synchronize your iPod videos" msgstr "iPod-Videos abgleichen" #: ../conduit/modules/iPodModule/iPodModule.py:907 msgid "Movie" msgstr "Film" #: ../conduit/modules/iPodModule/iPodModule.py:908 msgid "Music Video" msgstr "Musik-Video" # Was soll das hier in diesem Kontext...? #: ../conduit/modules/iPodModule/iPodModule.py:909 msgid "TV Show" msgstr "Fernseh-Show" #: ../conduit/modules/iPodModule/iPodModule.py:911 msgid "Video kind" msgstr "Art des Videos" #. Translators: Translate this in derived classes. #: ../conduit/modules/N800Module/N800Module.py:55 msgid "Conduit" msgstr "Conduit" #: ../conduit/modules/N800Module/N800Module.py:105 msgid "N800 Files" msgstr "N800-Dateien" #: ../conduit/modules/N800Module/N800Module.py:106 msgid "Synchronizes files/folders to a N800 device" msgstr "Dateien und Ordner mit einem N800-Gerät abgleichen" # CHECK #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:111 msgid "Backups" msgstr "Sicherungen" #: ../conduit/modules/N800Module/N800Module.py:126 msgid "N800 Music" msgstr "N800-Musik" #: ../conduit/modules/N800Module/N800Module.py:127 msgid "Synchronizes music to a N800 device" msgstr "Musik mit einem N800-Gerät abgleichen" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:133 msgid "Music" msgstr "Musik" #: ../conduit/modules/N800Module/N800Module.py:150 msgid "N800 Videos" msgstr "N800-Videos" #: ../conduit/modules/N800Module/N800Module.py:151 msgid "Synchronizes video to a N800 device" msgstr "Videos mit einem N800-Gerät abgleichen" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:157 msgid "Video" msgstr "Videos" #: ../conduit/modules/N800Module/N800Module.py:174 msgid "N800 Photos" msgstr "N800-Fotos" #: ../conduit/modules/N800Module/N800Module.py:175 msgid "Synchronizes photos to an N800 device" msgstr "Fotos mit einem N800-Gerät abgleichen" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:181 msgid "Photo" msgstr "Fotos" #: ../conduit/modules/NautilusBookmarksModule.py:19 msgid "Nautilus Bookmarks" msgstr "Nautilus-Lesezeichen" #: ../conduit/modules/NautilusBookmarksModule.py:20 msgid "Sync your Nautilus Bookmarks" msgstr "Nautilus-Lesezeichen abgleichen" #: ../conduit/modules/NautilusBookmarksModule.py:145 msgid "Sync bookmarks to local places/files" msgstr "Lesezeichen mit lokalen Orten oder Dateien abgleichen" #: ../conduit/modules/NautilusBookmarksModule.py:148 msgid "Sync bookmarks to remote places/files" msgstr "Lesezeichen mit entfernten Orten oder Dateien abgleichen" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "Netzwerk" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "Datenabgleich über Netzwerk" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:44 msgid "Rhythmbox Music" msgstr "Rhythmbox-Musik" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:45 msgid "Synchronize songs from your Rhythmbox playlists" msgstr "Lieder aus Rhythmbox-Wiedergabelisten abgleichen" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 msgid "Shutterfly" msgstr "Shutterfly" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 msgid "Synchronize your Shutterfly photos" msgstr "Shutterfly-Fotos abgleichen" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "%d.%m.%Y, %H:%M:%S" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 msgid "SmugMug" msgstr "SmugMug" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 msgid "Synchronize your SmugMug.com photos" msgstr "SmugMug.com-Fotos abgleichen" #: ../conduit/modules/SynceModule.py:139 msgid "Create Partnership" msgstr "Partnerschaft erstellen" #: ../conduit/modules/SynceModule.py:312 msgid "Windows Mobile Contacts" msgstr "Windows-Mobile-Kontakte" #: ../conduit/modules/SynceModule.py:450 msgid "Windows Mobile Calendar" msgstr "Windows-Mobile-Kalender" #: ../conduit/modules/SynceModule.py:459 msgid "Tasks" msgstr "Aufgaben" #: ../conduit/modules/SynceModule.py:460 msgid "Windows Mobile Tasks" msgstr "Windows-Mobile-Aufgaben" #: ../conduit/modules/ZotoModule/ZotoModule.py:154 msgid "Zoto" msgstr "Zoto" #: ../conduit/modules/ZotoModule/ZotoModule.py:155 msgid "Synchronize your Zoto photos" msgstr "Zoto-Fotos abgleichen" #~ msgid "Default Synchronization Options" #~ msgstr "Vorgegebene Einstellungen zum Abgleich" #~ msgid "General" #~ msgstr "Allgemein" #~ msgid "Always Up-To-Date" #~ msgstr "Immer aktuell" #~ msgid "Ask Me What to Do" #~ msgstr "Beim Benutzer nachfragen" #~ msgid "Ask me what to do" #~ msgstr "Beim Benutzer nachfragen" #~ msgid "Cancel Synchronization" #~ msgstr "Datenabgleich abbrechen" #~ msgid "Cancel currently-synchronizing groups" #~ msgstr "Aktuelle Abgleichgruppen abbrechen" #~ msgid "Clear Canvas" #~ msgstr "Ansichtsbereich leeren" #~ msgid "Compare" #~ msgstr "Vergleichen" #~ msgid "Conduit Preferences" #~ msgstr "Conduit – Einstellungen" #~ msgid "Configuration" #~ msgstr "Allgemein" #~ msgid "Configure Item" #~ msgstr "Einstellungen" #~ msgid "Configure the synchronization settings for this item" #~ msgstr "Die Abgleicheinstellungen für dieses Element festlegen" #~ msgid "Conflict Options" #~ msgstr "Konflikteinstellungen" #~ msgid "Conflicts" #~ msgstr "Konflikte" #~ msgid "Contents" #~ msgstr "Inhalte" #~ msgid "Data Conversions" #~ msgstr "Datenumwandler" #~ msgid "Data Providers" #~ msgstr "Datenquellen" #~ msgid "Delete Group" #~ msgstr "Gruppe löschen" #~ msgid "Delete Item" #~ msgstr "Element löschen" #~ msgid "Delete Options" #~ msgstr "Optionen löschen" #~ msgid "Delete from the corresponding sink" #~ msgstr "Aus dem zugehörigen Empfänger löschen" #~ msgid "Delete the Corresponding Item" #~ msgstr "Das dazugehörige Element löschen" #~ msgid "Editor" #~ msgstr "Editor" #~ msgid "Minimize to notification area" #~ msgstr "Im Benachrichtigungsfeld minimieren" #~ msgid "Refresh Group" #~ msgstr "Gruppe auffrischen" #~ msgid "Refresh Item" #~ msgstr "Element auffrischen" #~ msgid "Replace the Older Item" #~ msgstr "Älteres Element ersetzen" #~ msgid "Replace the older item" #~ msgstr "Älteres Element ersetzen" #~ msgid "Resolve Conflicts" #~ msgstr "Konflikte auflösen" #~ msgid "Save settings on exit" #~ msgstr "Einstellungen beim Beenden speichern" #~ msgid "Show Hints" #~ msgstr "Hinweise anzeigen" #~ msgid "Show status icon" #~ msgstr "Statussymbol anzeigen" #~ msgid "Skip" #~ msgstr "Überspringen" #~ msgid "Slow Synchronization" #~ msgstr "Langsamer Datenabgleich" #~ msgid "Start Conduit at login" #~ msgstr "Conduit beim Anmelden starten" #~ msgid "Synchronization Options" #~ msgstr "Datenabgleich-Optionen" #~ msgid "Synchronize All" #~ msgstr "Alles abgleichen" #~ msgid "Synchronize Group" #~ msgstr "Gruppe abgleichen" #~ msgid "Synchronize group" #~ msgstr "Gruppe abgleichen" #~ msgid "Synchronizes all groups" #~ msgstr "Alle Gruppen abgleichen" #~ msgid "Title" #~ msgstr "Titel" #~ msgid "Two-Way Synchronization" #~ msgstr "Zweiwege-Abgleich" #~ msgid "When an item has been deleted:" #~ msgstr "Wenn ein Element gelöscht wurde:" #~ msgid "When an item is deleted..." #~ msgstr "Wenn ein Element gelöscht wurde …" #~ msgid "When there is a conflict..." #~ msgstr "Wenn ein Konflikt auftritt …" #~ msgid "When there is a two-way conflict:" #~ msgstr "Wenn ein zweiseitiger Konflikt auftritt:" #~ msgid "_Edit" #~ msgstr "_Bearbeiten" #~ msgid "_File" #~ msgstr "_Datei" #~ msgid "_Help" #~ msgstr "_Hilfe" #~ msgid "Items to Synchronize" #~ msgstr "Elemente zum Abgleichen" #~ msgid "Add Directory" #~ msgstr "Ordner hinzufügen" #~ msgid "Add File" #~ msgstr "Datei hinzufügen" #~ msgid "Advanced" #~ msgstr "Fortgeschritten" #~ msgid "File Configuration" #~ msgstr "Datei-Einstellungen" #~ msgid "Folder Configuration" #~ msgstr "Ordner-Einstellungen" #~ msgid "Folder Location:" #~ msgstr "Ordnerort:" #~ msgid "Follow Symbolic Links" #~ msgstr "Symbolischen Verknüpfungen folgen" #~ msgid "Ignore File Modification Times" #~ msgstr "Änderungsdatum von Dateien ignorieren" #~ msgid "Include Hidden Files" #~ msgstr "Verborgene Dateien einschließen" #~ msgid "Select A Folder" #~ msgstr "Wählen Sie einen Ordner" #~ msgid "Downloaded Document Format" #~ msgstr "Dateiformate" #~ msgid "Presentations" #~ msgstr "Präsentationen" #~ msgid "Spreadsheets" #~ msgstr "Tabellenkalkulationen" #~ msgid "Download Videos" #~ msgstr "Videos herunterladen" #~ msgid "Favorites of above user" #~ msgstr "Favoriten von obigem Benutzer" #~ msgid "Max retrieved videos (0 is unlimited):" #~ msgstr "Anzahl herunterzuladender Videos (0 für unbegrenzt):" #~ msgid "Top rated" #~ msgstr "Hohe Bewertung" #~ msgid "Uploaded by above user" #~ msgstr "Hochgeladen von obigem Benutzer" #~ msgid "YouTube Source" #~ msgstr "YouTube-Quelle" #~ msgid "Saved Note Settings" #~ msgstr "Einstellungen für gespeicherte Notizen" #~ msgid "Backpack" #~ msgstr "Backpack" #~ msgid "Enabled" #~ msgstr "Aktiviert" #~ msgid "Return Playlists" #~ msgstr "Rückgabe von Wiedergabelisten" #~ msgid "Banshee" #~ msgstr "Banshee" #~ msgid "Addressbook:" #~ msgstr "Adressbuch:" #~ msgid "Evolution" #~ msgstr "Evolution" #~ msgid "Load" #~ msgstr "Laden" #~ msgid "" #~ "Limit the Number of\n" #~ "Enclosures Downloaded to:" #~ msgstr "" #~ "Begrenzung der Anzahl der\n" #~ "Einbettungen, die heruntergeladen\n" #~ "wurden nach:" #~ msgid "Photoset Name:" #~ msgstr "Name des Fotoalbums" #~ msgid "Encoding" #~ msgstr "Kodierung" #~ msgid "iPod Photos" #~ msgstr "iPod-Fotos" #~ msgid "%s Format (%s)" #~ msgstr "%s Format (%s)" #~ msgid "unchanged" #~ msgstr "unverändert" #~ msgid "Firefox" #~ msgstr "Firefox" #~ msgid "Folder:" #~ msgstr "Ordner:" #~ msgid "Return Photos Tagged With" #~ msgstr "Rückgabe von Fotos markiert mit" #~ msgid "Create Tags: " #~ msgstr "Tags erstellen:" #~ msgid "Synchronize your desktop preferences" #~ msgstr "Desktop-Einstellungen abgleichen" #~ msgid "Synchronize the Following Playlists" #~ msgstr "Die folgenden Wiedergabelisten abgleichen" #~ msgid "Rhythmbox Playlists" #~ msgstr "Rhythmbox-Wiedergabelisten" conduit-0.3.17/po/cs.po0000644000175000017500000010743611325017442011565 00000000000000# Czech translation of Conduit. # Copyright (C) 2008 the author(s) of Conduit. # This file is distributed under the same license as the conduit package. # # Jiří Eischmann , 2008. # Jan Dobrovolný , 2008. # Petr Kovar , 2008, 2010. # Marek Černocký , 2009. msgid "" msgstr "" "Project-Id-Version: conduit master\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-01-12 20:57+0100\n" "PO-Revision-Date: 2010-01-12 20:56+0100\n" "Last-Translator: Petr Kovar \n" "Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.0\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Poedit-Language: Czech\n" "X-Poedit-SourceCharset: utf-8\n" #: ../data/conduit.desktop.in.in.h:1 msgid "Conduit Synchronizer" msgstr "Synchronizátor Conduit" #: ../data/conduit.desktop.in.in.h:2 msgid "Synchronization for GNOME" msgstr "Synchronizace pro prostředí GNOME" #: ../conduit/Knowledge.py:8 msgid "What Do You Want to Synchronize?" msgstr "Co chcete synchronizovat?" #: ../conduit/Knowledge.py:9 msgid "Drag and Drop a Data Provider on the Canvas" msgstr "Přetáhněte poskytovatele dat na plátno" #: ../conduit/Knowledge.py:11 msgid "Synchronization Group Created" msgstr "Vytvořena synchronizační skupina" #: ../conduit/Knowledge.py:12 msgid "Add Another Data Provider to the Group to Synchronize it" msgstr "" "Přidejte do skupiny dalšího poskytovatele dat, který se má synchronizovat" #: ../conduit/Knowledge.py:14 msgid "You Are Now Ready to Synchronize" msgstr "Nyní jste připraveni provést synchronizaci" #: ../conduit/Knowledge.py:15 msgid "Right Click on Group for Options" msgstr "Pro nastavení voleb klikněte na skupinu pravým tlačítkem" #: ../conduit/Knowledge.py:24 msgid "Synchronize Two Folders" msgstr "Synchronizovat dvě složky" #: ../conduit/Knowledge.py:27 msgid "Backup Folder to Box.net" msgstr "Zálohovat složku na Box.net" #: ../conduit/Knowledge.py:30 msgid "Synchronize Tagged F-Spot Photos to Flickr" msgstr "Synchronizovat značkované fotografie F-Spot na Flickr" #: ../conduit/Knowledge.py:33 msgid "Synchronize Photos to Flickr" msgstr "Synchronizovat fotografie na Flickr" #: ../conduit/Knowledge.py:36 msgid "Upload Photos to Facebook" msgstr "Nahrát fotografie na Facebook" #: ../conduit/Knowledge.py:39 msgid "Synchronize Desktop Wallpaper from a RSS Feed" msgstr "Synchronizovat pozadí pracovní plochy z kanálu RSS" #: ../conduit/Main.py:59 msgid "Conduit is a synchronization application." msgstr "Conduit je aplikace k provádění synchronizace." #: ../conduit/Main.py:63 #, python-format msgid "Launch without GUI. [default: %default]" msgstr "Spustit bez grafického uživatelského rozhraní. [výchozí: %default]" #: ../conduit/Main.py:67 #, python-format msgid "Save dataprovider configuration to FILE. [default: %default]" msgstr "Uložit nastavení poskytovatele dat do SOUBORU . [výchozí: %default]" #: ../conduit/Main.py:71 #, python-format msgid "Iconify on startup. [default: %default]" msgstr "Po spuštění minimalizovat do ikony [výchozí: %default]" #: ../conduit/Main.py:75 #, python-format msgid "Run with the specified UI. [default: %default]" msgstr "Spustit se zadaným uživatelským rozhraním . [výchozí: %default]" #: ../conduit/Main.py:79 msgid "Only load modules in the named files. [default: load all modules]" msgstr "" "Načíst pouze moduly ve vyjmenovaných souborech [výchozí: načíst všechny " "moduly]" #: ../conduit/Main.py:83 msgid "Do not load modules in the named files. [default: load all modules]" msgstr "" "Nenačítat moduly ve vyjmenovaných souborech [výchozí: načíst všechny moduly]" #: ../conduit/Main.py:87 msgid "" "Explicitly set internal Conduit settings (keys) to the given values for this " "session. [default: do not set]" msgstr "" "Pro toto sezení výslovně změnit interní nastavení (klíče) aplikace Conduit " "na dané hodnoty [výchozí: nenastaveno]" #: ../conduit/Main.py:91 #, python-format msgid "" "Enable loading of unfinished or unsupported dataproviders. [default: %" "default]" msgstr "" "Povolit načítání nedokončených nebo nepodporovaných poskytovatelů dat " "[výchozí: %default]" #: ../conduit/Main.py:95 #, python-format msgid "Generate more debugging information. [default: %default]" msgstr "Generovat více ladicích informací [výchozí: %default]" #: ../conduit/Main.py:99 #, python-format msgid "Generate less debugging information. [default: %default]" msgstr "Generovat méně ladicích informací [výchozí: %default]" #: ../conduit/Main.py:103 #, python-format msgid "Generate no debugging information. [default: %default]" msgstr "Negenerovat žádné ladicí informace [výchozí: %default]" #: ../conduit/dataproviders/DataProvider.py:22 msgid "Ready" msgstr "Připraven" #: ../conduit/dataproviders/DataProvider.py:23 msgid "New data to sync" msgstr "Nová data k synchronizaci" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Refreshing..." msgstr "Obnovování..." #: ../conduit/dataproviders/DataProvider.py:25 msgid "Refreshed OK" msgstr "Obnovení proběhlo v pořádku" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Refreshing" msgstr "Chyba při obnovování" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronizing..." msgstr "Synchronizuje se…" #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronized OK" msgstr "Synchronizace proběhla v pořádku" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Error Synchronizing" msgstr "Chyba při synchronizaci" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Synchronization Skipped" msgstr "Synchronizace vynechána" #: ../conduit/dataproviders/DataProvider.py:31 msgid "Synchronization Cancelled" msgstr "Synchronizace zrušena" #: ../conduit/dataproviders/DataProvider.py:32 msgid "Synchronization Conflict" msgstr "Konflikt v synchronizaci" #: ../conduit/dataproviders/DataProvider.py:33 msgid "Not Configured" msgstr "Nenastaveno" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "640x480" msgstr "640×480" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "800x600" msgstr "800×600" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "1024x768" msgstr "1024×768" #. Signifies that a conversion should not take place #: ../conduit/dataproviders/Image.py:35 #: ../conduit/modules/N800Module/N800Module.py:57 msgid "None" msgstr "Žádná" #. Default Categories for the DataProviders #: ../conduit/dataproviders/__init__.py:6 msgid "Files and Folders" msgstr "Soubory a složky" #: ../conduit/dataproviders/__init__.py:7 #: ../conduit/modules/iPodModule/iPodModule.py:179 msgid "Notes" msgstr "Poznámky" #: ../conduit/dataproviders/__init__.py:8 #: ../conduit/modules/iPodModule/iPodModule.py:367 msgid "Photos" msgstr "Fotografie" #: ../conduit/dataproviders/__init__.py:9 msgid "Office" msgstr "Kancelář" #: ../conduit/dataproviders/__init__.py:10 msgid "Settings" msgstr "Nastavení" #: ../conduit/dataproviders/__init__.py:11 msgid "Miscellaneous" msgstr "Různé" #: ../conduit/dataproviders/__init__.py:12 msgid "Media" msgstr "Média" #: ../conduit/dataproviders/__init__.py:13 msgid "Bookmarks" msgstr "Záložky" #: ../conduit/dataproviders/__init__.py:14 msgid "Test" msgstr "Testování" #: ../conduit/gtkui/Canvas.py:152 msgid "Drag a Data Provider here to continue" msgstr "Přetáhněte sem poskytovatele dat, abyste mohli pokračovat" #: ../conduit/gtkui/Canvas.py:217 msgid "Show me" msgstr "Domovskou složku" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:91 msgid "Source" msgstr "Zdroj" #: ../conduit/gtkui/ConflictResolver.py:105 msgid "Resolution" msgstr "Řešení" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:110 msgid "Sink" msgstr "Cíl" #: ../conduit/gtkui/ConflictResolver.py:150 #: ../conduit/gtkui/ConflictResolver.py:151 #, python-format msgid "Conflicts (%s)" msgstr "Konflikty (%s)" #. name, #url #: ../conduit/gtkui/UI.py:33 msgid "Introduction" msgstr "Úvod" #: ../conduit/gtkui/UI.py:34 msgid "Writing a Data Provider" msgstr "Zapisují se poskytovatelé dat" #: ../conduit/gtkui/UI.py:35 msgid "API Documentation" msgstr "Dokumentace API" #: ../conduit/gtkui/UI.py:36 msgid "Test Results" msgstr "Výsledky testu" #: ../conduit/gtkui/UI.py:52 msgid "Examples" msgstr "Příklady" #. Build some liststores to display #: ../conduit/gtkui/UI.py:139 msgid "Convert from" msgstr "Převod z" #: ../conduit/gtkui/UI.py:140 msgid "into" msgstr "do" #: ../conduit/gtkui/UI.py:190 msgid "Relationship Database" msgstr "Databáze vztahů" #: ../conduit/gtkui/UI.py:194 msgid "Conversions Available" msgstr "Dostupné převody" #: ../conduit/gtkui/UI.py:200 ../conduit/gtkui/Tree.py:355 #: ../conduit/modules/FileModule/FileConfiguration.py:117 msgid "Name" msgstr "Název" #: ../conduit/gtkui/UI.py:204 msgid "Loaded" msgstr "Načteno" #: ../conduit/gtkui/UI.py:329 #, python-format msgid " - %s (Development Version)" msgstr " - %s (vývojářská verze)" #: ../conduit/gtkui/UI.py:331 msgid " - Running Uninstalled" msgstr " - běží nenainstalovaný" #: ../conduit/gtkui/UI.py:375 msgid "Developers" msgstr "Vývojáři" #: ../conduit/gtkui/UI.py:539 ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "Synchronizace právě probíhá. Chcete ji opravdu zrušit?" #: ../conduit/gtkui/UI.py:711 msgid "_Synchronize All" msgstr "S_ynchronizovat vše" #: ../conduit/gtkui/UI.py:711 msgid "Synchronizes All Groups" msgstr "Synchronizovat všechny skupiny" #: ../conduit/gtkui/UI.py:712 msgid "_Cancel Synchronization" msgstr "_Zrušit synchronizaci" #: ../conduit/gtkui/UI.py:712 msgid "Cancels Currently Synchronizing Groups" msgstr "Ruší právě synchronizované skupiny" #: ../conduit/gtkui/UI.py:713 msgid "_Quit" msgstr "U_končit" #: ../conduit/gtkui/UI.py:713 msgid "Close Conduit" msgstr "Zavřít aplikaci Conduit" #: ../conduit/gtkui/UI.py:753 msgid "Synchronization Error" msgstr "Chyba v synchronizaci" #: ../conduit/gtkui/UI.py:756 msgid "Synchronization Complete" msgstr "Synchronizace dokončena" #: ../conduit/gtkui/UI.py:764 msgid "Synchronizing" msgstr "Synchronizuje se" #: ../conduit/gtkui/Tree.py:364 msgid "Description" msgstr "Popis" #: ../conduit/gtkui/ConfigItems.py:733 #, python-format msgid "Total: %d" msgstr "Celkem: %d" #: ../conduit/gtkui/WindowConfigurator.py:14 msgid "Configure" msgstr "Nastavit" #: ../conduit/modules/BackpackModule/BackpackModule.py:58 msgid "Backpack Notes" msgstr "Poznámky Backpack" #: ../conduit/modules/BackpackModule/BackpackModule.py:59 msgid "Store things in Backpack Notes" msgstr "Ukládání věcí do poznámek Backpack" #: ../conduit/modules/BackpackModule/BackpackModule.py:105 #: ../conduit/modules/FlickrModule/FlickrModule.py:307 #: ../conduit/modules/ZotoModule/ZotoModule.py:243 msgid "Account details" msgstr "Podrobnosti účtu" #: ../conduit/modules/BackpackModule/BackpackModule.py:106 msgid "Login" msgstr "Přihlášení" #: ../conduit/modules/BackpackModule/BackpackModule.py:109 msgid "API key" msgstr "Klíč API" #: ../conduit/modules/BackpackModule/BackpackModule.py:112 msgid "Saved notes" msgstr "Uložené poznámky" #: ../conduit/modules/BackpackModule/BackpackModule.py:113 msgid "Save notes in page" msgstr "Uložit poznámky na stránce" #: ../conduit/modules/BansheeModule/BansheeModule.py:52 msgid "Banshee Playlists" msgstr "Seznamy skladeb Banshee" #: ../conduit/modules/BansheeModule/BansheeModule.py:53 msgid "Synchronize your Banshee playlists" msgstr "Synchronizace seznamů skladeb v přehrávači Banshee" #: ../conduit/modules/BansheeModule/BansheeModule.py:187 #: ../conduit/modules/BansheeModule/BansheeModule.py:188 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:116 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:117 msgid "Playlists" msgstr "Seznamy skladeb" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 msgid "Box.net" msgstr "Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 msgid "Synchronize your Box.net files" msgstr "Synchronizace souborů na Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:290 #: ../conduit/modules/FileModule/FileModule.py:82 msgid "Folder" msgstr "Složka" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:291 msgid "Folder name" msgstr "Název složky" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:295 msgid "Load folders" msgstr "Načíst složky" #: ../conduit/modules/ConverterModule.py:91 msgid "Note-" msgstr "Poznámka-" #: ../conduit/modules/DesktopWallpaperModule.py:38 msgid "Wallpaper" msgstr "Pozadí pracovní plochy" #: ../conduit/modules/DesktopWallpaperModule.py:39 msgid "Changes your Desktop Wallpaper" msgstr "Změní pozadí pracovní plochy" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:107 #, python-format msgid "Select %s" msgstr "Vybrat %s" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:127 msgid "Evolution Contacts" msgstr "Kontakty Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:128 msgid "Synchronize your contacts" msgstr "Synchronizace kontaktů" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:178 msgid "Evolution Calendar" msgstr "Kalendář Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:179 msgid "Synchronize your calendar" msgstr "Synchronizace kalendáře" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:240 msgid "Evolution Tasks" msgstr "Úkoly Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:241 msgid "Synchronize your tasks" msgstr "Synchronizace úkolů" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:297 msgid "Evolution Memos" msgstr "Poznámky Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:298 msgid "Synchronize your memos" msgstr "Synchronizace poznámek" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 msgid "Facebook" msgstr "Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:39 msgid "Synchronize your Facebook photos" msgstr "Synchronizace fotografií na Facebooku" #: ../conduit/modules/FacebookModule/FacebookModule.py:124 #: ../conduit/modules/FlickrModule/FlickrModule.py:282 msgid "Loading album list..." msgstr "Načítá se seznam alb…" #: ../conduit/modules/FacebookModule/FacebookModule.py:128 msgid "Failed to connect" msgstr "Selhalo připojení" #: ../conduit/modules/FacebookModule/FacebookModule.py:131 msgid "Logged in" msgstr "Přihlášen" #: ../conduit/modules/FacebookModule/FacebookModule.py:133 msgid "Failed to login" msgstr "Selhalo přihlášení" #: ../conduit/modules/FacebookModule/FacebookModule.py:145 #: ../conduit/modules/FspotModule/FspotModule.py:243 msgid "Status" msgstr "Stav" #: ../conduit/modules/FacebookModule/FacebookModule.py:150 #: ../conduit/modules/iPodModule/iPodModule.py:461 #: ../conduit/modules/ZotoModule/ZotoModule.py:252 msgid "Album" msgstr "Album" #: ../conduit/modules/FacebookModule/FacebookModule.py:151 msgid "Album name" msgstr "Název alba" #: ../conduit/modules/FacebookModule/FacebookModule.py:156 msgid "Load albums" msgstr "Načíst alba" #: ../conduit/modules/FeedModule/FeedModule.py:58 msgid "RSS Feed" msgstr "Kanály RSS" #: ../conduit/modules/FeedModule/FeedModule.py:59 msgid "Synchronize data from RSS enclosures" msgstr "Synchronizace dat z příloh RSS" #. FIXME: Add Randomize #: ../conduit/modules/FeedModule/FeedModule.py:114 msgid "Feed details" msgstr "Detaily kanálu" #: ../conduit/modules/FeedModule/FeedModule.py:115 msgid "Feed address" msgstr "Adresa kanálu" #: ../conduit/modules/FeedModule/FeedModule.py:118 msgid "Enclosure settings" msgstr "Nastavení příloh" #: ../conduit/modules/FeedModule/FeedModule.py:119 msgid "Limit downloaded enclosures" msgstr "Omezit stahované přílohy" #: ../conduit/modules/FeedModule/FeedModule.py:125 msgid "Limit to" msgstr "Omezit na" #: ../conduit/modules/FeedModule/FeedModule.py:129 msgid "Randomize enclosures" msgstr "Přílohy náhodně" #: ../conduit/modules/FeedModule/FeedModule.py:133 msgid "Download types" msgstr "Stahované typy" #: ../conduit/modules/FeedModule/FeedModule.py:134 msgid "Download audio files" msgstr "Stáhnout zvukové soubory" #: ../conduit/modules/FeedModule/FeedModule.py:135 msgid "Download video files" msgstr "Stáhnout video soubory" #: ../conduit/modules/FeedModule/FeedModule.py:136 msgid "Download photo files" msgstr "Stáhnout soubory s fotografiemi" #: ../conduit/modules/FileModule/FileConfiguration.py:111 msgid "Icon" msgstr "Ikona" #: ../conduit/modules/FileModule/FileConfiguration.py:123 #: ../conduit/modules/GConfModule/GConfModule.py:138 msgid "Items" msgstr "Položky" #: ../conduit/modules/FileModule/FileConfiguration.py:149 #, python-format msgid "Contains %s files" msgstr "Obsahuje %s souborů" #: ../conduit/modules/FileModule/FileConfiguration.py:248 msgid "Include file..." msgstr "Včetně souboru…" #: ../conduit/modules/FileModule/FileConfiguration.py:258 msgid "All files" msgstr "Všechny soubory" #: ../conduit/modules/FileModule/FileConfiguration.py:271 msgid "Include folder..." msgstr "Včetně složky…" #: ../conduit/modules/FileModule/FileConfiguration.py:314 msgid "Please Name All Folders" msgstr "Pojmenujte prosím všechny složky" #: ../conduit/modules/FileModule/FileConfiguration.py:315 msgid "" "All folders require a descriptive name. To name a folder simply click on it" msgstr "" "Všechny složky vyžadují popisný název. Složku pojmenujete tak, že na ni " "jednoduše klikněte." #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "Soubory" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "Zdroj pro synchronizaci vícero souborů" #: ../conduit/modules/FileModule/FileModule.py:83 msgid "Synchronize folders" msgstr "Synchronizace složek" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:40 msgid "Firefox 3 Bookmarks" msgstr "Záložky Firefox 3" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:41 msgid "Syncronize your Firefox 3 Bookmarks" msgstr "Synchronizace záložek v aplikaci Firefox 3" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:100 msgid "Firefox Profile" msgstr "Profil Firefox" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 msgid "Flickr" msgstr "Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 msgid "Synchronize your Flickr.com photos" msgstr "Synchronizace fotografií na Flickr.com" #: ../conduit/modules/FlickrModule/FlickrModule.py:287 msgid "Failed to connect." msgstr "Selhalo připojení." #: ../conduit/modules/FlickrModule/FlickrModule.py:290 msgid "Album names loaded." msgstr "Názvy alb načteny." #: ../conduit/modules/FlickrModule/FlickrModule.py:292 msgid "Failed to login." msgstr "Selhalo přihlášení." #: ../conduit/modules/FlickrModule/FlickrModule.py:303 msgid "Logging in, please wait..." msgstr "Přihlašuje se, vyčkejte prosím…" #: ../conduit/modules/FlickrModule/FlickrModule.py:308 #: ../conduit/modules/GoogleBookmarksModule.py:67 #: ../conduit/modules/ZotoModule/ZotoModule.py:244 msgid "Username" msgstr "Uživatelské jméno" #: ../conduit/modules/FlickrModule/FlickrModule.py:319 msgid "Authenticate" msgstr "Ověřit" #: ../conduit/modules/FlickrModule/FlickrModule.py:323 #: ../conduit/modules/ZotoModule/ZotoModule.py:251 msgid "Saved photo settings" msgstr "Nastavení uložených fotografií" #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "Resize photos" msgstr "Změnit velikost fotografií" #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "Do not resize" msgstr "Neměnit velikost" #: ../conduit/modules/FlickrModule/FlickrModule.py:332 msgid "Photos are public" msgstr "Fotografie jsou veřejné" #: ../conduit/modules/FspotModule/FspotModule.py:25 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 msgid "Synchronize your F-Spot photos" msgstr "Synchronizace fotografií v aplikaci F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:152 msgid "F-Spot DBus interface is operating in read-only mode" msgstr "Rozhraní F-Spot DBus pracuje v režimu pouze ke čtení" #: ../conduit/modules/FspotModule/FspotModule.py:218 msgid "F-Spot is running" msgstr "Aplikace F-Spot běží" #: ../conduit/modules/FspotModule/FspotModule.py:219 msgid "Please start F-Spot or activate the D-Bus Extension" msgstr "Spusťte prosím aplikaci F-Spot nebo aktivujte rozšíření D-Bus" #: ../conduit/modules/FspotModule/FspotModule.py:244 msgid "Start F-Spot" msgstr "Spustit F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:248 #: ../conduit/modules/FspotModule/FspotModule.py:249 msgid "Tags" msgstr "Značky" #: ../conduit/modules/FspotModule/FspotModule.py:262 msgid "Add tags" msgstr "Přidat značky" #: ../conduit/modules/FspotModule/FspotModule.py:263 msgid "Tag name" msgstr "Název značky" #: ../conduit/modules/FspotModule/FspotModule.py:266 msgid "Add tag" msgstr "Přidat značku" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "Application Settings" msgstr "Nastavení aplikace" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Synchronize your application settings" msgstr "Synchronizace nastavení aplikací" #: ../conduit/modules/GConfModule/GConfModule.py:31 msgid "Metacity" msgstr "Metacity" #: ../conduit/modules/GConfModule/GConfModule.py:32 msgid "Nautilus" msgstr "Nautilus" #: ../conduit/modules/GConfModule/GConfModule.py:33 msgid "Preferred Applications" msgstr "Upřednostňované aplikace" #: ../conduit/modules/GConfModule/GConfModule.py:34 msgid "Desktop Interface" msgstr "Rozhraní pracovní plochy" #: ../conduit/modules/GConfModule/GConfModule.py:35 msgid "Gnome Terminal" msgstr "Terminál Gnome" #: ../conduit/modules/GConfModule/GConfModule.py:137 msgid "Applications to Synchronize" msgstr "Aplikace, které se mají synchronizovat" #: ../conduit/modules/GoogleBookmarksModule.py:19 msgid "Google Bookmarks" msgstr "Záložky Google" #: ../conduit/modules/GoogleBookmarksModule.py:20 msgid "Sync your Google Bookmarks" msgstr "Synchronizace záložek Google" #: ../conduit/modules/GoogleBookmarksModule.py:66 msgid "Login Details" msgstr "Podrobnosti přihlášení" #: ../conduit/modules/GoogleBookmarksModule.py:70 #: ../conduit/modules/ZotoModule/ZotoModule.py:247 msgid "Password" msgstr "Heslo" #: ../conduit/modules/GoogleModule/GoogleModule.py:399 msgid "Google Calendar" msgstr "Kalendář Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:400 msgid "Synchronize your Google Calendar" msgstr "Synchronizovat svůj kalendář Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:582 msgid "Picasa" msgstr "Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:583 msgid "Synchronize your Google Picasa photos" msgstr "Synchronizovat své fotografie z Google Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:745 msgid "Google Contacts" msgstr "Kontakty Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:746 msgid "Synchronize your Google Mail contacts" msgstr "Synchronizovat své kontakty z Gmailu" #: ../conduit/modules/GoogleModule/GoogleModule.py:1076 msgid "Google Documents" msgstr "Dokumenty Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:1077 msgid "Synchronize your Google Documents" msgstr "Synchronizovat své dokumenty Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:1322 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:69 msgid "Unknown" msgstr "Neznámé" #: ../conduit/modules/GoogleModule/GoogleModule.py:1323 msgid "miscellaneous" msgstr "různé" #: ../conduit/modules/GoogleModule/GoogleModule.py:1324 msgid "No description." msgstr "Bez popisu." #: ../conduit/modules/GoogleModule/GoogleModule.py:1333 msgid "YouTube" msgstr "YouTube" #: ../conduit/modules/GoogleModule/GoogleModule.py:1334 msgid "Synchronize data from YouTube" msgstr "Synchronizovat data z Youtube" #: ../conduit/modules/iPodModule/iPodModule.py:180 msgid "Synchronize your iPod notes" msgstr "Synchronizace poznámek v zařízení iPod" #: ../conduit/modules/iPodModule/iPodModule.py:295 #: ../conduit/modules/SynceModule.py:311 msgid "Contacts" msgstr "Kontakty" #: ../conduit/modules/iPodModule/iPodModule.py:296 msgid "Synchronize your iPod contacts" msgstr "Synchronizace kontaktů v zařízení iPod" #: ../conduit/modules/iPodModule/iPodModule.py:331 #: ../conduit/modules/SynceModule.py:449 msgid "Calendar" msgstr "Kalendář" #: ../conduit/modules/iPodModule/iPodModule.py:332 msgid "Synchronize your iPod calendar" msgstr "Synchronizace kalendáře v zařízení iPod" #: ../conduit/modules/iPodModule/iPodModule.py:368 msgid "Synchronize your iPod photos" msgstr "Synchronizace fotografií v zařízení iPod" #: ../conduit/modules/iPodModule/iPodModule.py:465 msgid "Delete" msgstr "Smazat" #: ../conduit/modules/iPodModule/iPodModule.py:695 #: ../conduit/modules/iPodModule/iPodModule.py:812 #: ../conduit/modules/N800Module/N800Module.py:77 msgid "Encoding" msgstr "Kódování" #: ../conduit/modules/iPodModule/iPodModule.py:811 msgid "Conversion options" msgstr "Volby převodu" #: ../conduit/modules/iPodModule/iPodModule.py:816 msgid "Keep converted files" msgstr "Zachovat převedené soubory" #: ../conduit/modules/iPodModule/iPodModule.py:846 msgid "iPod Music" msgstr "Hudba iPod" #: ../conduit/modules/iPodModule/iPodModule.py:847 msgid "Synchronize your iPod music" msgstr "Synchronizace hudby v zařízení iPod" #: ../conduit/modules/iPodModule/iPodModule.py:882 msgid "iPod Video" msgstr "Video iPod" #: ../conduit/modules/iPodModule/iPodModule.py:883 msgid "Synchronize your iPod videos" msgstr "Synchronizace videí v zařízení iPod" #: ../conduit/modules/iPodModule/iPodModule.py:907 msgid "Movie" msgstr "Film" #: ../conduit/modules/iPodModule/iPodModule.py:908 msgid "Music Video" msgstr "Hudební video" #: ../conduit/modules/iPodModule/iPodModule.py:909 msgid "TV Show" msgstr "Televizní představení" #: ../conduit/modules/iPodModule/iPodModule.py:911 msgid "Video kind" msgstr "Druh videa" #. Translators: Translate this in derived classes. #: ../conduit/modules/N800Module/N800Module.py:55 msgid "Conduit" msgstr "Conduit" #: ../conduit/modules/N800Module/N800Module.py:105 msgid "N800 Files" msgstr "Soubory v N800" #: ../conduit/modules/N800Module/N800Module.py:106 msgid "Synchronizes files/folders to a N800 device" msgstr "Synchronizace souborů/složek do zařízení N800" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:111 msgid "Backups" msgstr "Zálohy" #: ../conduit/modules/N800Module/N800Module.py:126 msgid "N800 Music" msgstr "Hudba v N800" #: ../conduit/modules/N800Module/N800Module.py:127 msgid "Synchronizes music to a N800 device" msgstr "Synchronizace hudby do zařízení N800" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:133 msgid "Music" msgstr "Hudba" #: ../conduit/modules/N800Module/N800Module.py:150 msgid "N800 Videos" msgstr "Videa v N800" #: ../conduit/modules/N800Module/N800Module.py:151 msgid "Synchronizes video to a N800 device" msgstr "Synchronizace videí do zařízení N800" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:157 msgid "Video" msgstr "Video" #: ../conduit/modules/N800Module/N800Module.py:174 msgid "N800 Photos" msgstr "Fotografie v N800" #: ../conduit/modules/N800Module/N800Module.py:175 msgid "Synchronizes photos to an N800 device" msgstr "Synchronizace fotografií do zařízení N800" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:181 msgid "Photo" msgstr "Fotografie" #: ../conduit/modules/NautilusBookmarksModule.py:19 msgid "Nautilus Bookmarks" msgstr "Záložky Nautilus" #: ../conduit/modules/NautilusBookmarksModule.py:20 msgid "Sync your Nautilus Bookmarks" msgstr "Synchronizace záložek v aplikaci Nautilus" #: ../conduit/modules/NautilusBookmarksModule.py:145 msgid "Sync bookmarks to local places/files" msgstr "Synchronizovat záložky do místních úložišť/souborů" #: ../conduit/modules/NautilusBookmarksModule.py:148 msgid "Sync bookmarks to remote places/files" msgstr "Synchronizovat záložky do vzdálených úložišť/souborů" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "Síť" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "Umožňuje synchronizaci přes síť" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:44 msgid "Rhythmbox Music" msgstr "Hudba Rhythmbox" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:45 msgid "Synchronize songs from your Rhythmbox playlists" msgstr "Synchronizace skladeb ze seznamů skladeb Rhythmbox" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 msgid "Shutterfly" msgstr "Shutterfly" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 msgid "Synchronize your Shutterfly photos" msgstr "Synchronizace fotografií na Shutterfly" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "%e.%m.%Y %H:%M:%S" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 msgid "SmugMug" msgstr "SmugMug" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 msgid "Synchronize your SmugMug.com photos" msgstr "Synchronizace fotografií na SmugMug.com" #: ../conduit/modules/SynceModule.py:139 msgid "Create Partnership" msgstr "Vytvořit partnerství" #: ../conduit/modules/SynceModule.py:312 msgid "Windows Mobile Contacts" msgstr "Kontakty z Windows Mobile" #: ../conduit/modules/SynceModule.py:450 msgid "Windows Mobile Calendar" msgstr "Kalendář z Windows Mobile" #: ../conduit/modules/SynceModule.py:459 msgid "Tasks" msgstr "Úkoly" #: ../conduit/modules/SynceModule.py:460 msgid "Windows Mobile Tasks" msgstr "Úkoly z Windows Mobile" #: ../conduit/modules/ZotoModule/ZotoModule.py:154 msgid "Zoto" msgstr "Zoto" #: ../conduit/modules/ZotoModule/ZotoModule.py:155 msgid "Synchronize your Zoto photos" msgstr "Synchronizace fotografií na Zoto" #~ msgid "Default Synchronization Options" #~ msgstr "Výchozí volby synchronizace" #~ msgid "General" #~ msgstr "Obecné" #~ msgid "Always Up-To-Date" #~ msgstr "Udržovat aktuální" #~ msgid "Ask Me What to Do" #~ msgstr "Zeptat se, co dělat" #~ msgid "Ask me what to do" #~ msgstr "Zeptat se, co dělat" #~ msgid "Cancel Synchronization" #~ msgstr "Zrušit synchronizaci" #~ msgid "Cancel currently-synchronizing groups" #~ msgstr "Zrušit právě prováděné synchronizace skupin" #~ msgid "Clear Canvas" #~ msgstr "Vyčistit plátno" #~ msgid "Compare" #~ msgstr "Porovnat" #~ msgid "Conduit Preferences" #~ msgstr "Předvolby Conduit" #~ msgid "Configuration" #~ msgstr "Nastavení" #~ msgid "Configure Item" #~ msgstr "Nastavit položku" #~ msgid "Configure the synchronization settings for this item" #~ msgstr "Změnit nastavení synchronizace pro tuto položku" #~ msgid "Conflict Options" #~ msgstr "Volby pro konflikty" #~ msgid "Conflicts" #~ msgstr "Konflikty" #~ msgid "Contents" #~ msgstr "Obsah" #~ msgid "Data Conversions" #~ msgstr "Převody dat" #~ msgid "Data Providers" #~ msgstr "Poskytovatelé dat" #~ msgid "Delete Group" #~ msgstr "Smazat skupinu" #~ msgid "Delete Item" #~ msgstr "Smazat položku" #~ msgid "Delete Options" #~ msgstr "Volby mazání" #~ msgid "Delete from the corresponding sink" #~ msgstr "Vymazat z odpovídajícího cíle" #~ msgid "Delete the Corresponding Item" #~ msgstr "Smazat odpovídající položku" #~ msgid "Editor" #~ msgstr "Editor" #~ msgid "Minimize to notification area" #~ msgstr "Minimalizovat do oznamovací oblasti" #~ msgid "Refresh Group" #~ msgstr "Občerstvit skupinu" #~ msgid "Refresh Item" #~ msgstr "Občerstvit položku" #~ msgid "Replace the Older Item" #~ msgstr "Nahradit starší položku" #~ msgid "Replace the older item" #~ msgstr "Nahradit starší položku" #~ msgid "Resolve Conflicts" #~ msgstr "Vyřešit konflikty" #~ msgid "Save settings on exit" #~ msgstr "Uložit nastavení při ukončení" #~ msgid "Show Hints" #~ msgstr "Zobrazovat rady" #~ msgid "Show status icon" #~ msgstr "Zobrazit stavovou ikonu" #~ msgid "Skip" #~ msgstr "Přeskočit" #~ msgid "Slow Synchronization" #~ msgstr "Pomalá synchronizace" #~ msgid "Start Conduit at login" #~ msgstr "Spustit aplikaci Conduit při přihlášení" #~ msgid "Synchronization Options" #~ msgstr "Volby synchronizace" #~ msgid "Synchronize All" #~ msgstr "Synchronizovat vše" #~ msgid "Synchronize Group" #~ msgstr "Synchronizovat skupinu" #~ msgid "Synchronize group" #~ msgstr "Synchronizovat skupinu" #~ msgid "Synchronizes all groups" #~ msgstr "Synchronizuje všechny skupiny" #~ msgid "Title" #~ msgstr "Název" #~ msgid "Two-Way Synchronization" #~ msgstr "Obousměrná synchronizace" #~ msgid "When an item has been deleted:" #~ msgstr "Když byla položka vymazána:" #~ msgid "When an item is deleted..." #~ msgstr "Když je položka vymazána…" #~ msgid "When there is a conflict..." #~ msgstr "Když existuje konflikt…" #~ msgid "When there is a two-way conflict:" #~ msgstr "Když existuje obousměrný konflikt:" #~ msgid "_Edit" #~ msgstr "_Upravit" #~ msgid "_File" #~ msgstr "_Soubor" #~ msgid "_Help" #~ msgstr "_Nápověda" #~ msgid "Account Details" #~ msgstr "Podrobnosti účtu" #~ msgid "Calendar:" #~ msgstr "Kalendář:" #~ msgid "Email:" #~ msgstr "E-mail:" #~ msgid "Load Calendars" #~ msgstr "Načíst kalendáře" #~ msgid "Password:" #~ msgstr "Heslo:" #~ msgid "Backpack" #~ msgstr "Backpack" #~ msgid "Enabled" #~ msgstr "Povoleno" #~ msgid "Banshee" #~ msgstr "Banshee" #~ msgid "Folder:" #~ msgstr "Složka:" #~ msgid "Load" #~ msgstr "Načíst" #~ msgid "Addressbook:" #~ msgstr "Adresář:" #~ msgid "Evolution" #~ msgstr "Evolution" #~ msgid "Items to Synchronize" #~ msgstr "Položky k synchronizaci" #~ msgid "Add Directory" #~ msgstr "Přidat adresář" #~ msgid "Add File" #~ msgstr "Přidat soubor" #~ msgid "Advanced" #~ msgstr "Pokročilé" #~ msgid "File Configuration" #~ msgstr "Nastavení souboru" #~ msgid "Folder Configuration" #~ msgstr "Nastavení složky" #~ msgid "Folder Location:" #~ msgstr "Umístění složky:" #~ msgid "Follow Symbolic Links" #~ msgstr "Sledovat symbolické odkazy" #~ msgid "Include Hidden Files" #~ msgstr "Včetně skrytých souborů" #~ msgid "Select A Folder" #~ msgstr "Vybrat složku" #~ msgid "Photoset Name:" #~ msgstr "Název sady fotek:" #~ msgid "Create Tags: " #~ msgstr "Vytvořit značky: " #, fuzzy #~ msgid "Synchronize your desktop preferences" #~ msgstr "Synchronizovat nastavení pracovního prostředí" #~ msgid "Downloaded Document Format" #~ msgstr "Formát staženého dokumentu" #~ msgid "Presentations" #~ msgstr "Prezentace" #~ msgid "Spreadsheets" #~ msgstr "Tabulky" #~ msgid "Download Videos" #~ msgstr "Stáhnout videa" #~ msgid "Max retrieved videos (0 is unlimited):" #~ msgstr "Maximální počet zobrazených videí (0 = bez limitu)" #~ msgid "Top rated" #~ msgstr "Nejlépe hodnocené" #~ msgid "Uploaded by above user" #~ msgstr "Odesláno uživatelem výše" #~ msgid "YouTube Source" #~ msgstr "Zdroj Youtube" #~ msgid "Encoding" #~ msgstr "Kódování" #~ msgid "iPod Photos" #~ msgstr "Fotografie z iPodu" #~ msgid "%s Format (%s)" #~ msgstr "%s Formát (%s)" #~ msgid "unchanged" #~ msgstr "Nezměněno" #~ msgid "Synchronize the Following Playlists" #~ msgstr "Synchronizovat následující seznamy skladeb" #~ msgid "Rhythmbox Playlists" #~ msgstr "Seznamy skladeb Rhythmbox" #~ msgid "Slow Sync" #~ msgstr "Pomalá synchronizace" #~ msgid "Sync Options" #~ msgstr "Možnosti synchronizace" #~ msgid "Two Way Sync" #~ msgstr "Obousměrná synchronizace" conduit-0.3.17/po/nb.po0000644000175000017500000007750611321403566011565 00000000000000# Norwegian bokmål translation of conduit. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Kjartan Maraas , 2008-2009. # msgid "" msgstr "" "Project-Id-Version: conduit 0.3.16\n" "Report-Msgid-Bugs-To:\n" "POT-Creation-Date: 2009-08-07 14:50+0200\n" "PO-Revision-Date: 2009-08-07 14:58+0200\n" "Last-Translator: Kjartan Maraas \n" "Language-Team: Norwegian bokmål \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../data/conduit.desktop.in.in.h:1 msgid "Conduit Synchronizer" msgstr "Conduit synkronisering" #: ../data/conduit.desktop.in.in.h:2 msgid "Synchronization for GNOME" msgstr "Synkronisering for GNOME" #: ../data/conduit.glade.h:1 msgid "Default Synchronization Options" msgstr "Forvalgte synkroniseringsvalg" #: ../data/conduit.glade.h:2 msgid "General" msgstr "Generelt" #: ../data/conduit.glade.h:3 msgid "Always Up-To-Date" msgstr "Alltid oppdatert" #: ../data/conduit.glade.h:4 msgid "Ask Me What to Do" msgstr "Spør meg hva som skal gjøres" #: ../data/conduit.glade.h:5 msgid "Ask me what to do" msgstr "Spør meg hva som skal gjøres" #: ../data/conduit.glade.h:6 msgid "Cancel Synchronization" msgstr "Avbryt synkronisering" #: ../data/conduit.glade.h:7 msgid "Cancel currently-synchronizing groups" msgstr "Avbryt grupper som blir synkronisert" #: ../data/conduit.glade.h:8 msgid "Clear Canvas" msgstr "Tøm kanvas" #: ../data/conduit.glade.h:9 msgid "Compare" msgstr "Sammenligne" #: ../data/conduit.glade.h:10 msgid "Conduit Preferences" msgstr "Brukervalg for Conduit" #: ../data/conduit.glade.h:11 msgid "Configuration" msgstr "Konfigurasjon" #: ../data/conduit.glade.h:12 msgid "Configure Item" msgstr "Konfigurer oppføring" #: ../data/conduit.glade.h:13 msgid "Configure the synchronization settings for this item" msgstr "Konfigurer innstillinger for synkronisering av denne oppføringen" #: ../data/conduit.glade.h:14 msgid "Conflict Options" msgstr "Konfliktvalg" #: ../data/conduit.glade.h:15 msgid "Conflicts" msgstr "Konflikter" #: ../data/conduit.glade.h:16 msgid "Contents" msgstr "Innhold" #: ../data/conduit.glade.h:17 msgid "Data Conversions" msgstr "Datakonvertering" #: ../data/conduit.glade.h:18 msgid "Data Providers" msgstr "Datatilbydere" #: ../data/conduit.glade.h:19 msgid "Delete Group" msgstr "Slett gruppe" #: ../data/conduit.glade.h:20 msgid "Delete Item" msgstr "Slett oppføring" #: ../data/conduit.glade.h:21 msgid "Delete Options" msgstr "Slett alternativer" #: ../data/conduit.glade.h:22 msgid "Delete from the corresponding sink" msgstr "Slett fra tilhørende vask" #: ../data/conduit.glade.h:23 msgid "Delete the Corresponding Item" msgstr "Slett tilhørende oppføring" #: ../data/conduit.glade.h:24 msgid "Editor" msgstr "Redigering" #: ../data/conduit.glade.h:25 msgid "Minimize to notification area" msgstr "Minimer til varslingsområdet" #: ../data/conduit.glade.h:26 msgid "Refresh Group" msgstr "Oppdater gruppe" #: ../data/conduit.glade.h:27 msgid "Refresh Item" msgstr "Oppdater oppføring" #: ../data/conduit.glade.h:28 msgid "Replace the Older Item" msgstr "Erstatt den eldste oppføringen" #: ../data/conduit.glade.h:29 msgid "Replace the older item" msgstr "Erstatt den eldste oppføringen" #: ../data/conduit.glade.h:30 msgid "Resolve Conflicts" msgstr "Løs konflikter" #: ../data/conduit.glade.h:31 msgid "Save settings on exit" msgstr "Lagre innstillinger når du avslutter" #: ../data/conduit.glade.h:32 msgid "Show Hints" msgstr "" #: ../data/conduit.glade.h:33 msgid "Show status icon" msgstr "Vis statusikon" #: ../data/conduit.glade.h:34 msgid "Skip" msgstr "Hopp over" #: ../data/conduit.glade.h:35 msgid "Slow Synchronization" msgstr "Langsom synkronisering" #: ../data/conduit.glade.h:36 msgid "Start Conduit at login" msgstr "Start Conduit ved pålogging" #: ../data/conduit.glade.h:37 msgid "Synchronization Options" msgstr "Alternativer for synkronisering" #: ../data/conduit.glade.h:38 msgid "Synchronize All" msgstr "Synkroniser alle" #: ../data/conduit.glade.h:39 msgid "Synchronize Group" msgstr "Synkroniser gruppe" #: ../data/conduit.glade.h:40 msgid "Synchronize group" msgstr "Synkroniser gruppe" #: ../data/conduit.glade.h:41 msgid "Synchronizes all groups" msgstr "Synkroniserer alle grupper" #: ../data/conduit.glade.h:42 msgid "Title" msgstr "Tittel" #: ../data/conduit.glade.h:43 msgid "Two-Way Synchronization" msgstr "Toveis synkronisering" #: ../data/conduit.glade.h:44 msgid "When an item has been deleted:" msgstr "Når en oppføring er slettet:" #: ../data/conduit.glade.h:45 msgid "When an item is deleted..." msgstr "Når en oppføring slettes..." #: ../data/conduit.glade.h:46 msgid "When there is a conflict..." msgstr "Når en konflikt oppstår..." #: ../data/conduit.glade.h:47 msgid "When there is a two-way conflict:" msgstr "Når du har en toveis konflikt:" #: ../data/conduit.glade.h:48 msgid "_Edit" msgstr "R_ediger" #: ../data/conduit.glade.h:49 msgid "_File" msgstr "_Fil" #: ../data/conduit.glade.h:50 msgid "_Help" msgstr "_Hjelp" #: ../conduit/Knowledge.py:8 msgid "What Do You Want to Synchronize?" msgstr "" #: ../conduit/Knowledge.py:9 msgid "Drag and Drop a Data Provider on the Canvas" msgstr "Dra en datatilbyder til kanvaset" #: ../conduit/Knowledge.py:11 msgid "Synchronization Group Created" msgstr "Synkroniseringsgruppe opprettet" #: ../conduit/Knowledge.py:12 #, fuzzy msgid "Add Another Data Provider to the Group to Synchronize it" msgstr "Dra en datatilbyder hit for å fortsette" #: ../conduit/Knowledge.py:14 msgid "You Are Now Ready to Synchronize" msgstr "" #: ../conduit/Knowledge.py:15 msgid "Right Click on Group for Options" msgstr "" #. source,sinc #comment #. twoway #: ../conduit/Knowledge.py:22 msgid "Synchronize Two Folders" msgstr "Synkroniser to mapper" #: ../conduit/Knowledge.py:24 msgid "Backup Folder to Box.net" msgstr "" #: ../conduit/Knowledge.py:26 msgid "Synchronize Tagged F-Spot Photos to Flickr" msgstr "" #: ../conduit/Main.py:59 msgid "Conduit is a synchronization application." msgstr "Conduit er et synkroniseringsprogram." #: ../conduit/Main.py:63 #, python-format msgid "Launch without GUI. [default: %default]" msgstr "Start uten brukergrensesnitt [forvalg: %default]" #: ../conduit/Main.py:67 #, python-format msgid "Save dataprovider configuration to FILE. [default: %default]" msgstr "" #: ../conduit/Main.py:71 #, python-format msgid "Iconify on startup. [default: %default]" msgstr "" #: ../conduit/Main.py:75 #, python-format msgid "Run with the specified UI. [default: %default]" msgstr "" #: ../conduit/Main.py:79 msgid "Only load modules in the named files. [default: load all modules]" msgstr "" #: ../conduit/Main.py:83 msgid "Do not load modules in the named files. [default: load all modules]" msgstr "" #: ../conduit/Main.py:87 msgid "" "Explicitly set internal Conduit settings (keys) to the given values for this " "session. [default: do not set]" msgstr "" #: ../conduit/Main.py:91 #, python-format msgid "" "Enable loading of unfinished or unsupported dataproviders. [default: %" "default]" msgstr "" #: ../conduit/Main.py:95 #, python-format msgid "Generate more debugging information. [default: %default]" msgstr "" #: ../conduit/Main.py:99 #, python-format msgid "Generate less debugging information. [default: %default]" msgstr "" #: ../conduit/Main.py:103 #, python-format msgid "Generate no debugging information. [default: %default]" msgstr "" #: ../conduit/dataproviders/DataProvider.py:22 msgid "Ready" msgstr "Klar" #: ../conduit/dataproviders/DataProvider.py:23 msgid "New data to sync" msgstr "Nye data som kan synkroniseres" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Refreshing..." msgstr "Oppdaterer..." #: ../conduit/dataproviders/DataProvider.py:25 msgid "Refreshed OK" msgstr "Oppdatering OK" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Refreshing" msgstr "Feil med oppdatering" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronizing..." msgstr "Synkroniserer..." #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronized OK" msgstr "Synkronisering OK" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Error Synchronizing" msgstr "Feil med synkronisering" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Synchronization Skipped" msgstr "Hoppet over synkronisering" #: ../conduit/dataproviders/DataProvider.py:31 msgid "Synchronization Cancelled" msgstr "Synkronisering avbrutt" #: ../conduit/dataproviders/DataProvider.py:32 msgid "Synchronization Conflict" msgstr "Konflikt under synkronisering" #: ../conduit/dataproviders/DataProvider.py:33 msgid "Not Configured" msgstr "Ikke konfigurert" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "640x480" msgstr "640x480" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "800x600" msgstr "800x600" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "1024x768" msgstr "1024x768" #. Signifies that a conversion should not take place #: ../conduit/dataproviders/Image.py:35 #: ../conduit/modules/N800Module/N800Module.py:57 msgid "None" msgstr "Ingen" #. Default Categories for the DataProviders #: ../conduit/dataproviders/__init__.py:6 msgid "Files and Folders" msgstr "Filer og mapper" #: ../conduit/dataproviders/__init__.py:7 #: ../conduit/modules/iPodModule/iPodModule.py:179 msgid "Notes" msgstr "Notater" #: ../conduit/dataproviders/__init__.py:8 #: ../conduit/modules/iPodModule/iPodModule.py:367 msgid "Photos" msgstr "Bilder" #: ../conduit/dataproviders/__init__.py:9 msgid "Office" msgstr "Kontor" #: ../conduit/dataproviders/__init__.py:10 msgid "Settings" msgstr "Innstillinger" #: ../conduit/dataproviders/__init__.py:11 msgid "Miscellaneous" msgstr "Forskjellig" #: ../conduit/dataproviders/__init__.py:12 msgid "Media" msgstr "Media" #: ../conduit/dataproviders/__init__.py:13 msgid "Bookmarks" msgstr "Bokmerker" #: ../conduit/dataproviders/__init__.py:14 msgid "Test" msgstr "Test" #: ../conduit/gtkui/Canvas.py:152 msgid "Drag a Data Provider here to continue" msgstr "Dra en datatilbyder hit for å fortsette" #: ../conduit/gtkui/Canvas.py:217 msgid "Show me" msgstr "Vis meg" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:91 msgid "Source" msgstr "Kilde" #: ../conduit/gtkui/ConflictResolver.py:105 msgid "Resolution" msgstr "Oppløsning" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:110 msgid "Sink" msgstr "Vask" #: ../conduit/gtkui/ConflictResolver.py:150 #: ../conduit/gtkui/ConflictResolver.py:151 #, python-format msgid "Conflicts (%s)" msgstr "Konflikter (%s)" #. name, #url #: ../conduit/gtkui/UI.py:33 msgid "Introduction" msgstr "Innledning" #: ../conduit/gtkui/UI.py:34 #, fuzzy msgid "Writing a Data Provider" msgstr "Datatilbydere" #: ../conduit/gtkui/UI.py:35 #, fuzzy msgid "API Documentation" msgstr "Dokumenter" #: ../conduit/gtkui/UI.py:36 msgid "Test Results" msgstr "" #: ../conduit/gtkui/UI.py:129 #, python-format msgid " - %s (Development Version)" msgstr "" #: ../conduit/gtkui/UI.py:131 msgid " - Running Uninstalled" msgstr "" #: ../conduit/gtkui/UI.py:165 msgid "Examples" msgstr "" #: ../conduit/gtkui/UI.py:177 msgid "Developers" msgstr "" #. Build some liststores to display #: ../conduit/gtkui/UI.py:318 msgid "Convert from" msgstr "Konverter fra" #: ../conduit/gtkui/UI.py:319 msgid "into" msgstr "til" #: ../conduit/gtkui/UI.py:370 msgid "Relationship Database" msgstr "" #: ../conduit/gtkui/UI.py:374 msgid "Conversions Available" msgstr "Konvertering tilgjengelig" #: ../conduit/gtkui/UI.py:380 ../conduit/gtkui/Tree.py:348 #: ../conduit/modules/FileModule/FileConfiguration.py:117 msgid "Name" msgstr "Navn" #: ../conduit/gtkui/UI.py:384 msgid "Loaded" msgstr "Lastet" #: ../conduit/gtkui/UI.py:512 ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "Synkronisering pågår. Vil du avbryte den?" #: ../conduit/gtkui/UI.py:684 msgid "_Synchronize All" msgstr "_Synkroniser alle" #: ../conduit/gtkui/UI.py:684 msgid "Synchronizes All Groups" msgstr "Synkroniserer alle grupper" #: ../conduit/gtkui/UI.py:685 msgid "_Cancel Synchronization" msgstr "_Avbryt synkronisering" #: ../conduit/gtkui/UI.py:685 msgid "Cancels Currently Synchronizing Groups" msgstr "Avbryter grupper som er under synkronisering" #: ../conduit/gtkui/UI.py:686 msgid "_Quit" msgstr "A_vslutt" #: ../conduit/gtkui/UI.py:686 msgid "Close Conduit" msgstr "Lukk Conduit" #: ../conduit/gtkui/UI.py:726 msgid "Synchronization Error" msgstr "Feil ved synkronisering" #: ../conduit/gtkui/UI.py:729 msgid "Synchronization Complete" msgstr "Synkronisering fullført" #: ../conduit/gtkui/UI.py:745 msgid "Synchronizing" msgstr "Synkroniserer" #: ../conduit/gtkui/Tree.py:357 msgid "Description" msgstr "Beskrivelse" #: ../conduit/gtkui/ConfigItems.py:729 #, python-format msgid "Total: %d" msgstr "Totalt: %d" #: ../conduit/gtkui/WindowConfigurator.py:14 msgid "Configure" msgstr "Konfigurer" #: ../conduit/modules/BackpackModule/BackpackModule.py:58 msgid "Backpack Notes" msgstr "" #: ../conduit/modules/BackpackModule/BackpackModule.py:59 msgid "Store things in Backpack Notes" msgstr "" #: ../conduit/modules/BackpackModule/BackpackModule.py:105 #: ../conduit/modules/FlickrModule/FlickrModule.py:307 #: ../conduit/modules/ZotoModule/ZotoModule.py:243 msgid "Account details" msgstr "Detaljer om konto" #: ../conduit/modules/BackpackModule/BackpackModule.py:106 msgid "Login" msgstr "Logg inn" #: ../conduit/modules/BackpackModule/BackpackModule.py:109 msgid "API key" msgstr "API-nøkkel" #: ../conduit/modules/BackpackModule/BackpackModule.py:112 msgid "Saved notes" msgstr "Lagrede notater" #: ../conduit/modules/BackpackModule/BackpackModule.py:113 msgid "Save notes in page" msgstr "" #: ../conduit/modules/BansheeModule/BansheeModule.py:52 msgid "Banshee Playlists" msgstr "Spillelister fra Banshee" #: ../conduit/modules/BansheeModule/BansheeModule.py:53 #, fuzzy msgid "Synchronize your Banshee playlists" msgstr "Spillelister fra Banshee" #: ../conduit/modules/BansheeModule/BansheeModule.py:187 #: ../conduit/modules/BansheeModule/BansheeModule.py:188 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:116 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:117 msgid "Playlists" msgstr "Spillelister" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 msgid "Box.net" msgstr "Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 #, fuzzy msgid "Synchronize your Box.net files" msgstr "Synkroniser mapper" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:290 #: ../conduit/modules/FileModule/FileModule.py:82 msgid "Folder" msgstr "Mappe" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:291 msgid "Folder name" msgstr "Mappenavn" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:295 msgid "Load folders" msgstr "Last mapper" #: ../conduit/modules/ConverterModule.py:91 #, fuzzy msgid "Note-" msgstr "Note-" #: ../conduit/modules/DesktopWallpaperModule.py:38 msgid "Wallpaper" msgstr "" #: ../conduit/modules/DesktopWallpaperModule.py:39 msgid "Changes your Desktop Wallpaper" msgstr "" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:107 #, python-format msgid "Select %s" msgstr "Velg %s" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:127 msgid "Evolution Contacts" msgstr "Evolution kontakter" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:128 msgid "Synchronize your contacts" msgstr "Synkroniser dine kontakter" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:178 msgid "Evolution Calendar" msgstr "Evolution kalender" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:179 msgid "Synchronize your calendar" msgstr "Synkroniser din kalender" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:240 msgid "Evolution Tasks" msgstr "Evolution oppgaver" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:241 msgid "Synchronize your tasks" msgstr "Synkroniser dine oppgaver" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:297 msgid "Evolution Memos" msgstr "Evolution notater" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:298 msgid "Synchronize your memos" msgstr "Synkroniser dine notater" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 msgid "Facebook" msgstr "Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:39 msgid "Synchronize your Facebook photos" msgstr "Synkroniser dine Facebook-bilder" #: ../conduit/modules/FacebookModule/FacebookModule.py:124 #: ../conduit/modules/FlickrModule/FlickrModule.py:282 msgid "Loading album list..." msgstr "" #: ../conduit/modules/FacebookModule/FacebookModule.py:128 msgid "Failed to connect" msgstr "" #: ../conduit/modules/FacebookModule/FacebookModule.py:131 msgid "Logged in" msgstr "Logget inn" #: ../conduit/modules/FacebookModule/FacebookModule.py:133 msgid "Failed to login" msgstr "" #: ../conduit/modules/FacebookModule/FacebookModule.py:145 #: ../conduit/modules/FspotModule/FspotModule.py:243 msgid "Status" msgstr "Status" #: ../conduit/modules/FacebookModule/FacebookModule.py:150 #: ../conduit/modules/iPodModule/iPodModule.py:461 #: ../conduit/modules/ZotoModule/ZotoModule.py:252 msgid "Album" msgstr "Album" #: ../conduit/modules/FacebookModule/FacebookModule.py:151 msgid "Album name" msgstr "Albumnavn" #: ../conduit/modules/FacebookModule/FacebookModule.py:156 msgid "Load albums" msgstr "Last album" #: ../conduit/modules/FeedModule/FeedModule.py:58 msgid "RSS Feed" msgstr "RSS-strøm" #: ../conduit/modules/FeedModule/FeedModule.py:59 #, fuzzy msgid "Synchronize data from RSS enclosures" msgstr "Synkroniser data fra YouTube" #. FIXME: Add Randomize #: ../conduit/modules/FeedModule/FeedModule.py:114 msgid "Feed details" msgstr "" #: ../conduit/modules/FeedModule/FeedModule.py:115 msgid "Feed address" msgstr "" #: ../conduit/modules/FeedModule/FeedModule.py:118 msgid "Enclosure settings" msgstr "" #: ../conduit/modules/FeedModule/FeedModule.py:119 msgid "Limit downloaded enclosures" msgstr "" #: ../conduit/modules/FeedModule/FeedModule.py:125 msgid "Limit to" msgstr "Begrens til" #: ../conduit/modules/FeedModule/FeedModule.py:129 msgid "Randomize enclosures" msgstr "" #: ../conduit/modules/FeedModule/FeedModule.py:133 #, fuzzy msgid "Download types" msgstr "Last ned bilder" #: ../conduit/modules/FeedModule/FeedModule.py:134 msgid "Download audio files" msgstr "Last ned lydfiler" #: ../conduit/modules/FeedModule/FeedModule.py:135 msgid "Download video files" msgstr "Last ned videofiler" #: ../conduit/modules/FeedModule/FeedModule.py:136 msgid "Download photo files" msgstr "Last ned bilder" #: ../conduit/modules/FileModule/FileConfiguration.py:111 msgid "Icon" msgstr "Ikon" #: ../conduit/modules/FileModule/FileConfiguration.py:123 #: ../conduit/modules/GConfModule/GConfModule.py:138 msgid "Items" msgstr "Oppføringer" #: ../conduit/modules/FileModule/FileConfiguration.py:149 #, python-format msgid "Contains %s files" msgstr "Inneholder %s filer" #: ../conduit/modules/FileModule/FileConfiguration.py:248 msgid "Include file..." msgstr "Ta med fil..." #: ../conduit/modules/FileModule/FileConfiguration.py:258 msgid "All files" msgstr "Alle filer" #: ../conduit/modules/FileModule/FileConfiguration.py:271 msgid "Include folder..." msgstr "Ta med mappe..." #: ../conduit/modules/FileModule/FileConfiguration.py:314 msgid "Please Name All Folders" msgstr "Vennligst navngi alle mapper" #: ../conduit/modules/FileModule/FileConfiguration.py:315 msgid "" "All folders require a descriptive name. To name a folder simply click on it" msgstr "" "Alle mapper må ha et beskrivende navn. Klikk på en mappe for å gi den et navn" #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "Filer" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "Kilde for synkronisering av flere filer" #: ../conduit/modules/FileModule/FileModule.py:83 msgid "Synchronize folders" msgstr "Synkroniser mapper" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:40 msgid "Firefox 3 Bookmarks" msgstr "" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:41 msgid "Syncronize your Firefox 3 Bookmarks" msgstr "" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:100 msgid "Firefox Profile" msgstr "" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 msgid "Flickr" msgstr "Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 #, fuzzy msgid "Synchronize your Flickr.com photos" msgstr "Synkroniser dine Facebook-bilder" #: ../conduit/modules/FlickrModule/FlickrModule.py:287 msgid "Failed to connect." msgstr "" #: ../conduit/modules/FlickrModule/FlickrModule.py:290 msgid "Album names loaded." msgstr "" #: ../conduit/modules/FlickrModule/FlickrModule.py:292 msgid "Failed to login." msgstr "" #: ../conduit/modules/FlickrModule/FlickrModule.py:303 msgid "Logging in, please wait..." msgstr "" #: ../conduit/modules/FlickrModule/FlickrModule.py:308 #: ../conduit/modules/GoogleBookmarksModule.py:67 #: ../conduit/modules/ZotoModule/ZotoModule.py:244 msgid "Username" msgstr "Brukernavn" #: ../conduit/modules/FlickrModule/FlickrModule.py:318 msgid "Authenticate" msgstr "Autentiser" #: ../conduit/modules/FlickrModule/FlickrModule.py:322 #: ../conduit/modules/ZotoModule/ZotoModule.py:251 #, fuzzy msgid "Saved photo settings" msgstr "Lagre innstillinger når du avslutter" #: ../conduit/modules/FlickrModule/FlickrModule.py:327 msgid "Resize photos" msgstr "Endre størrelse på bilder" #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "Do not resize" msgstr "" #: ../conduit/modules/FlickrModule/FlickrModule.py:331 msgid "Photos are public" msgstr "Bildene er offentlige" #: ../conduit/modules/FspotModule/FspotModule.py:25 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 msgid "Synchronize your F-Spot photos" msgstr "Synkroniser dine bilder fra F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:152 msgid "F-Spot DBus interface is operating in read-only mode" msgstr "" #: ../conduit/modules/FspotModule/FspotModule.py:218 msgid "F-Spot is running" msgstr "" #: ../conduit/modules/FspotModule/FspotModule.py:219 msgid "Please start F-Spot or activate the D-Bus Extension" msgstr "" #: ../conduit/modules/FspotModule/FspotModule.py:244 msgid "Start F-Spot" msgstr "Start F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:248 #: ../conduit/modules/FspotModule/FspotModule.py:249 msgid "Tags" msgstr "" #: ../conduit/modules/FspotModule/FspotModule.py:262 msgid "Add tags" msgstr "" #: ../conduit/modules/FspotModule/FspotModule.py:263 msgid "Tag name" msgstr "" #: ../conduit/modules/FspotModule/FspotModule.py:266 msgid "Add tag" msgstr "" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "Application Settings" msgstr "Innstillinger for programmer" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Synchronize your application settings" msgstr "" #: ../conduit/modules/GConfModule/GConfModule.py:31 msgid "Metacity" msgstr "Metacity" #: ../conduit/modules/GConfModule/GConfModule.py:32 msgid "Nautilus" msgstr "Nautilus" #: ../conduit/modules/GConfModule/GConfModule.py:33 msgid "Preferred Applications" msgstr "Foretrukne programmer" #: ../conduit/modules/GConfModule/GConfModule.py:34 msgid "Desktop Interface" msgstr "Skrivebordsgrensesnitt" #: ../conduit/modules/GConfModule/GConfModule.py:35 msgid "Gnome Terminal" msgstr "GNOME terminal" #: ../conduit/modules/GConfModule/GConfModule.py:137 #, fuzzy msgid "Applications to Synchronize" msgstr "Conduit synkronisering" #: ../conduit/modules/GoogleBookmarksModule.py:19 msgid "Google Bookmarks" msgstr "Google-bokmerker" #: ../conduit/modules/GoogleBookmarksModule.py:20 #, fuzzy msgid "Sync your Google Bookmarks" msgstr "Synkroniser dine dokumenter Google-dokumenter" #: ../conduit/modules/GoogleBookmarksModule.py:66 msgid "Login Details" msgstr "" #: ../conduit/modules/GoogleBookmarksModule.py:70 #: ../conduit/modules/ZotoModule/ZotoModule.py:247 msgid "Password" msgstr "Passord" #: ../conduit/modules/GoogleModule/GoogleModule.py:399 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:4 msgid "Google Calendar" msgstr "Google kalender" #: ../conduit/modules/GoogleModule/GoogleModule.py:400 msgid "Synchronize your Google Calendar" msgstr "Synkroniser din Google-kalender" #: ../conduit/modules/GoogleModule/GoogleModule.py:582 msgid "Picasa" msgstr "Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:583 #, fuzzy msgid "Synchronize your Google Picasa photos" msgstr "Synkroniser dine Zoto-bilder" #: ../conduit/modules/GoogleModule/GoogleModule.py:745 msgid "Google Contacts" msgstr "Google kontakter" #: ../conduit/modules/GoogleModule/GoogleModule.py:746 msgid "Synchronize your Google Mail contacts" msgstr "Synkroniser dine Google Mail-kontakter" #: ../conduit/modules/GoogleModule/GoogleModule.py:1076 msgid "Google Documents" msgstr "Google dokumenter" #: ../conduit/modules/GoogleModule/GoogleModule.py:1077 msgid "Synchronize your Google Documents" msgstr "Synkroniser dine Google-dokumenter" #: ../conduit/modules/GoogleModule/GoogleModule.py:1322 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:69 msgid "Unknown" msgstr "Ukjent" #: ../conduit/modules/GoogleModule/GoogleModule.py:1323 msgid "miscellaneous" msgstr "forskjellig" #: ../conduit/modules/GoogleModule/GoogleModule.py:1324 msgid "No description." msgstr "Ingen beskrivelse" #: ../conduit/modules/GoogleModule/GoogleModule.py:1333 msgid "YouTube" msgstr "YouTube" #: ../conduit/modules/GoogleModule/GoogleModule.py:1334 msgid "Synchronize data from YouTube" msgstr "Synkroniser data fra YouTube" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:1 msgid "Account Details" msgstr "Detaljer om konto" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:2 msgid "Calendar:" msgstr "Kalender:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:3 msgid "Email:" msgstr "E-post:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:5 msgid "Load Calendars" msgstr "Last kalendere" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:6 msgid "Password:" msgstr "Passord:" #: ../conduit/modules/iPodModule/iPodModule.py:180 #, fuzzy msgid "Synchronize your iPod notes" msgstr "Synkroniser mapper" #: ../conduit/modules/iPodModule/iPodModule.py:295 #: ../conduit/modules/SynceModule.py:311 msgid "Contacts" msgstr "Kontakter" #: ../conduit/modules/iPodModule/iPodModule.py:296 #, fuzzy msgid "Synchronize your iPod contacts" msgstr "Synkroniser dine kontakter" #: ../conduit/modules/iPodModule/iPodModule.py:331 #: ../conduit/modules/SynceModule.py:449 msgid "Calendar" msgstr "Kalender" #: ../conduit/modules/iPodModule/iPodModule.py:332 #, fuzzy msgid "Synchronize your iPod calendar" msgstr "Synkroniser din kalender" #: ../conduit/modules/iPodModule/iPodModule.py:368 #, fuzzy msgid "Synchronize your iPod photos" msgstr "Synkroniser dine Zoto-bilder" #: ../conduit/modules/iPodModule/iPodModule.py:465 msgid "Delete" msgstr "Slett" #: ../conduit/modules/iPodModule/iPodModule.py:695 #: ../conduit/modules/iPodModule/iPodModule.py:812 #: ../conduit/modules/N800Module/N800Module.py:77 msgid "Encoding" msgstr "Koding" #: ../conduit/modules/iPodModule/iPodModule.py:811 #, fuzzy msgid "Conversion options" msgstr "Konfliktvalg" #: ../conduit/modules/iPodModule/iPodModule.py:816 msgid "Keep converted files" msgstr "" #: ../conduit/modules/iPodModule/iPodModule.py:846 msgid "iPod Music" msgstr "iPod-musikk" #: ../conduit/modules/iPodModule/iPodModule.py:847 #, fuzzy msgid "Synchronize your iPod music" msgstr "Synkroniser gruppe" #: ../conduit/modules/iPodModule/iPodModule.py:882 msgid "iPod Video" msgstr "iPod-video" #: ../conduit/modules/iPodModule/iPodModule.py:883 #, fuzzy msgid "Synchronize your iPod videos" msgstr "Synkroniser mapper" #: ../conduit/modules/iPodModule/iPodModule.py:907 msgid "Movie" msgstr "Film" #: ../conduit/modules/iPodModule/iPodModule.py:908 msgid "Music Video" msgstr "Musikkvideo" #: ../conduit/modules/iPodModule/iPodModule.py:909 msgid "TV Show" msgstr "TV-show" #: ../conduit/modules/iPodModule/iPodModule.py:911 #, fuzzy msgid "Video kind" msgstr "Video" #. Translators: Translate this in derived classes. #: ../conduit/modules/N800Module/N800Module.py:55 msgid "Conduit" msgstr "Conduit" #: ../conduit/modules/N800Module/N800Module.py:105 msgid "N800 Files" msgstr "N800-filer" #: ../conduit/modules/N800Module/N800Module.py:106 msgid "Synchronizes files/folders to a N800 device" msgstr "" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:111 msgid "Backups" msgstr "Sikkerhetskopier" #: ../conduit/modules/N800Module/N800Module.py:126 msgid "N800 Music" msgstr "N800-musikk" #: ../conduit/modules/N800Module/N800Module.py:127 msgid "Synchronizes music to a N800 device" msgstr "" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:133 msgid "Music" msgstr "Musikk" #: ../conduit/modules/N800Module/N800Module.py:150 msgid "N800 Videos" msgstr "N800-videoer" #: ../conduit/modules/N800Module/N800Module.py:151 msgid "Synchronizes video to a N800 device" msgstr "" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:157 msgid "Video" msgstr "Video" #: ../conduit/modules/N800Module/N800Module.py:174 msgid "N800 Photos" msgstr "N800-bilder" #: ../conduit/modules/N800Module/N800Module.py:175 msgid "Synchronizes photos to an N800 device" msgstr "" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:181 msgid "Photo" msgstr "Bilde" #: ../conduit/modules/NautilusBookmarksModule.py:19 msgid "Nautilus Bookmarks" msgstr "Nautilus-bokmerker" #: ../conduit/modules/NautilusBookmarksModule.py:20 #, fuzzy msgid "Sync your Nautilus Bookmarks" msgstr "Synkroniser dine Gmail-kontakter" #: ../conduit/modules/NautilusBookmarksModule.py:145 msgid "Sync bookmarks to local places/files" msgstr "" #: ../conduit/modules/NautilusBookmarksModule.py:148 msgid "Sync bookmarks to remote places/files" msgstr "" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "Nettverk" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "Aktiver synkronisering over nettverk" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:44 msgid "Rhythmbox Music" msgstr "Rhythmbox-musikk" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:45 #, fuzzy msgid "Synchronize songs from your Rhythmbox playlists" msgstr "Synkroniser sanger fra dine spillelister i Rhythmbox" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 msgid "Shutterfly" msgstr "" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 #, fuzzy msgid "Synchronize your Shutterfly photos" msgstr "Synkroniser dine bilder fra F-Spot" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 msgid "SmugMug" msgstr "" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 #, fuzzy msgid "Synchronize your SmugMug.com photos" msgstr "Synkroniser dine bilder fra F-Spot" #: ../conduit/modules/SynceModule.py:139 msgid "Create Partnership" msgstr "" #: ../conduit/modules/SynceModule.py:312 #, fuzzy msgid "Windows Mobile Contacts" msgstr "Google kontakter" #: ../conduit/modules/SynceModule.py:450 #, fuzzy msgid "Windows Mobile Calendar" msgstr "Google kalender" #: ../conduit/modules/SynceModule.py:459 msgid "Tasks" msgstr "" #: ../conduit/modules/SynceModule.py:460 msgid "Windows Mobile Tasks" msgstr "" #: ../conduit/modules/ZotoModule/ZotoModule.py:154 msgid "Zoto" msgstr "Zoto" #: ../conduit/modules/ZotoModule/ZotoModule.py:155 #, fuzzy msgid "Synchronize your Zoto photos" msgstr "Synkroniser dine Zoto-bilder" conduit-0.3.17/po/pt_BR.po0000644000175000017500000012267211321403566012167 00000000000000# Brazilian Portuguese translation for conduit. # Copyright (C) 2007 Free Software Foundation, Inc. # This file is distributed under the same license as the conduit package. # Vladimir Melo , 2007-2008. # Og Maciel , 2008. # Leonardo Fontenelle , 2008. # Fábio Nogueira , 2008. # Michel Recondo , 2008. # # Flamarion Jorge , 2009. # Jonh Wendell , 2009. msgid "" msgstr "" "Project-Id-Version: conduit\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-08-25 16:29-0300\n" "PO-Revision-Date: 2009-08-25 16:27-0300\n" "Last-Translator: Flamarion Jorge \n" "Language-Team: Brazilian Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../data/conduit.desktop.in.in.h:1 msgid "Conduit Synchronizer" msgstr "Sincronizador Conduit" #: ../data/conduit.desktop.in.in.h:2 msgid "Synchronization for GNOME" msgstr "Sincronização para GNOME" #: ../data/conduit.glade.h:1 msgid "Default Synchronization Options" msgstr "Opções padrões de sincronização" #: ../data/conduit.glade.h:2 msgid "General" msgstr "Geral" #: ../data/conduit.glade.h:3 msgid "Always Up-To-Date" msgstr "Sempre atualizar" #: ../data/conduit.glade.h:4 msgid "Ask Me What to Do" msgstr "Pergunte-me o que fazer" #: ../data/conduit.glade.h:5 msgid "Ask me what to do" msgstr "Pergunta o que fazer" #: ../data/conduit.glade.h:6 msgid "Cancel Synchronization" msgstr "Cancelar sincronização" #: ../data/conduit.glade.h:7 msgid "Cancel currently-synchronizing groups" msgstr "Cancela a sincronização atual de grupos" #: ../data/conduit.glade.h:8 msgid "Clear Canvas" msgstr "Limpar tela" #: ../data/conduit.glade.h:9 msgid "Compare" msgstr "Comparar" #: ../data/conduit.glade.h:10 msgid "Conduit Preferences" msgstr "Preferências do Conduit" #: ../data/conduit.glade.h:11 msgid "Configuration" msgstr "Configurações" #: ../data/conduit.glade.h:12 msgid "Configure Item" msgstr "Configurar item" #: ../data/conduit.glade.h:13 msgid "Configure the synchronization settings for this item" msgstr "Define as configurações de sincronização para este item" #: ../data/conduit.glade.h:14 msgid "Conflict Options" msgstr "Opções de conflito" #: ../data/conduit.glade.h:15 msgid "Conflicts" msgstr "Conflitos" #: ../data/conduit.glade.h:16 msgid "Contents" msgstr "Conteúdos" #: ../data/conduit.glade.h:17 msgid "Data Conversions" msgstr "Conversões de dados" #: ../data/conduit.glade.h:18 msgid "Data Providers" msgstr "Provedores de dados" #: ../data/conduit.glade.h:19 msgid "Delete Group" msgstr "Excluir grupo" #: ../data/conduit.glade.h:20 msgid "Delete Item" msgstr "Excluir item" #: ../data/conduit.glade.h:21 msgid "Delete Options" msgstr "Opções de exclusão" #: ../data/conduit.glade.h:22 msgid "Delete from the corresponding sink" msgstr "Excluir do recipiente correspondente" #: ../data/conduit.glade.h:23 msgid "Delete the Corresponding Item" msgstr "Excluir o item correspondente" #: ../data/conduit.glade.h:24 msgid "Editor" msgstr "Editor" #: ../data/conduit.glade.h:25 msgid "Minimize to notification area" msgstr "Minimizar para área de notificação" #: ../data/conduit.glade.h:26 msgid "Refresh Group" msgstr "Atualizar grupo" #: ../data/conduit.glade.h:27 msgid "Refresh Item" msgstr "Atualizar item" #: ../data/conduit.glade.h:28 msgid "Replace the Older Item" msgstr "Substituir o item mais antigo" #: ../data/conduit.glade.h:29 msgid "Replace the older item" msgstr "Substitui o item mais antigo" #: ../data/conduit.glade.h:30 msgid "Resolve Conflicts" msgstr "Resolver conflitos" #: ../data/conduit.glade.h:31 msgid "Save settings on exit" msgstr "Salvar configurações ao sair" #: ../data/conduit.glade.h:32 msgid "Show Hints" msgstr "Mostrar dicas" #: ../data/conduit.glade.h:33 msgid "Show status icon" msgstr "Mostrar ícone de status" #: ../data/conduit.glade.h:34 msgid "Skip" msgstr "Pular" #: ../data/conduit.glade.h:35 msgid "Slow Synchronization" msgstr "Sincronização lenta" #: ../data/conduit.glade.h:36 msgid "Start Conduit at login" msgstr "Iniciar o Conduit no início da sessão" #: ../data/conduit.glade.h:37 msgid "Synchronization Options" msgstr "Opções de sincronização" #: ../data/conduit.glade.h:38 msgid "Synchronize All" msgstr "Sincronizar tudo" #: ../data/conduit.glade.h:39 msgid "Synchronize Group" msgstr "Sincronizar grupo" #: ../data/conduit.glade.h:40 msgid "Synchronize group" msgstr "Sincroniza grupo" #: ../data/conduit.glade.h:41 msgid "Synchronizes all groups" msgstr "Sincroniza todos os grupos" #: ../data/conduit.glade.h:42 msgid "Title" msgstr "Título" #: ../data/conduit.glade.h:43 msgid "Two-Way Synchronization" msgstr "Sincronização bilateral" #: ../data/conduit.glade.h:44 msgid "When an item has been deleted:" msgstr "Quando um item for excluído:" #: ../data/conduit.glade.h:45 msgid "When an item is deleted..." msgstr "Quando um item é excluído..." #: ../data/conduit.glade.h:46 msgid "When there is a conflict..." msgstr "Quando houver um conflito..." #: ../data/conduit.glade.h:47 msgid "When there is a two-way conflict:" msgstr "Quando houver um conflito bilateral:" #: ../data/conduit.glade.h:48 msgid "_Edit" msgstr "_Editar" #: ../data/conduit.glade.h:49 msgid "_File" msgstr "_Arquivo" #: ../data/conduit.glade.h:50 msgid "_Help" msgstr "Aj_uda" #: ../conduit/Knowledge.py:8 msgid "What Do You Want to Synchronize?" msgstr "O que você quer sincronizar?" #: ../conduit/Knowledge.py:9 msgid "Drag and Drop a Data Provider on the Canvas" msgstr "Arraste e solte um provedor de dados sobre a tela" #: ../conduit/Knowledge.py:11 msgid "Synchronization Group Created" msgstr "Sincronização de grupo criada" #: ../conduit/Knowledge.py:12 msgid "Add Another Data Provider to the Group to Synchronize it" msgstr "Adicione outro provedor de dados para o grupo para sincroniza-lo" #: ../conduit/Knowledge.py:14 msgid "You Are Now Ready to Synchronize" msgstr "Você está pronto para sincronizar" #: ../conduit/Knowledge.py:15 msgid "Right Click on Group for Options" msgstr "Clique com o botão direito para opções de grupo" #. source,sinc #comment #. twoway #: ../conduit/Knowledge.py:22 msgid "Synchronize Two Folders" msgstr "Sincronizar duas pastas" #: ../conduit/Knowledge.py:24 msgid "Backup Folder to Box.net" msgstr "Backup de pasta no Box.net" #: ../conduit/Knowledge.py:26 msgid "Synchronize Tagged F-Spot Photos to Flickr" msgstr "Sincroniza fotos etiquetadas do F-Spot para o Flickr" #: ../conduit/Main.py:59 msgid "Conduit is a synchronization application." msgstr "Conduit é um aplicativo de sincronização." #: ../conduit/Main.py:63 #, python-format msgid "Launch without GUI. [default: %default]" msgstr "Lançar sem interface gráfica [padrão: %default]" #: ../conduit/Main.py:67 #, python-format msgid "Save dataprovider configuration to FILE. [default: %default]" msgstr "Salvar configuração de provedor de dados no ARQUIVO [padrão: %default]" #: ../conduit/Main.py:71 #, python-format msgid "Iconify on startup. [default: %default]" msgstr "Minimizar na inicialização [padrão: %default]" #: ../conduit/Main.py:75 #, python-format msgid "Run with the specified UI. [default: %default]" msgstr "Executar com UI específico [default: %default]" #: ../conduit/Main.py:79 msgid "Only load modules in the named files. [default: load all modules]" msgstr "" "Somente carregar módulos nas chamadas de arquivos [padrão: carregar todos " "módulos]" #: ../conduit/Main.py:83 msgid "Do not load modules in the named files. [default: load all modules]" msgstr "" "Não carregar módulos nas chamadas de arquivos. [padrão: carregar todos " "módulos]" #: ../conduit/Main.py:87 msgid "" "Explicitly set internal Conduit settings (keys) to the given values for this " "session. [default: do not set]" msgstr "" "Explicitamente definir configurações (chaves) internas no Conduit de\n" "determinados valores para esta sessão, [padrão: não definir]" #: ../conduit/Main.py:91 #, python-format msgid "" "Enable loading of unfinished or unsupported dataproviders. [default: %" "default]" msgstr "" "Habilitar carregamento de provedores de dados inacabados ou sem suporte. " "[default: %default]" #: ../conduit/Main.py:95 #, python-format msgid "Generate more debugging information. [default: %default]" msgstr "Gerar mais informações de depuração. [padrão: %default]" #: ../conduit/Main.py:99 #, python-format msgid "Generate less debugging information. [default: %default]" msgstr "Gerar menos informações de depuração. [padrão: %default]" #: ../conduit/Main.py:103 #, python-format msgid "Generate no debugging information. [default: %default]" msgstr "Não gerar informações de depuração. [padrão: %default]" #: ../conduit/dataproviders/DataProvider.py:22 msgid "Ready" msgstr "Pronto" #: ../conduit/dataproviders/DataProvider.py:23 msgid "New data to sync" msgstr "Novos dados para sincronizar" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Refreshing..." msgstr "Atualizando..." #: ../conduit/dataproviders/DataProvider.py:25 msgid "Refreshed OK" msgstr "Atualizado com sucesso" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Refreshing" msgstr "Erro de atualização" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronizing..." msgstr "Sincronizando..." #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronized OK" msgstr "Sincronizado com sucesso" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Error Synchronizing" msgstr "Erro de sincronização" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Synchronization Skipped" msgstr "Sincronização ignorada" #: ../conduit/dataproviders/DataProvider.py:31 msgid "Synchronization Cancelled" msgstr "Sincronização cancelada" #: ../conduit/dataproviders/DataProvider.py:32 msgid "Synchronization Conflict" msgstr "Conflito de sincronização" #: ../conduit/dataproviders/DataProvider.py:33 msgid "Not Configured" msgstr "Não configurado" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "640x480" msgstr "640x480" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "800x600" msgstr "800x600" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "1024x768" msgstr "1024x768" #. Signifies that a conversion should not take place #: ../conduit/dataproviders/Image.py:35 #: ../conduit/modules/N800Module/N800Module.py:57 msgid "None" msgstr "Nenhum" #. Default Categories for the DataProviders #: ../conduit/dataproviders/__init__.py:6 msgid "Files and Folders" msgstr "Arquivos e pastas" #: ../conduit/dataproviders/__init__.py:7 #: ../conduit/modules/iPodModule/iPodModule.py:179 msgid "Notes" msgstr "Notas" #: ../conduit/dataproviders/__init__.py:8 #: ../conduit/modules/iPodModule/iPodModule.py:367 msgid "Photos" msgstr "Fotos" #: ../conduit/dataproviders/__init__.py:9 msgid "Office" msgstr "Escritório" #: ../conduit/dataproviders/__init__.py:10 msgid "Settings" msgstr "Configurações" #: ../conduit/dataproviders/__init__.py:11 msgid "Miscellaneous" msgstr "Miscelânea" #: ../conduit/dataproviders/__init__.py:12 msgid "Media" msgstr "Mídia" #: ../conduit/dataproviders/__init__.py:13 msgid "Bookmarks" msgstr "Marcadores" #: ../conduit/dataproviders/__init__.py:14 msgid "Test" msgstr "Teste" #: ../conduit/gtkui/Canvas.py:152 msgid "Drag a Data Provider here to continue" msgstr "Arraste um provedor de dados para cá para continuar" #: ../conduit/gtkui/Canvas.py:217 msgid "Show me" msgstr "Mostre-me" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:91 msgid "Source" msgstr "Fonte" #: ../conduit/gtkui/ConflictResolver.py:105 msgid "Resolution" msgstr "Resolução" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:110 msgid "Sink" msgstr "Recipiente" #: ../conduit/gtkui/ConflictResolver.py:150 #: ../conduit/gtkui/ConflictResolver.py:151 #, python-format msgid "Conflicts (%s)" msgstr "Conflitos (%s)" #. name, #url #: ../conduit/gtkui/UI.py:33 msgid "Introduction" msgstr "Introdução" #: ../conduit/gtkui/UI.py:34 msgid "Writing a Data Provider" msgstr "Gravar um provedor de dados" #: ../conduit/gtkui/UI.py:35 msgid "API Documentation" msgstr "Documentação da API" #: ../conduit/gtkui/UI.py:36 msgid "Test Results" msgstr "Resultados de testes" #: ../conduit/gtkui/UI.py:129 #, python-format msgid " - %s (Development Version)" msgstr " - %s (Versão de desenvolvimento)" #: ../conduit/gtkui/UI.py:131 msgid " - Running Uninstalled" msgstr " - Executando sem estar instalado" #: ../conduit/gtkui/UI.py:165 msgid "Examples" msgstr "Exemplos" #: ../conduit/gtkui/UI.py:177 msgid "Developers" msgstr "Desenvolvedores" #. Build some liststores to display #: ../conduit/gtkui/UI.py:318 msgid "Convert from" msgstr "Converter de" #: ../conduit/gtkui/UI.py:319 msgid "into" msgstr "para" #: ../conduit/gtkui/UI.py:370 msgid "Relationship Database" msgstr "Banco de dados de relações" #: ../conduit/gtkui/UI.py:374 msgid "Conversions Available" msgstr "Conversões disponíveis" #: ../conduit/gtkui/UI.py:380 ../conduit/gtkui/Tree.py:348 #: ../conduit/modules/FileModule/FileConfiguration.py:117 msgid "Name" msgstr "Nome" #: ../conduit/gtkui/UI.py:384 msgid "Loaded" msgstr "Carregado" #: ../conduit/gtkui/UI.py:512 ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "Sincronização em progresso. Você deseja cancelar?" #: ../conduit/gtkui/UI.py:684 msgid "_Synchronize All" msgstr "_Sincronizar tudo" #: ../conduit/gtkui/UI.py:684 msgid "Synchronizes All Groups" msgstr "Sincronizar todos os grupos" #: ../conduit/gtkui/UI.py:685 msgid "_Cancel Synchronization" msgstr "_Cancelar sincronização" #: ../conduit/gtkui/UI.py:685 msgid "Cancels Currently Synchronizing Groups" msgstr "Cancela a sincronização atual de grupos" #: ../conduit/gtkui/UI.py:686 msgid "_Quit" msgstr "_Sair" #: ../conduit/gtkui/UI.py:686 msgid "Close Conduit" msgstr "Fecha o Conduit" #: ../conduit/gtkui/UI.py:726 msgid "Synchronization Error" msgstr "Erro de sincronização" #: ../conduit/gtkui/UI.py:729 msgid "Synchronization Complete" msgstr "Sincronização concluída" #: ../conduit/gtkui/UI.py:745 msgid "Synchronizing" msgstr "Sincronizando" #: ../conduit/gtkui/Tree.py:357 msgid "Description" msgstr "Descrição" #: ../conduit/gtkui/ConfigItems.py:729 #, python-format msgid "Total: %d" msgstr "Total: %d" #: ../conduit/gtkui/WindowConfigurator.py:14 msgid "Configure" msgstr "Configurar" #: ../conduit/modules/BackpackModule/BackpackModule.py:58 msgid "Backpack Notes" msgstr "Notas do Backpack" #: ../conduit/modules/BackpackModule/BackpackModule.py:59 msgid "Store things in Backpack Notes" msgstr "Armazenar coisas nas notas do Backpack" #: ../conduit/modules/BackpackModule/BackpackModule.py:105 #: ../conduit/modules/FlickrModule/FlickrModule.py:307 #: ../conduit/modules/ZotoModule/ZotoModule.py:243 msgid "Account details" msgstr "Detalhes da conta" #: ../conduit/modules/BackpackModule/BackpackModule.py:106 msgid "Login" msgstr "Iniciar sessão" #: ../conduit/modules/BackpackModule/BackpackModule.py:109 msgid "API key" msgstr "Chave API" #: ../conduit/modules/BackpackModule/BackpackModule.py:112 msgid "Saved notes" msgstr "Notas salvas" #: ../conduit/modules/BackpackModule/BackpackModule.py:113 msgid "Save notes in page" msgstr "Salvar notas na página" #: ../conduit/modules/BansheeModule/BansheeModule.py:52 msgid "Banshee Playlists" msgstr "Listas de reprodução do Banshee" #: ../conduit/modules/BansheeModule/BansheeModule.py:53 msgid "Synchronize your Banshee playlists" msgstr "Sincroniza suas listas de reprodução do Banshee" #: ../conduit/modules/BansheeModule/BansheeModule.py:187 #: ../conduit/modules/BansheeModule/BansheeModule.py:188 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:116 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:117 msgid "Playlists" msgstr "Listas de reprodução" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 msgid "Box.net" msgstr "Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 msgid "Synchronize your Box.net files" msgstr "Sincroniza seus arquivos do Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:290 #: ../conduit/modules/FileModule/FileModule.py:82 msgid "Folder" msgstr "Pasta" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:291 msgid "Folder name" msgstr "Nome da pasta" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:295 msgid "Load folders" msgstr "Carregar pastas" #: ../conduit/modules/ConverterModule.py:91 msgid "Note-" msgstr "Nota-" #: ../conduit/modules/DesktopWallpaperModule.py:38 msgid "Wallpaper" msgstr "Papel de parede" #: ../conduit/modules/DesktopWallpaperModule.py:39 msgid "Changes your Desktop Wallpaper" msgstr "Troca o plano de fundo da sua área de trabalho" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:107 #, python-format msgid "Select %s" msgstr "Selecionar %s" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:127 msgid "Evolution Contacts" msgstr "Contatos do Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:128 msgid "Synchronize your contacts" msgstr "Sincroniza seus contatos" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:178 msgid "Evolution Calendar" msgstr "Calendário do Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:179 msgid "Synchronize your calendar" msgstr "Sincroniza seu calendário" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:240 msgid "Evolution Tasks" msgstr "Tarefas do Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:241 msgid "Synchronize your tasks" msgstr "Sincroniza suas tarefas" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:297 msgid "Evolution Memos" msgstr "Memorandos do Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:298 msgid "Synchronize your memos" msgstr "Sincroniza seus memorandos" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 msgid "Facebook" msgstr "Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:39 msgid "Synchronize your Facebook photos" msgstr "Sincroniza suas fotos do Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:124 #: ../conduit/modules/FlickrModule/FlickrModule.py:282 msgid "Loading album list..." msgstr "Obtendo lista de álbuns..." #: ../conduit/modules/FacebookModule/FacebookModule.py:128 msgid "Failed to connect" msgstr "Falha ao conectar" #: ../conduit/modules/FacebookModule/FacebookModule.py:131 msgid "Logged in" msgstr "Autenticado" #: ../conduit/modules/FacebookModule/FacebookModule.py:133 msgid "Failed to login" msgstr "Falha no login" #: ../conduit/modules/FacebookModule/FacebookModule.py:145 #: ../conduit/modules/FspotModule/FspotModule.py:243 msgid "Status" msgstr "Status" #: ../conduit/modules/FacebookModule/FacebookModule.py:150 #: ../conduit/modules/iPodModule/iPodModule.py:461 #: ../conduit/modules/ZotoModule/ZotoModule.py:252 msgid "Album" msgstr "Álbum" #: ../conduit/modules/FacebookModule/FacebookModule.py:151 msgid "Album name" msgstr "Nome do álbum" #: ../conduit/modules/FacebookModule/FacebookModule.py:156 msgid "Load albums" msgstr "Carregar álbuns" #: ../conduit/modules/FeedModule/FeedModule.py:58 msgid "RSS Feed" msgstr "Fonte de RSS" #: ../conduit/modules/FeedModule/FeedModule.py:59 msgid "Synchronize data from RSS enclosures" msgstr "Sincroniza dados de componentes de RSS" #. FIXME: Add Randomize #: ../conduit/modules/FeedModule/FeedModule.py:114 msgid "Feed details" msgstr "Detalhes da fonte de notícias" #: ../conduit/modules/FeedModule/FeedModule.py:115 msgid "Feed address" msgstr "Endereço da fonte de notícias" #: ../conduit/modules/FeedModule/FeedModule.py:118 msgid "Enclosure settings" msgstr "Configurações de componentes" #: ../conduit/modules/FeedModule/FeedModule.py:119 msgid "Limit downloaded enclosures" msgstr "Limitar download de componentes" #: ../conduit/modules/FeedModule/FeedModule.py:125 msgid "Limit to" msgstr "Limitar para" #: ../conduit/modules/FeedModule/FeedModule.py:129 msgid "Randomize enclosures" msgstr "Randomizar componentes" #: ../conduit/modules/FeedModule/FeedModule.py:133 msgid "Download types" msgstr "Baixar tipos" #: ../conduit/modules/FeedModule/FeedModule.py:134 msgid "Download audio files" msgstr "Baixar arquivos de áudio" #: ../conduit/modules/FeedModule/FeedModule.py:135 msgid "Download video files" msgstr "Baixar arquivos de vídeo" #: ../conduit/modules/FeedModule/FeedModule.py:136 msgid "Download photo files" msgstr "Baixar arquivos de fotos" #: ../conduit/modules/FileModule/FileConfiguration.py:111 msgid "Icon" msgstr "Ícone" #: ../conduit/modules/FileModule/FileConfiguration.py:123 #: ../conduit/modules/GConfModule/GConfModule.py:138 msgid "Items" msgstr "Itens" #: ../conduit/modules/FileModule/FileConfiguration.py:149 #, python-format msgid "Contains %s files" msgstr "Contém %s arquivos" #: ../conduit/modules/FileModule/FileConfiguration.py:248 msgid "Include file..." msgstr "Incluir arquivo..." #: ../conduit/modules/FileModule/FileConfiguration.py:258 msgid "All files" msgstr "Todos os arquivos" #: ../conduit/modules/FileModule/FileConfiguration.py:271 msgid "Include folder..." msgstr "Incluir pasta..." #: ../conduit/modules/FileModule/FileConfiguration.py:314 msgid "Please Name All Folders" msgstr "Por favor nomeie todas as pastas" #: ../conduit/modules/FileModule/FileConfiguration.py:315 msgid "" "All folders require a descriptive name. To name a folder simply click on it" msgstr "" "Todas as pastas requerem um nome descritivo. Para nomear uma pasta " "simplesmente clique nela" #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "Arquivos" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "Fonte para sincronização de arquivos múltiplos" #: ../conduit/modules/FileModule/FileModule.py:83 msgid "Synchronize folders" msgstr "Sincronizar pastas" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:40 msgid "Firefox 3 Bookmarks" msgstr "Marcadores do Firefox" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:41 msgid "Syncronize your Firefox 3 Bookmarks" msgstr "Sincroniza seus marcadores do Firefox 3" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:100 msgid "Firefox Profile" msgstr "Perfil do Firefox" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 msgid "Flickr" msgstr "Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 msgid "Synchronize your Flickr.com photos" msgstr "Sincroniza suas fotos do Flickr.com" #: ../conduit/modules/FlickrModule/FlickrModule.py:287 msgid "Failed to connect." msgstr "Falha ao conectar." #: ../conduit/modules/FlickrModule/FlickrModule.py:290 msgid "Album names loaded." msgstr "Nomes de álbuns carregados." #: ../conduit/modules/FlickrModule/FlickrModule.py:292 msgid "Failed to login." msgstr "Falha no login." #: ../conduit/modules/FlickrModule/FlickrModule.py:303 msgid "Logging in, please wait..." msgstr "Identificando, por favor aguarde..." #: ../conduit/modules/FlickrModule/FlickrModule.py:308 #: ../conduit/modules/GoogleBookmarksModule.py:67 #: ../conduit/modules/ZotoModule/ZotoModule.py:244 msgid "Username" msgstr "Nome de usuário" #: ../conduit/modules/FlickrModule/FlickrModule.py:318 msgid "Authenticate" msgstr "Autenticar" #: ../conduit/modules/FlickrModule/FlickrModule.py:322 #: ../conduit/modules/ZotoModule/ZotoModule.py:251 msgid "Saved photo settings" msgstr "Preferências de fotos salvas" #: ../conduit/modules/FlickrModule/FlickrModule.py:327 msgid "Resize photos" msgstr "Redimensionar fotos" #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "Do not resize" msgstr "Não redimensionar" #: ../conduit/modules/FlickrModule/FlickrModule.py:331 msgid "Photos are public" msgstr "As fotos são públicas" #: ../conduit/modules/FspotModule/FspotModule.py:25 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 msgid "Synchronize your F-Spot photos" msgstr "Sincroniza suas fotos do F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:152 msgid "F-Spot DBus interface is operating in read-only mode" msgstr "A interface DBus do F-Spot está operando em modo somente leitura" #: ../conduit/modules/FspotModule/FspotModule.py:218 msgid "F-Spot is running" msgstr "F-Spot está executando" #: ../conduit/modules/FspotModule/FspotModule.py:219 msgid "Please start F-Spot or activate the D-Bus Extension" msgstr "Por favor inicie o F-Spot ou ative a extensão D-Bus" #: ../conduit/modules/FspotModule/FspotModule.py:244 msgid "Start F-Spot" msgstr "Iniciar F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:248 #: ../conduit/modules/FspotModule/FspotModule.py:249 msgid "Tags" msgstr "Etiquetas" #: ../conduit/modules/FspotModule/FspotModule.py:262 msgid "Add tags" msgstr "Adicionar etiquetas" #: ../conduit/modules/FspotModule/FspotModule.py:263 msgid "Tag name" msgstr "Nome da etiqueta" #: ../conduit/modules/FspotModule/FspotModule.py:266 msgid "Add tag" msgstr "Adicionar etiqueta" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "Application Settings" msgstr "Configurações do aplicativo" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Synchronize your application settings" msgstr "Sincroniza as configurações dos seus aplicativos" #: ../conduit/modules/GConfModule/GConfModule.py:31 msgid "Metacity" msgstr "Metacity" #: ../conduit/modules/GConfModule/GConfModule.py:32 msgid "Nautilus" msgstr "Nautilus" #: ../conduit/modules/GConfModule/GConfModule.py:33 msgid "Preferred Applications" msgstr "Aplicativos preferenciais" #: ../conduit/modules/GConfModule/GConfModule.py:34 msgid "Desktop Interface" msgstr "Interface da área de trabalho" #: ../conduit/modules/GConfModule/GConfModule.py:35 msgid "Gnome Terminal" msgstr "GNOME Terminal" #: ../conduit/modules/GConfModule/GConfModule.py:137 msgid "Applications to Synchronize" msgstr "Aplicativos a sincronizar" #: ../conduit/modules/GoogleBookmarksModule.py:19 msgid "Google Bookmarks" msgstr "Google Bookmarks" #: ../conduit/modules/GoogleBookmarksModule.py:20 msgid "Sync your Google Bookmarks" msgstr "Sincroniza seu Google Bookmarks" #: ../conduit/modules/GoogleBookmarksModule.py:66 msgid "Login Details" msgstr "Detalhes de login" #: ../conduit/modules/GoogleBookmarksModule.py:70 #: ../conduit/modules/ZotoModule/ZotoModule.py:247 msgid "Password" msgstr "Senha" #: ../conduit/modules/GoogleModule/GoogleModule.py:399 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:4 msgid "Google Calendar" msgstr "Google Agenda" #: ../conduit/modules/GoogleModule/GoogleModule.py:400 msgid "Synchronize your Google Calendar" msgstr "Sincroniza seu Google Agenda" #: ../conduit/modules/GoogleModule/GoogleModule.py:582 msgid "Picasa" msgstr "Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:583 msgid "Synchronize your Google Picasa photos" msgstr "Sincroniza suas fotos do Google Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:745 msgid "Google Contacts" msgstr "Contatos do Gmail" #: ../conduit/modules/GoogleModule/GoogleModule.py:746 msgid "Synchronize your Google Mail contacts" msgstr "Sincroniza seus contatos do Gmail" #: ../conduit/modules/GoogleModule/GoogleModule.py:1076 msgid "Google Documents" msgstr "Google Docs" #: ../conduit/modules/GoogleModule/GoogleModule.py:1077 msgid "Synchronize your Google Documents" msgstr "Sincroniza seu Google Docs" #: ../conduit/modules/GoogleModule/GoogleModule.py:1322 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:69 msgid "Unknown" msgstr "Desconhecido" #: ../conduit/modules/GoogleModule/GoogleModule.py:1323 msgid "miscellaneous" msgstr "miscelânea" #: ../conduit/modules/GoogleModule/GoogleModule.py:1324 msgid "No description." msgstr "Nenhuma descrição." #: ../conduit/modules/GoogleModule/GoogleModule.py:1333 msgid "YouTube" msgstr "YouTube" #: ../conduit/modules/GoogleModule/GoogleModule.py:1334 msgid "Synchronize data from YouTube" msgstr "Sincroniza dados do YouTube" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:1 msgid "Account Details" msgstr "Detalhes da conta" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:2 msgid "Calendar:" msgstr "Agenda:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:3 msgid "Email:" msgstr "E-mail:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:5 msgid "Load Calendars" msgstr "Carregar agendas" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:6 msgid "Password:" msgstr "Senha:" #: ../conduit/modules/iPodModule/iPodModule.py:180 msgid "Synchronize your iPod notes" msgstr "Sincroniza suas notas do iPod" #: ../conduit/modules/iPodModule/iPodModule.py:295 #: ../conduit/modules/SynceModule.py:311 msgid "Contacts" msgstr "Contatos" #: ../conduit/modules/iPodModule/iPodModule.py:296 msgid "Synchronize your iPod contacts" msgstr "Sincroniza seus contatos do iPod" #: ../conduit/modules/iPodModule/iPodModule.py:331 #: ../conduit/modules/SynceModule.py:449 msgid "Calendar" msgstr "Calendário" #: ../conduit/modules/iPodModule/iPodModule.py:332 msgid "Synchronize your iPod calendar" msgstr "Sincroniza seu calendário do iPod" #: ../conduit/modules/iPodModule/iPodModule.py:368 msgid "Synchronize your iPod photos" msgstr "Sincroniza suas fotos do iPod" #: ../conduit/modules/iPodModule/iPodModule.py:465 msgid "Delete" msgstr "Excluir" #: ../conduit/modules/iPodModule/iPodModule.py:695 #: ../conduit/modules/iPodModule/iPodModule.py:812 #: ../conduit/modules/N800Module/N800Module.py:77 msgid "Encoding" msgstr "Codificação" #: ../conduit/modules/iPodModule/iPodModule.py:811 msgid "Conversion options" msgstr "Opções de conversão" #: ../conduit/modules/iPodModule/iPodModule.py:816 msgid "Keep converted files" msgstr "Manter arquivos convertidos" #: ../conduit/modules/iPodModule/iPodModule.py:846 msgid "iPod Music" msgstr "Músicas do iPod" #: ../conduit/modules/iPodModule/iPodModule.py:847 msgid "Synchronize your iPod music" msgstr "Sincroniza suas músicas do iPod" #: ../conduit/modules/iPodModule/iPodModule.py:882 msgid "iPod Video" msgstr "Vídeos do iPod" #: ../conduit/modules/iPodModule/iPodModule.py:883 msgid "Synchronize your iPod videos" msgstr "Sincroniza seus vídeos do iPod" #: ../conduit/modules/iPodModule/iPodModule.py:907 msgid "Movie" msgstr "Vídeos" #: ../conduit/modules/iPodModule/iPodModule.py:908 msgid "Music Video" msgstr "Vídeos musicais" #: ../conduit/modules/iPodModule/iPodModule.py:909 msgid "TV Show" msgstr "Exibir tv" #: ../conduit/modules/iPodModule/iPodModule.py:911 msgid "Video kind" msgstr "Tipo de vídeo" #. Translators: Translate this in derived classes. #: ../conduit/modules/N800Module/N800Module.py:55 msgid "Conduit" msgstr "Conduit" #: ../conduit/modules/N800Module/N800Module.py:105 msgid "N800 Files" msgstr "Arquivos do N800" #: ../conduit/modules/N800Module/N800Module.py:106 msgid "Synchronizes files/folders to a N800 device" msgstr "Sincronizar arquivos/pastas para um dispositivo N800" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:111 msgid "Backups" msgstr "Backups" #: ../conduit/modules/N800Module/N800Module.py:126 msgid "N800 Music" msgstr "Músicas do N800" #: ../conduit/modules/N800Module/N800Module.py:127 msgid "Synchronizes music to a N800 device" msgstr "Sincroniza músicas para um dispositivo N800" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:133 msgid "Music" msgstr "Músicas" #: ../conduit/modules/N800Module/N800Module.py:150 msgid "N800 Videos" msgstr "Vídeos do N800" #: ../conduit/modules/N800Module/N800Module.py:151 msgid "Synchronizes video to a N800 device" msgstr "Sincroniza vídeos para um dispositivo N800" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:157 msgid "Video" msgstr "Vídeos" #: ../conduit/modules/N800Module/N800Module.py:174 msgid "N800 Photos" msgstr "Fotos do N800" #: ../conduit/modules/N800Module/N800Module.py:175 msgid "Synchronizes photos to an N800 device" msgstr "Sincroniza fotos para um dispositivo N800" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:181 msgid "Photo" msgstr "Fotos" #: ../conduit/modules/NautilusBookmarksModule.py:19 msgid "Nautilus Bookmarks" msgstr "Marcadores do Nautilus" #: ../conduit/modules/NautilusBookmarksModule.py:20 msgid "Sync your Nautilus Bookmarks" msgstr "Sincronizar seus marcadores do Nautilus" #: ../conduit/modules/NautilusBookmarksModule.py:145 msgid "Sync bookmarks to local places/files" msgstr "Sincronizar marcadores para lugares/arquivos locais" #: ../conduit/modules/NautilusBookmarksModule.py:148 msgid "Sync bookmarks to remote places/files" msgstr "Sincronizar marcadores para lugares/arquivos remotos" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "Rede" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "Habilita sincronização via rede" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:44 msgid "Rhythmbox Music" msgstr "Músicas do Rhythmbox" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:45 msgid "Synchronize songs from your Rhythmbox playlists" msgstr "Sincroniza músicas das suas listas de reprodução do Rhythmbox" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 msgid "Shutterfly" msgstr "Shutterfly" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 msgid "Synchronize your Shutterfly photos" msgstr "Sincroniza suas fotos do Shutterfly" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "%Y-%m-%d %H:%M:%S" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 msgid "SmugMug" msgstr "SmugMug" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 msgid "Synchronize your SmugMug.com photos" msgstr "Sincroniza suas fotos do SmugMug.com" #: ../conduit/modules/SynceModule.py:139 msgid "Create Partnership" msgstr "Criar parceria" #: ../conduit/modules/SynceModule.py:312 msgid "Windows Mobile Contacts" msgstr "Contatos do Windows Mobile" #: ../conduit/modules/SynceModule.py:450 msgid "Windows Mobile Calendar" msgstr "Calendário do Windows Mobile" #: ../conduit/modules/SynceModule.py:459 msgid "Tasks" msgstr "Tarefas" #: ../conduit/modules/SynceModule.py:460 msgid "Windows Mobile Tasks" msgstr "Tarefas do Windows Mobile" #: ../conduit/modules/ZotoModule/ZotoModule.py:154 msgid "Zoto" msgstr "Zoto" #: ../conduit/modules/ZotoModule/ZotoModule.py:155 msgid "Synchronize your Zoto photos" msgstr "Sincroniza suas fotos do Zoto" #~ msgid "Not Configured Correctly" #~ msgstr "Configuração incorreta" #~ msgid "Saved Note Settings" #~ msgstr "Salvar configurações das notas" #~ msgid "Backpack" #~ msgstr "Backpack" #~ msgid "Enabled" #~ msgstr "Habilitado" #~ msgid "Return Playlists" #~ msgstr "Retornar listas de reprodução" #~ msgid "Banshee" #~ msgstr "Banshee" #~ msgid "Folder:" #~ msgstr "Pasta:" #~ msgid "Load" #~ msgstr "Carregar" #~ msgid "Addressbook:" #~ msgstr "Catálogo de endereços:" #~ msgid "Evolution" #~ msgstr "Evolution" #~ msgid "" #~ "Limit the Number of\n" #~ "Enclosures Downloaded to:" #~ msgstr "" #~ "Limitar o número de\n" #~ "componentes baixados para:" #~ msgid "Items to Synchronize" #~ msgstr "Itens para sincronizar" #~ msgid "Add Directory" #~ msgstr "Adicionar diretório" #~ msgid "Add File" #~ msgstr "Adicionar arquivo" #~ msgid "Advanced" #~ msgstr "Avançado" #~ msgid "File Configuration" #~ msgstr "Configurações de arquivo" #~ msgid "Folder Configuration" #~ msgstr "Configurações de pasta" #~ msgid "Folder Location:" #~ msgstr "Localização da pasta:" #~ msgid "Follow Symbolic Links" #~ msgstr "Seguir links simbólicos" #~ msgid "Ignore File Modification Times" #~ msgstr "Ignorar tempo de modificação do arquivo" #~ msgid "Include Hidden Files" #~ msgstr "Incluir arquivos ocultos" #~ msgid "Select A Folder" #~ msgstr "Selecionar uma pasta" #~ msgid "Photoset Name:" #~ msgstr "Nome do conjunto de fotos:" #~ msgid "Return Photos Tagged With" #~ msgstr "Retornar fotos etiquetadas com" #~ msgid "Create Tags: " #~ msgstr "Criar etiquetas: " #~ msgid "Synchronize your desktop preferences" #~ msgstr "Sincroniza suas preferências da área de trabalho" #~ msgid "Downloaded Document Format" #~ msgstr "Formato do documento baixado" #~ msgid "Presentations" #~ msgstr "Apresentações" #~ msgid "Spreadsheets" #~ msgstr "Planilhas" #~ msgid "Download Videos" #~ msgstr "Baixar vídeos" #~ msgid "Favorites of above user" #~ msgstr "Favoritos do usuário acima" #~ msgid "Max retrieved videos (0 is unlimited):" #~ msgstr "Máx. de vídeos recuperados (0 é ilimitado):" #~ msgid "Top rated" #~ msgstr "Mais bem avaliados" #~ msgid "Uploaded by above user" #~ msgstr "Enviado pelo usuário acima" #~ msgid "YouTube Source" #~ msgstr "Fonte do YouTube" #~ msgid "Encoding" #~ msgstr "Codificação" #~ msgid "iPod Photos" #~ msgstr "Fotos do iPod" #~ msgid "%s Format (%s)" #~ msgstr "%s Formato (%s)" #~ msgid "unchanged" #~ msgstr "inalterado" #~ msgid "Synchronize the Following Playlists" #~ msgstr "Sincronizar as seguintes listas de reprodução" #~ msgid "Rhythmbox Playlists" #~ msgstr "Listas de reprodução do Rhythmbox" #~ msgid "Slow Sync" #~ msgstr "Sincronização lenta" #~ msgid "Sync Options" #~ msgstr "Opções de sincronização" #~ msgid "Two Way Sync" #~ msgstr "Sincronização bilateral" #~ msgid "Use built in Web browser" #~ msgstr "Usar navegador de internet embutido" #~ msgid "_About" #~ msgstr "_Sobre" #~ msgid "About Conduit" #~ msgstr "Sobre o Conduit" #~ msgid "Please Enter a Folder Name" #~ msgstr "Por favor digite o nome de uma pasta" #~ msgid "" #~ "All folders require a descriptive name. To name a folder enter its name " #~ "where indicated" #~ msgstr "" #~ "Todas as pastas requerem um nome descritivo. Para nomear uma pasta digite " #~ "seu nome no local indicado" #~ msgid "By user" #~ msgstr "Por usuário" #~ msgid "User: " #~ msgstr "Usuário: " #~ msgid "_Synchronize" #~ msgstr "_Sincronizar" #~ msgid "Synchronize all dataproviders" #~ msgstr "Sincronizar todos os provedores de dados" #~ msgid "F-Spot Photos" #~ msgstr "Fotos do F-Spot" #~ msgid "Gmail Emails" #~ msgstr "E-mails do Gmail" #~ msgid "Sync your emails" #~ msgstr "Sincroniza seus e-mails" #~ msgid "Return Emails Matching" #~ msgstr "Retornar E-mails que Coincidem com" #~ msgid "When Saving Emails" #~ msgstr "Quando Salvar E-mails" #~ msgid "All emails" #~ msgstr "Todos os e-mails" #~ msgid "Emails in folder:" #~ msgstr "E-mails na pasta:" #~ msgid "Emails with label:" #~ msgstr "E-mails com rótulo:" #~ msgid "Unread emails" #~ msgstr "E-mails não lidos" #~ msgid "Sync your Evolution contacts" #~ msgstr "Sincronizar seus contatos do Evolution" #~ msgid "Evolution Events" #~ msgstr "Eventos do Evolution" #~ msgid "Sync your Evolution events" #~ msgstr "Sincronizar seus eventos do Evolution" #~ msgid "Evolution Todo" #~ msgstr "Tarefas do Evolution" #~ msgid "Picasa Desktop" #~ msgstr "Picasa Desktop" #~ msgid "Sync your Picasa photos" #~ msgstr "Sincroniza suas fotos do Picasa" #~ msgid "Return Photos In The Following Albums" #~ msgstr "Retornar Fotos nos Seguintes Álbuns" #~ msgid "Sync your devices contacts" #~ msgstr "Sincronizar seus contatos dos dispositivos" #~ msgid "Sync your devices events" #~ msgstr "Sincronizar seus eventos dos dispositivos" #~ msgid "Sync your devices tasks" #~ msgstr "Sincronizar suas tarefas dos dispositivos" #~ msgid "Dataproviders" #~ msgstr "Provedores de dados" #~ msgid "dialog1" #~ msgstr "dialog1" #~ msgid "F-Spot DBus Photos" #~ msgstr "Fotos do F-Spot pelo DBus" #~ msgid "Sync your F-Spot photos over DBus" #~ msgstr "Sincronizar suas fotos do F-Spot pelo DBus" #~ msgid "Email" #~ msgstr "E-mail" #~ msgid "Saved Email Settings" #~ msgstr "Configurações de E-mail Salvas" #~ msgid "Attach label to email" #~ msgstr "Anexar rótulo ao e-mail" #~ msgid "Gmail Sink Properties" #~ msgstr "Propriedades do Recipiente do Gmail" #~ msgid "Password: " #~ msgstr "Senha: " #~ msgid "Save with label:" #~ msgstr "Salvar com rótulo:" #~ msgid "Username: " #~ msgstr "Nome de usuário: " #~ msgid "Network your desktop" #~ msgstr "Conectar sua área de trabalho em rede" #~ msgid "%Y-%m-%dT%H:%M:%S" #~ msgstr "%Y-%m-%dT%H:%M:%S" #~ msgid "Synce Events" #~ msgstr "Eventos do Synce" #~ msgid "Synce Todo" #~ msgstr "Tarefas do Synce" #~ msgid "Settings Configuration" #~ msgstr "Configuração de Preferências" #~ msgid "Enable iPod and USB Key Support" #~ msgstr "Habilitar Suporte a iPod e USB" #~ msgid "Backpack Notes Sink Properties" #~ msgstr "Propriedades de Destino das Notas do Backpack" #~ msgid "Url: " #~ msgstr "Url: " #~ msgid "Attach Tag to Photo" #~ msgstr "Anexar Etiqueta à Foto" #~ msgid "Flickr Sink Properties" #~ msgstr "Propriedades de Destino do Flickr" #~ msgid "Photos are Restricted to Family" #~ msgstr "Fotos são Restritas à Família" #~ msgid "Photos are Restricted to Friends" #~ msgstr "Fotos são Restritas aos Amigos" #~ msgid "Gmail Source Properties" #~ msgstr "Propriedades de Fonte de Gmail" #~ msgid "Tomboy Notes" #~ msgstr "Notas do Tomboy" #~ msgid "GNOME Wiki" #~ msgstr "Wiki do GNOME" #~ msgid "Get Pages from the GNOME Wiki" #~ msgstr "Obter Páginas do Wiki do GNOME" conduit-0.3.17/po/nds.po0000644000175000017500000007714511321403566011751 00000000000000# Low German translation for conduit. # Copyright (C) 2010 conduit's COPYRIGHT HOLDER # This file is distributed under the same license as the conduit package. # Nils-Christoph Fiedler , 2010. # msgid "" msgstr "" "Project-Id-Version: conduit master\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=conduit&component=documentation and translation\n" "POT-Creation-Date: 2009-12-14 15:49+0000\n" "PO-Revision-Date: 2010-01-06 15:38+0100\n" "Last-Translator: Nils-Christoph Fiedler \n" "Language-Team: Low German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../data/conduit.desktop.in.in.h:1 msgid "Conduit Synchronizer" msgstr "Conduit Avglieker" #: ../data/conduit.desktop.in.in.h:2 msgid "Synchronization for GNOME" msgstr "Avglieken för GNOME" #: ../data/conduit.glade.h:1 msgid "Default Synchronization Options" msgstr "Standardavgliekenoptschoonen" #: ../data/conduit.glade.h:2 msgid "General" msgstr "Allgemeen" #: ../data/conduit.glade.h:3 msgid "Always Up-To-Date" msgstr "Jümmers opfrischt" #: ../data/conduit.glade.h:4 msgid "Ask Me What to Do" msgstr "Fragen, wat Conduit doon schall" #: ../data/conduit.glade.h:5 msgid "Ask me what to do" msgstr "Fragen, wat Conduit doon schall" #: ../data/conduit.glade.h:6 msgid "Cancel Synchronization" msgstr "Avglieken avbreken" #: ../data/conduit.glade.h:7 msgid "Cancel currently-synchronizing groups" msgstr "" #: ../data/conduit.glade.h:8 msgid "Clear Canvas" msgstr "" #: ../data/conduit.glade.h:9 msgid "Compare" msgstr "Verglieken" #: ../data/conduit.glade.h:10 msgid "Conduit Preferences" msgstr "Conduit Instellens" #: ../data/conduit.glade.h:11 msgid "Configuration" msgstr "Instellen" #: ../data/conduit.glade.h:12 msgid "Configure Item" msgstr "Element instellen" #: ../data/conduit.glade.h:13 msgid "Configure the synchronization settings for this item" msgstr "" #: ../data/conduit.glade.h:14 msgid "Conflict Options" msgstr "Konfliktoptschoonen" #: ../data/conduit.glade.h:15 msgid "Conflicts" msgstr "Konflikte" #: ../data/conduit.glade.h:16 msgid "Contents" msgstr "Inholls" #: ../data/conduit.glade.h:17 msgid "Data Conversions" msgstr "" #: ../data/conduit.glade.h:18 msgid "Data Providers" msgstr "Datenanbieter" #: ../data/conduit.glade.h:19 msgid "Delete Group" msgstr "Grupp löschen" #: ../data/conduit.glade.h:20 msgid "Delete Item" msgstr "Element löschen" #: ../data/conduit.glade.h:21 msgid "Delete Options" msgstr "Optschoonen löschen" #: ../data/conduit.glade.h:22 msgid "Delete from the corresponding sink" msgstr "" #: ../data/conduit.glade.h:23 msgid "Delete the Corresponding Item" msgstr "" #: ../data/conduit.glade.h:24 msgid "Editor" msgstr "Bewarker" #: ../data/conduit.glade.h:25 msgid "Minimize to notification area" msgstr "" #: ../data/conduit.glade.h:26 msgid "Refresh Group" msgstr "Grupp opfrischen" #: ../data/conduit.glade.h:27 msgid "Refresh Item" msgstr "Element opfrischen" #: ../data/conduit.glade.h:28 msgid "Replace the Older Item" msgstr "Dat olle Element överschrieven" #: ../data/conduit.glade.h:29 msgid "Replace the older item" msgstr "Dat olle Element överschrieven" #: ../data/conduit.glade.h:30 msgid "Resolve Conflicts" msgstr "Konflikte lösen" #: ../data/conduit.glade.h:31 msgid "Save settings on exit" msgstr "Instellens bi'm Sluten spiekern" #: ../data/conduit.glade.h:32 msgid "Show Hints" msgstr "Henwiesen opwiesen" #: ../data/conduit.glade.h:33 msgid "Show status icon" msgstr "Tostandbill opwiesen" #: ../data/conduit.glade.h:34 msgid "Skip" msgstr "Överhüppen" #: ../data/conduit.glade.h:35 msgid "Slow Synchronization" msgstr "Sutjes Avglieken" #: ../data/conduit.glade.h:36 msgid "Start Conduit at login" msgstr "Conduit bi'm Anmellen starten" #: ../data/conduit.glade.h:37 msgid "Synchronization Options" msgstr "Avgliekoptschoonen" #: ../data/conduit.glade.h:38 msgid "Synchronize All" msgstr "YAllens avglieken" #: ../data/conduit.glade.h:39 msgid "Synchronize Group" msgstr "Grupp avglieken" #: ../data/conduit.glade.h:40 msgid "Synchronize group" msgstr "Grupp avglieken" #: ../data/conduit.glade.h:41 msgid "Synchronizes all groups" msgstr "All Grupps avglieken" #: ../data/conduit.glade.h:42 msgid "Title" msgstr "Titel" #: ../data/conduit.glade.h:43 msgid "Two-Way Synchronization" msgstr "Twej-Weg Avglieken" #: ../data/conduit.glade.h:44 msgid "When an item has been deleted:" msgstr "Wenn een Element löscht warrt:" #: ../data/conduit.glade.h:45 msgid "When an item is deleted..." msgstr "Wenn een Element löscht is..." #: ../data/conduit.glade.h:46 msgid "When there is a conflict..." msgstr "Wenn dat een Konflikt givt..." #: ../data/conduit.glade.h:47 msgid "When there is a two-way conflict:" msgstr "" #: ../data/conduit.glade.h:48 msgid "_Edit" msgstr "_Bewarken" #: ../data/conduit.glade.h:49 msgid "_File" msgstr "_Datei" #: ../data/conduit.glade.h:50 msgid "_Help" msgstr "_Hölp" #: ../conduit/Knowledge.py:8 msgid "What Do You Want to Synchronize?" msgstr "Wat wullt je avglieken" #: ../conduit/Knowledge.py:9 msgid "Drag and Drop a Data Provider on the Canvas" msgstr "" #: ../conduit/Knowledge.py:11 msgid "Synchronization Group Created" msgstr "" #: ../conduit/Knowledge.py:12 msgid "Add Another Data Provider to the Group to Synchronize it" msgstr "" #: ../conduit/Knowledge.py:14 msgid "You Are Now Ready to Synchronize" msgstr "Nu künn wi wat avglieken" #: ../conduit/Knowledge.py:15 msgid "Right Click on Group for Options" msgstr "" #. source,sinc #comment #. twoway #: ../conduit/Knowledge.py:22 msgid "Synchronize Two Folders" msgstr "Twej Verteeknisse avglieken" #: ../conduit/Knowledge.py:24 msgid "Backup Folder to Box.net" msgstr "" #: ../conduit/Knowledge.py:26 msgid "Synchronize Tagged F-Spot Photos to Flickr" msgstr "" #: ../conduit/Main.py:59 msgid "Conduit is a synchronization application." msgstr "" #: ../conduit/Main.py:63 #, python-format msgid "Launch without GUI. [default: %default]" msgstr "" #: ../conduit/Main.py:67 #, python-format msgid "Save dataprovider configuration to FILE. [default: %default]" msgstr "" #: ../conduit/Main.py:71 #, python-format msgid "Iconify on startup. [default: %default]" msgstr "" #: ../conduit/Main.py:75 #, python-format msgid "Run with the specified UI. [default: %default]" msgstr "" #: ../conduit/Main.py:79 msgid "Only load modules in the named files. [default: load all modules]" msgstr "" #: ../conduit/Main.py:83 msgid "Do not load modules in the named files. [default: load all modules]" msgstr "" #: ../conduit/Main.py:87 msgid "Explicitly set internal Conduit settings (keys) to the given values for this session. [default: do not set]" msgstr "" #: ../conduit/Main.py:91 #, python-format msgid "Enable loading of unfinished or unsupported dataproviders. [default: %default]" msgstr "" #: ../conduit/Main.py:95 #, python-format msgid "Generate more debugging information. [default: %default]" msgstr "" #: ../conduit/Main.py:99 #, python-format msgid "Generate less debugging information. [default: %default]" msgstr "" #: ../conduit/Main.py:103 #, python-format msgid "Generate no debugging information. [default: %default]" msgstr "" #: ../conduit/dataproviders/DataProvider.py:22 msgid "Ready" msgstr "Fertig" #: ../conduit/dataproviders/DataProvider.py:23 msgid "New data to sync" msgstr "Neje Daten avtoglieken" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Refreshing..." msgstr "Frisch op..." #: ../conduit/dataproviders/DataProvider.py:25 msgid "Refreshed OK" msgstr "Frischt op OK" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Refreshing" msgstr "Opfrischfehler" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronizing..." msgstr "Glieke av..." #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronized OK" msgstr "Avgliekt OK" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Error Synchronizing" msgstr "Avgliekfehler" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Synchronization Skipped" msgstr "Avglieken överhüppt" #: ../conduit/dataproviders/DataProvider.py:31 msgid "Synchronization Cancelled" msgstr "Avglieken avbreken" #: ../conduit/dataproviders/DataProvider.py:32 msgid "Synchronization Conflict" msgstr "Avgliekenkonflikt" #: ../conduit/dataproviders/DataProvider.py:33 msgid "Not Configured" msgstr "Nich instellt" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "640x480" msgstr "640x480" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "800x600" msgstr "800x600" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "1024x768" msgstr "1024x768" #. Signifies that a conversion should not take place #: ../conduit/dataproviders/Image.py:35 #: ../conduit/modules/N800Module/N800Module.py:57 msgid "None" msgstr "Keen" #. Default Categories for the DataProviders #: ../conduit/dataproviders/__init__.py:6 msgid "Files and Folders" msgstr "Dateien un Verteeknisse" #: ../conduit/dataproviders/__init__.py:7 #: ../conduit/modules/iPodModule/iPodModule.py:179 msgid "Notes" msgstr "Notizen" #: ../conduit/dataproviders/__init__.py:8 #: ../conduit/modules/iPodModule/iPodModule.py:367 msgid "Photos" msgstr "Billers" #: ../conduit/dataproviders/__init__.py:9 msgid "Office" msgstr "Kontor" #: ../conduit/dataproviders/__init__.py:10 msgid "Settings" msgstr "Instellens" #: ../conduit/dataproviders/__init__.py:11 msgid "Miscellaneous" msgstr "Allens anners" #: ../conduit/dataproviders/__init__.py:12 msgid "Media" msgstr "Medien" #: ../conduit/dataproviders/__init__.py:13 msgid "Bookmarks" msgstr "Leseteken" #: ../conduit/dataproviders/__init__.py:14 msgid "Test" msgstr "Test" #: ../conduit/gtkui/Canvas.py:152 msgid "Drag a Data Provider here to continue" msgstr "" #: ../conduit/gtkui/Canvas.py:217 msgid "Show me" msgstr "Wies mi op" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:91 msgid "Source" msgstr "Welle" #: ../conduit/gtkui/ConflictResolver.py:105 msgid "Resolution" msgstr "Oplösen" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:110 msgid "Sink" msgstr "Sinken" #: ../conduit/gtkui/ConflictResolver.py:150 #: ../conduit/gtkui/ConflictResolver.py:151 #, python-format msgid "Conflicts (%s)" msgstr "Konflikte (%s)" #. name, #url #: ../conduit/gtkui/UI.py:33 msgid "Introduction" msgstr "Inföhren" #: ../conduit/gtkui/UI.py:34 msgid "Writing a Data Provider" msgstr "" #: ../conduit/gtkui/UI.py:35 msgid "API Documentation" msgstr "API Dokumentatschoon" #: ../conduit/gtkui/UI.py:36 msgid "Test Results" msgstr "Testrutkamen" #: ../conduit/gtkui/UI.py:129 #, python-format msgid " - %s (Development Version)" msgstr "" #: ../conduit/gtkui/UI.py:131 msgid " - Running Uninstalled" msgstr "" #: ../conduit/gtkui/UI.py:165 msgid "Examples" msgstr "Bispeelen" #: ../conduit/gtkui/UI.py:177 msgid "Developers" msgstr "Entwickler" #. Build some liststores to display #: ../conduit/gtkui/UI.py:318 msgid "Convert from" msgstr "" #: ../conduit/gtkui/UI.py:319 msgid "into" msgstr "in" #: ../conduit/gtkui/UI.py:370 msgid "Relationship Database" msgstr "" #: ../conduit/gtkui/UI.py:374 msgid "Conversions Available" msgstr "" #: ../conduit/gtkui/UI.py:380 #: ../conduit/gtkui/Tree.py:348 #: ../conduit/modules/FileModule/FileConfiguration.py:117 msgid "Name" msgstr "Naam" #: ../conduit/gtkui/UI.py:384 msgid "Loaded" msgstr "Geladen" #: ../conduit/gtkui/UI.py:512 #: ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "" #: ../conduit/gtkui/UI.py:684 msgid "_Synchronize All" msgstr "_Allens avglieken" #: ../conduit/gtkui/UI.py:684 msgid "Synchronizes All Groups" msgstr "" #: ../conduit/gtkui/UI.py:685 msgid "_Cancel Synchronization" msgstr "" #: ../conduit/gtkui/UI.py:685 msgid "Cancels Currently Synchronizing Groups" msgstr "" #: ../conduit/gtkui/UI.py:686 msgid "_Quit" msgstr "_Sluten" #: ../conduit/gtkui/UI.py:686 msgid "Close Conduit" msgstr "Conduit sluten" #: ../conduit/gtkui/UI.py:726 msgid "Synchronization Error" msgstr "" #: ../conduit/gtkui/UI.py:729 msgid "Synchronization Complete" msgstr "" #: ../conduit/gtkui/UI.py:745 msgid "Synchronizing" msgstr "" #: ../conduit/gtkui/Tree.py:357 msgid "Description" msgstr "Beschrieven" #: ../conduit/gtkui/ConfigItems.py:734 #, python-format msgid "Total: %d" msgstr "Tosammen: %d" #: ../conduit/gtkui/WindowConfigurator.py:14 msgid "Configure" msgstr "Instellen" #: ../conduit/modules/BackpackModule/BackpackModule.py:58 msgid "Backpack Notes" msgstr "" #: ../conduit/modules/BackpackModule/BackpackModule.py:59 msgid "Store things in Backpack Notes" msgstr "" #: ../conduit/modules/BackpackModule/BackpackModule.py:105 #: ../conduit/modules/FlickrModule/FlickrModule.py:307 #: ../conduit/modules/ZotoModule/ZotoModule.py:243 msgid "Account details" msgstr "Togangdetails" #: ../conduit/modules/BackpackModule/BackpackModule.py:106 msgid "Login" msgstr "Anmellen" #: ../conduit/modules/BackpackModule/BackpackModule.py:109 msgid "API key" msgstr "API Slötel" #: ../conduit/modules/BackpackModule/BackpackModule.py:112 msgid "Saved notes" msgstr "Spiekerte Notizen" #: ../conduit/modules/BackpackModule/BackpackModule.py:113 msgid "Save notes in page" msgstr "" #: ../conduit/modules/BansheeModule/BansheeModule.py:52 msgid "Banshee Playlists" msgstr "Banshee Speellists" #: ../conduit/modules/BansheeModule/BansheeModule.py:53 msgid "Synchronize your Banshee playlists" msgstr "Dien Banshee Speellists avglieken" #: ../conduit/modules/BansheeModule/BansheeModule.py:187 #: ../conduit/modules/BansheeModule/BansheeModule.py:188 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:116 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:117 msgid "Playlists" msgstr "Speellists" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 msgid "Box.net" msgstr "Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 msgid "Synchronize your Box.net files" msgstr "Dien Box.net Dateien avglieken" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:290 #: ../conduit/modules/FileModule/FileModule.py:82 msgid "Folder" msgstr "Verteeknis" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:291 msgid "Folder name" msgstr "Verteeknisnaam" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:295 msgid "Load folders" msgstr "Verteeknisse laden" #: ../conduit/modules/ConverterModule.py:91 msgid "Note-" msgstr "Notiz-" #: ../conduit/modules/DesktopWallpaperModule.py:38 msgid "Wallpaper" msgstr "Billschirmachtergrund" #: ../conduit/modules/DesktopWallpaperModule.py:39 msgid "Changes your Desktop Wallpaper" msgstr "Dien Schrievdiskachtergrund ännern" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:107 #, python-format msgid "Select %s" msgstr "%s wählen" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:127 msgid "Evolution Contacts" msgstr "Evolution Kontakte" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:128 msgid "Synchronize your contacts" msgstr "Dien Kontakte avglieken" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:178 msgid "Evolution Calendar" msgstr "Evolution Kalenner" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:179 msgid "Synchronize your calendar" msgstr "Dien Kalenner avglieken" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:240 msgid "Evolution Tasks" msgstr "Evolution Opgaven" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:241 msgid "Synchronize your tasks" msgstr "Dien Opgaven avglieken" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:297 msgid "Evolution Memos" msgstr "Evolution Memos" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:298 msgid "Synchronize your memos" msgstr "Dien Memos avglieken" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 msgid "Facebook" msgstr "Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:39 msgid "Synchronize your Facebook photos" msgstr "Dien Facebookbillers avglieken" #: ../conduit/modules/FacebookModule/FacebookModule.py:124 #: ../conduit/modules/FlickrModule/FlickrModule.py:282 msgid "Loading album list..." msgstr "Lade Albumlist..." #: ../conduit/modules/FacebookModule/FacebookModule.py:128 msgid "Failed to connect" msgstr "Künn nich verbinnen" #: ../conduit/modules/FacebookModule/FacebookModule.py:131 msgid "Logged in" msgstr "Anmellt" #: ../conduit/modules/FacebookModule/FacebookModule.py:133 msgid "Failed to login" msgstr "Künn nich anmellen" #: ../conduit/modules/FacebookModule/FacebookModule.py:145 #: ../conduit/modules/FspotModule/FspotModule.py:243 msgid "Status" msgstr "Tostand" #: ../conduit/modules/FacebookModule/FacebookModule.py:150 #: ../conduit/modules/iPodModule/iPodModule.py:461 #: ../conduit/modules/ZotoModule/ZotoModule.py:252 msgid "Album" msgstr "Album" #: ../conduit/modules/FacebookModule/FacebookModule.py:151 msgid "Album name" msgstr "Albumnaam" #: ../conduit/modules/FacebookModule/FacebookModule.py:156 msgid "Load albums" msgstr "Albums laden" #: ../conduit/modules/FeedModule/FeedModule.py:58 msgid "RSS Feed" msgstr "RSS Nahrichten" #: ../conduit/modules/FeedModule/FeedModule.py:59 msgid "Synchronize data from RSS enclosures" msgstr "" #. FIXME: Add Randomize #: ../conduit/modules/FeedModule/FeedModule.py:114 msgid "Feed details" msgstr "Nahrichtendetails" #: ../conduit/modules/FeedModule/FeedModule.py:115 msgid "Feed address" msgstr "Nahrichtenanskrivt" #: ../conduit/modules/FeedModule/FeedModule.py:118 msgid "Enclosure settings" msgstr "Enclosure Instellens" #: ../conduit/modules/FeedModule/FeedModule.py:119 msgid "Limit downloaded enclosures" msgstr "" #: ../conduit/modules/FeedModule/FeedModule.py:125 msgid "Limit to" msgstr "Begrenzen to" #: ../conduit/modules/FeedModule/FeedModule.py:129 msgid "Randomize enclosures" msgstr "" #: ../conduit/modules/FeedModule/FeedModule.py:133 msgid "Download types" msgstr "Daalladtypen" #: ../conduit/modules/FeedModule/FeedModule.py:134 msgid "Download audio files" msgstr "Tondateien daalladen" #: ../conduit/modules/FeedModule/FeedModule.py:135 msgid "Download video files" msgstr "Filmdateien daalladen" #: ../conduit/modules/FeedModule/FeedModule.py:136 msgid "Download photo files" msgstr "Billerdateien daalladen" #: ../conduit/modules/FileModule/FileConfiguration.py:111 msgid "Icon" msgstr "Lüttes Bill" #: ../conduit/modules/FileModule/FileConfiguration.py:123 #: ../conduit/modules/GConfModule/GConfModule.py:138 msgid "Items" msgstr "Elemente" #: ../conduit/modules/FileModule/FileConfiguration.py:149 #, python-format msgid "Contains %s files" msgstr "Hett %s Dateien in" #: ../conduit/modules/FileModule/FileConfiguration.py:248 msgid "Include file..." msgstr "Datei insluten..." #: ../conduit/modules/FileModule/FileConfiguration.py:258 msgid "All files" msgstr "All Dateien" #: ../conduit/modules/FileModule/FileConfiguration.py:271 msgid "Include folder..." msgstr "Verteeknis insluten..." #: ../conduit/modules/FileModule/FileConfiguration.py:314 msgid "Please Name All Folders" msgstr "Bidde all Verteeknisse een Naam geven" #: ../conduit/modules/FileModule/FileConfiguration.py:315 msgid "All folders require a descriptive name. To name a folder simply click on it" msgstr "" #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "Dateien" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "" #: ../conduit/modules/FileModule/FileModule.py:83 msgid "Synchronize folders" msgstr "Verteeknisse avglieken" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:40 msgid "Firefox 3 Bookmarks" msgstr "Firefox 3 Leseteken" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:41 msgid "Syncronize your Firefox 3 Bookmarks" msgstr "Dien Firefox 3 Leseteken avglieken" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:100 msgid "Firefox Profile" msgstr "Firefoxtogangs" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 msgid "Flickr" msgstr "Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 msgid "Synchronize your Flickr.com photos" msgstr "Dien Flickr.com Billers avglieken" #: ../conduit/modules/FlickrModule/FlickrModule.py:287 msgid "Failed to connect." msgstr "Künn nich verbinnen." #: ../conduit/modules/FlickrModule/FlickrModule.py:290 msgid "Album names loaded." msgstr "Albumnaamen geladen." #: ../conduit/modules/FlickrModule/FlickrModule.py:292 msgid "Failed to login." msgstr "Künn nich anmellen." #: ../conduit/modules/FlickrModule/FlickrModule.py:303 msgid "Logging in, please wait..." msgstr "Mell an, bidde töven..." #: ../conduit/modules/FlickrModule/FlickrModule.py:308 #: ../conduit/modules/GoogleBookmarksModule.py:67 #: ../conduit/modules/ZotoModule/ZotoModule.py:244 msgid "Username" msgstr "Brukernaam" #: ../conduit/modules/FlickrModule/FlickrModule.py:319 msgid "Authenticate" msgstr "Utwiesen" #: ../conduit/modules/FlickrModule/FlickrModule.py:323 #: ../conduit/modules/ZotoModule/ZotoModule.py:251 msgid "Saved photo settings" msgstr "Spiekerte Billerinstellens" #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "Resize photos" msgstr "Billergröte ännern" #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "Do not resize" msgstr "Nich de Gröte ännern" #: ../conduit/modules/FlickrModule/FlickrModule.py:332 msgid "Photos are public" msgstr "" #: ../conduit/modules/FspotModule/FspotModule.py:25 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 msgid "Synchronize your F-Spot photos" msgstr "Dien F-Spot Billers avglieken" #: ../conduit/modules/FspotModule/FspotModule.py:152 msgid "F-Spot DBus interface is operating in read-only mode" msgstr "" #: ../conduit/modules/FspotModule/FspotModule.py:218 msgid "F-Spot is running" msgstr "F-Spot lööpt" #: ../conduit/modules/FspotModule/FspotModule.py:219 msgid "Please start F-Spot or activate the D-Bus Extension" msgstr "" #: ../conduit/modules/FspotModule/FspotModule.py:244 msgid "Start F-Spot" msgstr "F-Spot starten" #: ../conduit/modules/FspotModule/FspotModule.py:248 #: ../conduit/modules/FspotModule/FspotModule.py:249 msgid "Tags" msgstr "Slötelwöör" #: ../conduit/modules/FspotModule/FspotModule.py:262 msgid "Add tags" msgstr "Slötelwöör hentofögen" #: ../conduit/modules/FspotModule/FspotModule.py:263 msgid "Tag name" msgstr "Slötelwoordnaam" #: ../conduit/modules/FspotModule/FspotModule.py:266 msgid "Add tag" msgstr "Slötelwoord hentofögen" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "Application Settings" msgstr "Programminstellens" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Synchronize your application settings" msgstr "" #: ../conduit/modules/GConfModule/GConfModule.py:31 msgid "Metacity" msgstr "Metacity" #: ../conduit/modules/GConfModule/GConfModule.py:32 msgid "Nautilus" msgstr "Nautilus" #: ../conduit/modules/GConfModule/GConfModule.py:33 msgid "Preferred Applications" msgstr "Bevortogte Programme" #: ../conduit/modules/GConfModule/GConfModule.py:34 msgid "Desktop Interface" msgstr "Schrievdiskboverfläch" #: ../conduit/modules/GConfModule/GConfModule.py:35 msgid "Gnome Terminal" msgstr "GNOME Terminal" #: ../conduit/modules/GConfModule/GConfModule.py:137 msgid "Applications to Synchronize" msgstr "Programme, de avgliekt werrn schalln" #: ../conduit/modules/GoogleBookmarksModule.py:19 msgid "Google Bookmarks" msgstr "Google Leseteken" #: ../conduit/modules/GoogleBookmarksModule.py:20 msgid "Sync your Google Bookmarks" msgstr "Dien Google Leseteken avglieken" #: ../conduit/modules/GoogleBookmarksModule.py:66 msgid "Login Details" msgstr "Anmellendetails" #: ../conduit/modules/GoogleBookmarksModule.py:70 #: ../conduit/modules/ZotoModule/ZotoModule.py:247 msgid "Password" msgstr "Passwoord" #: ../conduit/modules/GoogleModule/GoogleModule.py:399 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:4 msgid "Google Calendar" msgstr "Google kalenner" #: ../conduit/modules/GoogleModule/GoogleModule.py:400 msgid "Synchronize your Google Calendar" msgstr "Dien Google Kalenner avglieken" #: ../conduit/modules/GoogleModule/GoogleModule.py:582 msgid "Picasa" msgstr "Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:583 msgid "Synchronize your Google Picasa photos" msgstr "Dien Google Picasabillers avglieken" #: ../conduit/modules/GoogleModule/GoogleModule.py:745 msgid "Google Contacts" msgstr "Google Kontakte" #: ../conduit/modules/GoogleModule/GoogleModule.py:746 msgid "Synchronize your Google Mail contacts" msgstr "Dien Google E-Postkontakte avglieken" #: ../conduit/modules/GoogleModule/GoogleModule.py:1076 msgid "Google Documents" msgstr "Google Dokumente" #: ../conduit/modules/GoogleModule/GoogleModule.py:1077 msgid "Synchronize your Google Documents" msgstr "Dien Google Dokumente avglieken" #: ../conduit/modules/GoogleModule/GoogleModule.py:1322 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:69 msgid "Unknown" msgstr "Unbekannt" #: ../conduit/modules/GoogleModule/GoogleModule.py:1323 msgid "miscellaneous" msgstr "allens anners" #: ../conduit/modules/GoogleModule/GoogleModule.py:1324 msgid "No description." msgstr "Keen Beschrieven." #: ../conduit/modules/GoogleModule/GoogleModule.py:1333 msgid "YouTube" msgstr "YouTube" #: ../conduit/modules/GoogleModule/GoogleModule.py:1334 msgid "Synchronize data from YouTube" msgstr "Daten vun YouTube avglieken" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:1 msgid "Account Details" msgstr "Togangdetails" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:2 msgid "Calendar:" msgstr "Kalenner:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:3 msgid "Email:" msgstr "E-Post:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:5 msgid "Load Calendars" msgstr "Kalenners laden" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:6 msgid "Password:" msgstr "Passwoord:" #: ../conduit/modules/iPodModule/iPodModule.py:180 msgid "Synchronize your iPod notes" msgstr "Dien iPod Notizen avglieken" #: ../conduit/modules/iPodModule/iPodModule.py:295 #: ../conduit/modules/SynceModule.py:311 msgid "Contacts" msgstr "Kontakte" #: ../conduit/modules/iPodModule/iPodModule.py:296 msgid "Synchronize your iPod contacts" msgstr "Dien iPod Kontakte avglieken" #: ../conduit/modules/iPodModule/iPodModule.py:331 #: ../conduit/modules/SynceModule.py:449 msgid "Calendar" msgstr "Kalenner" #: ../conduit/modules/iPodModule/iPodModule.py:332 msgid "Synchronize your iPod calendar" msgstr "Dien iPod Kalenner avglieken" #: ../conduit/modules/iPodModule/iPodModule.py:368 msgid "Synchronize your iPod photos" msgstr "Dien iPod Billers avglieken" #: ../conduit/modules/iPodModule/iPodModule.py:465 msgid "Delete" msgstr "Löschen" #: ../conduit/modules/iPodModule/iPodModule.py:695 #: ../conduit/modules/iPodModule/iPodModule.py:812 #: ../conduit/modules/N800Module/N800Module.py:77 msgid "Encoding" msgstr "" #: ../conduit/modules/iPodModule/iPodModule.py:811 msgid "Conversion options" msgstr "" #: ../conduit/modules/iPodModule/iPodModule.py:816 msgid "Keep converted files" msgstr "" #: ../conduit/modules/iPodModule/iPodModule.py:846 msgid "iPod Music" msgstr "iPod Musik" #: ../conduit/modules/iPodModule/iPodModule.py:847 msgid "Synchronize your iPod music" msgstr "Dien iPod Musik avglieken" #: ../conduit/modules/iPodModule/iPodModule.py:882 msgid "iPod Video" msgstr "iPod Film" #: ../conduit/modules/iPodModule/iPodModule.py:883 msgid "Synchronize your iPod videos" msgstr "Dien iPod Filme avglieken" #: ../conduit/modules/iPodModule/iPodModule.py:907 msgid "Movie" msgstr "Film" #: ../conduit/modules/iPodModule/iPodModule.py:908 msgid "Music Video" msgstr "Musikfilm" #: ../conduit/modules/iPodModule/iPodModule.py:909 msgid "TV Show" msgstr "TV Sennen" #: ../conduit/modules/iPodModule/iPodModule.py:911 msgid "Video kind" msgstr "Filmkinn" #. Translators: Translate this in derived classes. #: ../conduit/modules/N800Module/N800Module.py:55 msgid "Conduit" msgstr "Conduit" #: ../conduit/modules/N800Module/N800Module.py:105 msgid "N800 Files" msgstr "N800 Dateien" #: ../conduit/modules/N800Module/N800Module.py:106 msgid "Synchronizes files/folders to a N800 device" msgstr "Dateien / Verteeknisse op e'em N800 Lööpwark avglieken" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:111 msgid "Backups" msgstr "Avsekern" #: ../conduit/modules/N800Module/N800Module.py:126 msgid "N800 Music" msgstr "N800 Musik" #: ../conduit/modules/N800Module/N800Module.py:127 msgid "Synchronizes music to a N800 device" msgstr "Musik op e'em N800 Lööpwark avglieken" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:133 msgid "Music" msgstr "Musik" #: ../conduit/modules/N800Module/N800Module.py:150 msgid "N800 Videos" msgstr "N800 Filme" #: ../conduit/modules/N800Module/N800Module.py:151 msgid "Synchronizes video to a N800 device" msgstr "Film mit e'em N800 Lööpwark avglieken" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:157 msgid "Video" msgstr "Film" #: ../conduit/modules/N800Module/N800Module.py:174 msgid "N800 Photos" msgstr "N800 Billers" #: ../conduit/modules/N800Module/N800Module.py:175 msgid "Synchronizes photos to an N800 device" msgstr "Billers mit e'em N800 Lööpwark avglieken" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:181 msgid "Photo" msgstr "Bill" #: ../conduit/modules/NautilusBookmarksModule.py:19 msgid "Nautilus Bookmarks" msgstr "Nautilus Leseteken" #: ../conduit/modules/NautilusBookmarksModule.py:20 msgid "Sync your Nautilus Bookmarks" msgstr "Dien Nautilus Leseteken avglieken" #: ../conduit/modules/NautilusBookmarksModule.py:145 msgid "Sync bookmarks to local places/files" msgstr "Leseteken mit lokalen Orten / Dateien avglieken" #: ../conduit/modules/NautilusBookmarksModule.py:148 msgid "Sync bookmarks to remote places/files" msgstr "" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "Netwark" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:44 msgid "Rhythmbox Music" msgstr "Rhythmbox Musik" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:45 msgid "Synchronize songs from your Rhythmbox playlists" msgstr "Leeders ut dien Rhythmbox Speellists avglieken" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 msgid "Shutterfly" msgstr "Shutterfly" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 msgid "Synchronize your Shutterfly photos" msgstr "Dien Shutterfly Billers avglieken" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "%Y-%m-%d %H:%M:%S" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 msgid "SmugMug" msgstr "SmugMug" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 msgid "Synchronize your SmugMug.com photos" msgstr "Dien SmugMug.com Billers avglieken" #: ../conduit/modules/SynceModule.py:139 msgid "Create Partnership" msgstr "Partnerschapt erstellen" #: ../conduit/modules/SynceModule.py:312 msgid "Windows Mobile Contacts" msgstr "Windows siene mobilen Kontakte" #: ../conduit/modules/SynceModule.py:450 msgid "Windows Mobile Calendar" msgstr "Windows sien mobiler Kalenner" #: ../conduit/modules/SynceModule.py:459 msgid "Tasks" msgstr "Opgaven" #: ../conduit/modules/SynceModule.py:460 msgid "Windows Mobile Tasks" msgstr "Windows siene mobilen Opgaven" #: ../conduit/modules/ZotoModule/ZotoModule.py:154 msgid "Zoto" msgstr "Zoto" #: ../conduit/modules/ZotoModule/ZotoModule.py:155 msgid "Synchronize your Zoto photos" msgstr "Dien Zotobillers avglieken" conduit-0.3.17/po/eu.po0000644000175000017500000010475611321403566011575 00000000000000# translation of eu.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 , 2009. msgid "" msgstr "" "Project-Id-Version: eu\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-08-28 17:25+0200\n" "PO-Revision-Date: 2009-08-28 19:51+0200\n" "Last-Translator: Iñaki Larrañaga Murgoitio \n" "Language-Team: Basque \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" #: ../data/conduit.desktop.in.in.h:1 msgid "Conduit Synchronizer" msgstr "Conduit sinkronizatzailea" #: ../data/conduit.desktop.in.in.h:2 msgid "Synchronization for GNOME" msgstr "Sinkronizazioa GNOMErako" #: ../data/conduit.glade.h:1 msgid "Default Synchronization Options" msgstr "Sinkronizazio lehenetsiaren aukerak" #: ../data/conduit.glade.h:2 msgid "General" msgstr "Orokorra" #: ../data/conduit.glade.h:3 msgid "Always Up-To-Date" msgstr "Beti eguneratuta" #: ../data/conduit.glade.h:4 msgid "Ask Me What to Do" msgstr "Galdetu niri zer egin" #: ../data/conduit.glade.h:5 msgid "Ask me what to do" msgstr "Galdetu niri zer egin" #: ../data/conduit.glade.h:6 msgid "Cancel Synchronization" msgstr "Utzi sinkronizazioa" #: ../data/conduit.glade.h:7 msgid "Cancel currently-synchronizing groups" msgstr "Utzi unean sinkronizatzen ari diren taldeak" #: ../data/conduit.glade.h:8 msgid "Clear Canvas" msgstr "Garbitu oihala" #: ../data/conduit.glade.h:9 msgid "Compare" msgstr "Konparatu" #: ../data/conduit.glade.h:10 msgid "Conduit Preferences" msgstr "Conduit-en hobespenak" #: ../data/conduit.glade.h:11 msgid "Configuration" msgstr "Konfigurazioa" #: ../data/conduit.glade.h:12 msgid "Configure Item" msgstr "Konfiguratu elementua" #: ../data/conduit.glade.h:13 msgid "Configure the synchronization settings for this item" msgstr "Konfiguratu sinkronizazioaren ezarpenak elementu honentzako" #: ../data/conduit.glade.h:14 msgid "Conflict Options" msgstr "Gatazken aukerak" #: ../data/conduit.glade.h:15 msgid "Conflicts" msgstr "Gatazkak" #: ../data/conduit.glade.h:16 msgid "Contents" msgstr "Edukia" #: ../data/conduit.glade.h:17 msgid "Data Conversions" msgstr "Datuen bihurketa" #: ../data/conduit.glade.h:18 msgid "Data Providers" msgstr "Datuen hornitzaileak" #: ../data/conduit.glade.h:19 msgid "Delete Group" msgstr "Ezabatu taldea" #: ../data/conduit.glade.h:20 msgid "Delete Item" msgstr "Ezabatu elementua" #: ../data/conduit.glade.h:21 msgid "Delete Options" msgstr "Ezabatu aukerak" #: ../data/conduit.glade.h:22 msgid "Delete from the corresponding sink" msgstr "Ezabatu dagokion sinkronizaziotik" #: ../data/conduit.glade.h:23 msgid "Delete the Corresponding Item" msgstr "Ezabatu dagokion elementua" #: ../data/conduit.glade.h:24 msgid "Editor" msgstr "Editorea" #: ../data/conduit.glade.h:25 msgid "Minimize to notification area" msgstr "Ikonotu jakinarazpen-areara" #: ../data/conduit.glade.h:26 msgid "Refresh Group" msgstr "Freskatu taldea" #: ../data/conduit.glade.h:27 msgid "Refresh Item" msgstr "Freskatu elementua" #: ../data/conduit.glade.h:28 msgid "Replace the Older Item" msgstr "Ordeztu elementu zaharragoa" #: ../data/conduit.glade.h:29 msgid "Replace the older item" msgstr "Ordeztu elementu zaharragoa" #: ../data/conduit.glade.h:30 msgid "Resolve Conflicts" msgstr "Ebatzi gatazkak" #: ../data/conduit.glade.h:31 msgid "Save settings on exit" msgstr "Gorde ezarpenak irtetzean" #: ../data/conduit.glade.h:32 msgid "Show Hints" msgstr "Erakutsi iradokizunak" #: ../data/conduit.glade.h:33 msgid "Show status icon" msgstr "Erakutsi egoeraren ikonoa" #: ../data/conduit.glade.h:34 msgid "Skip" msgstr "Saltatu" #: ../data/conduit.glade.h:35 msgid "Slow Synchronization" msgstr "Moteldu sinkronizazioa" #: ../data/conduit.glade.h:36 msgid "Start Conduit at login" msgstr "Abiarazi Conduit saioa hastean" #: ../data/conduit.glade.h:37 msgid "Synchronization Options" msgstr "Sinkronizazioaren aukerak" #: ../data/conduit.glade.h:38 msgid "Synchronize All" msgstr "Sinkronizatu guztiak" #: ../data/conduit.glade.h:39 msgid "Synchronize Group" msgstr "Sinkronizatu taldea" #: ../data/conduit.glade.h:40 msgid "Synchronize group" msgstr "Sinkronizatu taldea" #: ../data/conduit.glade.h:41 msgid "Synchronizes all groups" msgstr "Sinkronizatu talde guztiak" #: ../data/conduit.glade.h:42 msgid "Title" msgstr "Titulua" #: ../data/conduit.glade.h:43 msgid "Two-Way Synchronization" msgstr "Bi norabideko sinkronizazioa" #: ../data/conduit.glade.h:44 msgid "When an item has been deleted:" msgstr "Elementu bat ezabatzean:" #: ../data/conduit.glade.h:45 msgid "When an item is deleted..." msgstr "Elementu bat ezabatzean..." #: ../data/conduit.glade.h:46 msgid "When there is a conflict..." msgstr "Gatazka bat dagoenean..." #: ../data/conduit.glade.h:47 msgid "When there is a two-way conflict:" msgstr "Bi norabideko gatazka dagoenean:" #: ../data/conduit.glade.h:48 msgid "_Edit" msgstr "_Editatu" #: ../data/conduit.glade.h:49 msgid "_File" msgstr "_Fitxategia" #: ../data/conduit.glade.h:50 msgid "_Help" msgstr "_Laguntza" #: ../conduit/Knowledge.py:8 msgid "What Do You Want to Synchronize?" msgstr "Zer sinkronizatzea nahi duzu?" #: ../conduit/Knowledge.py:9 msgid "Drag and Drop a Data Provider on the Canvas" msgstr "Arrastatu eta jaregin datuen hornitzaile bat oihalera" #: ../conduit/Knowledge.py:11 msgid "Synchronization Group Created" msgstr "Sinkronizazioko taldea sortuta" #: ../conduit/Knowledge.py:12 msgid "Add Another Data Provider to the Group to Synchronize it" msgstr "Gehitu beste datuen hornitzailea taldeari sinkronizatzeko" #: ../conduit/Knowledge.py:14 msgid "You Are Now Ready to Synchronize" msgstr "Orain prest zaude sinkronizatzeko" #: ../conduit/Knowledge.py:15 msgid "Right Click on Group for Options" msgstr "Egin klik saguaren eskuineko botoiarekin taldean aukerentzako" #. source,sinc #comment #. twoway #: ../conduit/Knowledge.py:22 msgid "Synchronize Two Folders" msgstr "Sinkronizatu bi karpetak" #: ../conduit/Knowledge.py:24 msgid "Backup Folder to Box.net" msgstr "Egin karpetaren babeskopia Box.net gunean" #: ../conduit/Knowledge.py:26 msgid "Synchronize Tagged F-Spot Photos to Flickr" msgstr "Sinkronizatu etiketatutako F-Spot argazkiak Flickr-kin" #: ../conduit/Main.py:59 msgid "Conduit is a synchronization application." msgstr "Conduit sinkronizatzeko aplikazio bat da." #: ../conduit/Main.py:63 #, python-format msgid "Launch without GUI. [default: %default]" msgstr "Abiarazi GUIrik gabe. [lehenetsia: %default]" #: ../conduit/Main.py:67 #, python-format msgid "Save dataprovider configuration to FILE. [default: %default]" msgstr "Gorde datu hornitzailearen konfigurazioa fitxategian. [lehenetsia: %default]" #: ../conduit/Main.py:71 #, python-format msgid "Iconify on startup. [default: %default]" msgstr "Ikonotu abioan. [lehenetsia: %default]" #: ../conduit/Main.py:75 #, python-format msgid "Run with the specified UI. [default: %default]" msgstr "Exekutatu zehaztutako UIarekin. [lehenetsia: %default]" #: ../conduit/Main.py:79 msgid "Only load modules in the named files. [default: load all modules]" msgstr "Kargatu moduloak soilik izendatutako fitxategietan. [lehenetsia: kargatu modulo guztiak]" #: ../conduit/Main.py:83 msgid "Do not load modules in the named files. [default: load all modules]" msgstr "Ez kargatu moduloak izendatutako fitxategietan. [lehenetsia: kargatu modulo guztiak]" #: ../conduit/Main.py:87 msgid "" "Explicitly set internal Conduit settings (keys) to the given values for this " "session. [default: do not set]" msgstr "" "Conduit-en barneko ezarpenak (gakoak) saio honetan emandako baliotara ezarri " "esplizitoki. [lehenetsia: ez ezarri]" #: ../conduit/Main.py:91 #, python-format msgid "" "Enable loading of unfinished or unsupported dataproviders. [default: %" "default]" msgstr "Gaitu osatu edo onartu gabeko datuen hornitzaileak kargatzea. [lehenetsia: %default]" #: ../conduit/Main.py:95 #, python-format msgid "Generate more debugging information. [default: %default]" msgstr "Sortu arazketako informazio gehiago. [lehenetsia: %default]" #: ../conduit/Main.py:99 #, python-format msgid "Generate less debugging information. [default: %default]" msgstr "Sortu arazketako informazio gutxiago. [lehenetsia: %default]" #: ../conduit/Main.py:103 #, python-format msgid "Generate no debugging information. [default: %default]" msgstr "Ez sortu arazketako informaziorik. [lehenetsia: %default]" #: ../conduit/dataproviders/DataProvider.py:22 msgid "Ready" msgstr "Prest" #: ../conduit/dataproviders/DataProvider.py:23 msgid "New data to sync" msgstr "Datu berriak sinkronizatzeko" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Refreshing..." msgstr "Freskatzen..." #: ../conduit/dataproviders/DataProvider.py:25 msgid "Refreshed OK" msgstr "Ongi freskatuta" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Refreshing" msgstr "Errorea freskatzean" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronizing..." msgstr "Sinkronizatzen..." #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronized OK" msgstr "Ongi sinkronizatuta" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Error Synchronizing" msgstr "Errorea sinkronizatzean" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Synchronization Skipped" msgstr "Sinkronizazioa saltatuta" #: ../conduit/dataproviders/DataProvider.py:31 msgid "Synchronization Cancelled" msgstr "Sinkronizazioa bertan behera utzita" #: ../conduit/dataproviders/DataProvider.py:32 msgid "Synchronization Conflict" msgstr "Sinkronizazioa gatazkan" #: ../conduit/dataproviders/DataProvider.py:33 msgid "Not Configured" msgstr "Konfiguratu gabe" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "640x480" msgstr "640x480" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "800x600" msgstr "800x600" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "1024x768" msgstr "1024x768" #. Signifies that a conversion should not take place #: ../conduit/dataproviders/Image.py:35 #: ../conduit/modules/N800Module/N800Module.py:57 msgid "None" msgstr "Bat ere ez" #. Default Categories for the DataProviders #: ../conduit/dataproviders/__init__.py:6 msgid "Files and Folders" msgstr "Fitxategiak eta karpetak" #: ../conduit/dataproviders/__init__.py:7 #: ../conduit/modules/iPodModule/iPodModule.py:179 msgid "Notes" msgstr "Oharrak" #: ../conduit/dataproviders/__init__.py:8 #: ../conduit/modules/iPodModule/iPodModule.py:367 msgid "Photos" msgstr "Argazkiak" #: ../conduit/dataproviders/__init__.py:9 msgid "Office" msgstr "Bulegoa" #: ../conduit/dataproviders/__init__.py:10 msgid "Settings" msgstr "Ezarpenak" #: ../conduit/dataproviders/__init__.py:11 msgid "Miscellaneous" msgstr "Hainbat" #: ../conduit/dataproviders/__init__.py:12 msgid "Media" msgstr "Multimedia" #: ../conduit/dataproviders/__init__.py:13 msgid "Bookmarks" msgstr "Laster-markak" #: ../conduit/dataproviders/__init__.py:14 msgid "Test" msgstr "Proba" #: ../conduit/gtkui/Canvas.py:152 msgid "Drag a Data Provider here to continue" msgstr "Arrastatu datuen hornitzaile bat hona jarraitzeko" #: ../conduit/gtkui/Canvas.py:217 msgid "Show me" msgstr "Erakuts nazazu" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:91 msgid "Source" msgstr "Iturburua" #: ../conduit/gtkui/ConflictResolver.py:105 msgid "Resolution" msgstr "Bereizmena" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:110 msgid "Sink" msgstr "Sink." #: ../conduit/gtkui/ConflictResolver.py:150 #: ../conduit/gtkui/ConflictResolver.py:151 #, python-format msgid "Conflicts (%s)" msgstr "Gatazkak (%s)" #. name, #url #: ../conduit/gtkui/UI.py:33 msgid "Introduction" msgstr "Sarrera" #: ../conduit/gtkui/UI.py:34 msgid "Writing a Data Provider" msgstr "Datuen hornitzaile bat idazten" #: ../conduit/gtkui/UI.py:35 msgid "API Documentation" msgstr "APIaren dokumentazioa" #: ../conduit/gtkui/UI.py:36 msgid "Test Results" msgstr "Probaren emaitzak" #: ../conduit/gtkui/UI.py:129 #, python-format msgid " - %s (Development Version)" msgstr " - %s (garapeneko bertsioa)" #: ../conduit/gtkui/UI.py:131 msgid " - Running Uninstalled" msgstr " - instalatu gabe exekutatzen" #: ../conduit/gtkui/UI.py:165 msgid "Examples" msgstr "Adibideak" #: ../conduit/gtkui/UI.py:177 msgid "Developers" msgstr "Garatzaileak" #. Build some liststores to display #: ../conduit/gtkui/UI.py:318 msgid "Convert from" msgstr "Bihurtu hemendik:" #: ../conduit/gtkui/UI.py:319 msgid "into" msgstr "hona:" #: ../conduit/gtkui/UI.py:370 msgid "Relationship Database" msgstr "Erlazioen datu-basea" #: ../conduit/gtkui/UI.py:374 msgid "Conversions Available" msgstr "Bihurketa erabilgarriak" #: ../conduit/gtkui/UI.py:380 ../conduit/gtkui/Tree.py:348 #: ../conduit/modules/FileModule/FileConfiguration.py:117 msgid "Name" msgstr "Izena" #: ../conduit/gtkui/UI.py:384 msgid "Loaded" msgstr "Kargatuta" #: ../conduit/gtkui/UI.py:512 ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "Sinkronizatzen ari da. Bertan behera uztea nahi duzu?" #: ../conduit/gtkui/UI.py:684 msgid "_Synchronize All" msgstr "_Sinkronizatu guztiak" #: ../conduit/gtkui/UI.py:684 msgid "Synchronizes All Groups" msgstr "Sinkronizatu talde guztiak" #: ../conduit/gtkui/UI.py:685 msgid "_Cancel Synchronization" msgstr "_Utzi sinkronizatzea" #: ../conduit/gtkui/UI.py:685 msgid "Cancels Currently Synchronizing Groups" msgstr "Bertan behera utzi taldeen uneko sinkronizazioa" #: ../conduit/gtkui/UI.py:686 msgid "_Quit" msgstr "_Irten" #: ../conduit/gtkui/UI.py:686 msgid "Close Conduit" msgstr "Itxi Conduit" #: ../conduit/gtkui/UI.py:726 msgid "Synchronization Error" msgstr "Sinkronizazioko errorea" #: ../conduit/gtkui/UI.py:729 msgid "Synchronization Complete" msgstr "Sinkronizazioa burututa" #: ../conduit/gtkui/UI.py:745 msgid "Synchronizing" msgstr "Sinkronizatzen" #: ../conduit/gtkui/Tree.py:357 msgid "Description" msgstr "Azalpena" #: ../conduit/gtkui/ConfigItems.py:729 #, python-format msgid "Total: %d" msgstr "Guztira: %d" #: ../conduit/gtkui/WindowConfigurator.py:14 msgid "Configure" msgstr "Konfiguratu" #: ../conduit/modules/BackpackModule/BackpackModule.py:58 msgid "Backpack Notes" msgstr "Backpack-eko oharrak" #: ../conduit/modules/BackpackModule/BackpackModule.py:59 msgid "Store things in Backpack Notes" msgstr "Gorde gauzak Backpack oharretan" #: ../conduit/modules/BackpackModule/BackpackModule.py:105 #: ../conduit/modules/FlickrModule/FlickrModule.py:307 #: ../conduit/modules/ZotoModule/ZotoModule.py:243 msgid "Account details" msgstr "Kontuaren xehetasunak" #: ../conduit/modules/BackpackModule/BackpackModule.py:106 msgid "Login" msgstr "Saio-hasiera" #: ../conduit/modules/BackpackModule/BackpackModule.py:109 msgid "API key" msgstr "APIaren gakoa" #: ../conduit/modules/BackpackModule/BackpackModule.py:112 msgid "Saved notes" msgstr "Gordetako oharrak" #: ../conduit/modules/BackpackModule/BackpackModule.py:113 msgid "Save notes in page" msgstr "Gorde oharrak orrialdean" #: ../conduit/modules/BansheeModule/BansheeModule.py:52 msgid "Banshee Playlists" msgstr "Banshee-ren erreprodukzio-zerrendak" #: ../conduit/modules/BansheeModule/BansheeModule.py:53 msgid "Synchronize your Banshee playlists" msgstr "Sinkronizatu zure Banshee-ko erreprodukzio-zerrendak" #: ../conduit/modules/BansheeModule/BansheeModule.py:187 #: ../conduit/modules/BansheeModule/BansheeModule.py:188 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:116 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:117 msgid "Playlists" msgstr "Erreprodukzio-zerrendak" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 msgid "Box.net" msgstr "Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 msgid "Synchronize your Box.net files" msgstr "Sinkronizatu zure Box.net- webguneko fitxategiak" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:290 #: ../conduit/modules/FileModule/FileModule.py:82 msgid "Folder" msgstr "Karpeta" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:291 msgid "Folder name" msgstr "Karpetaren izena" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:295 msgid "Load folders" msgstr "Kargatu karpetak" #: ../conduit/modules/ConverterModule.py:91 msgid "Note-" msgstr "Oharra-" #: ../conduit/modules/DesktopWallpaperModule.py:38 msgid "Wallpaper" msgstr "Horma-papera" #: ../conduit/modules/DesktopWallpaperModule.py:39 msgid "Changes your Desktop Wallpaper" msgstr "Zure mahaigaineko horma-papera aldatzen du" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:107 #, python-format msgid "Select %s" msgstr "Hautatu %s" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:127 msgid "Evolution Contacts" msgstr "Evolution-eko kontaktuak" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:128 msgid "Synchronize your contacts" msgstr "Sinkronizatu zure kontaktuak" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:178 msgid "Evolution Calendar" msgstr "Evolution-eko egutegia" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:179 msgid "Synchronize your calendar" msgstr "Sinkronizatu zure egutegia" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:240 msgid "Evolution Tasks" msgstr "Evolution-eko zereginak" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:241 msgid "Synchronize your tasks" msgstr "Sinkronizatu zure zereginak" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:297 msgid "Evolution Memos" msgstr "Evolution-eko zirkularrak" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:298 msgid "Synchronize your memos" msgstr "Sinkronizatu zure zirkularrak" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 msgid "Facebook" msgstr "Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:39 msgid "Synchronize your Facebook photos" msgstr "Sinkronizatu zure Facebook-eko argazkiak" #: ../conduit/modules/FacebookModule/FacebookModule.py:124 #: ../conduit/modules/FlickrModule/FlickrModule.py:282 msgid "Loading album list..." msgstr "Albumen zerrenda kargatzen..." #: ../conduit/modules/FacebookModule/FacebookModule.py:128 msgid "Failed to connect" msgstr "Huts egin du konektatzean" #: ../conduit/modules/FacebookModule/FacebookModule.py:131 msgid "Logged in" msgstr "Saioan sartuta" #: ../conduit/modules/FacebookModule/FacebookModule.py:133 msgid "Failed to login" msgstr "Huts egin du saio hastean" #: ../conduit/modules/FacebookModule/FacebookModule.py:145 #: ../conduit/modules/FspotModule/FspotModule.py:243 msgid "Status" msgstr "Egoera" #: ../conduit/modules/FacebookModule/FacebookModule.py:150 #: ../conduit/modules/iPodModule/iPodModule.py:461 #: ../conduit/modules/ZotoModule/ZotoModule.py:252 msgid "Album" msgstr "Albuma" #: ../conduit/modules/FacebookModule/FacebookModule.py:151 msgid "Album name" msgstr "Albumaren izena" #: ../conduit/modules/FacebookModule/FacebookModule.py:156 msgid "Load albums" msgstr "Kargatu albumak" #: ../conduit/modules/FeedModule/FeedModule.py:58 msgid "RSS Feed" msgstr "RSS iturria" #: ../conduit/modules/FeedModule/FeedModule.py:59 msgid "Synchronize data from RSS enclosures" msgstr "Sinkronizatu datuak RSS eranskinetatik" #. FIXME: Add Randomize #: ../conduit/modules/FeedModule/FeedModule.py:114 msgid "Feed details" msgstr "Iturriaren xehetasunak" #: ../conduit/modules/FeedModule/FeedModule.py:115 msgid "Feed address" msgstr "Iturriaren helbidea" #: ../conduit/modules/FeedModule/FeedModule.py:118 msgid "Enclosure settings" msgstr "Erankinaren ezarpenak" #: ../conduit/modules/FeedModule/FeedModule.py:119 msgid "Limit downloaded enclosures" msgstr "Mugatu deskargatutako eranskinak" #: ../conduit/modules/FeedModule/FeedModule.py:125 msgid "Limit to" msgstr "Mugatu hona:" #: ../conduit/modules/FeedModule/FeedModule.py:129 msgid "Randomize enclosures" msgstr "Ausazko eranskinak" #: ../conduit/modules/FeedModule/FeedModule.py:133 msgid "Download types" msgstr "Deskarga motak" #: ../conduit/modules/FeedModule/FeedModule.py:134 msgid "Download audio files" msgstr "Deskargatu audio fitxategiak" #: ../conduit/modules/FeedModule/FeedModule.py:135 msgid "Download video files" msgstr "Deskargatu bideo fitxategiak" #: ../conduit/modules/FeedModule/FeedModule.py:136 msgid "Download photo files" msgstr "Deskargatu argazki fitxategiak" #: ../conduit/modules/FileModule/FileConfiguration.py:111 msgid "Icon" msgstr "Ikonoa" #: ../conduit/modules/FileModule/FileConfiguration.py:123 #: ../conduit/modules/GConfModule/GConfModule.py:138 msgid "Items" msgstr "Elementuak" #: ../conduit/modules/FileModule/FileConfiguration.py:149 #, python-format msgid "Contains %s files" msgstr "%s fitxategia du" #: ../conduit/modules/FileModule/FileConfiguration.py:248 msgid "Include file..." msgstr "Sartu fitxategia..." #: ../conduit/modules/FileModule/FileConfiguration.py:258 msgid "All files" msgstr "Fitxategi denak" #: ../conduit/modules/FileModule/FileConfiguration.py:271 msgid "Include folder..." msgstr "Sartu karpeta..." #: ../conduit/modules/FileModule/FileConfiguration.py:314 msgid "Please Name All Folders" msgstr "Izendatu karpeta guztiak" #: ../conduit/modules/FileModule/FileConfiguration.py:315 msgid "All folders require a descriptive name. To name a folder simply click on it" msgstr "Karpeta guztiek izen deskriptibo bat behar dute. Karpeta bati izena emateko egin klik haren gainean" #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "Fitxategiak" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "Iturburua hainbat fitxategi sinkronizatzeko" #: ../conduit/modules/FileModule/FileModule.py:83 msgid "Synchronize folders" msgstr "Sinkronizatu karpetak" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:40 msgid "Firefox 3 Bookmarks" msgstr "Firefox 3 laster-markak" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:41 msgid "Syncronize your Firefox 3 Bookmarks" msgstr "Sinkronizatu zure Firefox 3-ko laster-markak" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:100 msgid "Firefox Profile" msgstr "Firefox profila" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 msgid "Flickr" msgstr "Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 msgid "Synchronize your Flickr.com photos" msgstr "Sinkronizatu Flickr.com webguneko zure argazkiak" #: ../conduit/modules/FlickrModule/FlickrModule.py:287 msgid "Failed to connect." msgstr "Huts egin du konektatzean." #: ../conduit/modules/FlickrModule/FlickrModule.py:290 msgid "Album names loaded." msgstr "Albumen izenak kargatuta." #: ../conduit/modules/FlickrModule/FlickrModule.py:292 msgid "Failed to login." msgstr "Huts egin du saioa hastean." #: ../conduit/modules/FlickrModule/FlickrModule.py:303 msgid "Logging in, please wait..." msgstr "Saioan sartzen. Itxaron..." #: ../conduit/modules/FlickrModule/FlickrModule.py:308 #: ../conduit/modules/GoogleBookmarksModule.py:67 #: ../conduit/modules/ZotoModule/ZotoModule.py:244 msgid "Username" msgstr "Erabiltzaile-izena" #: ../conduit/modules/FlickrModule/FlickrModule.py:318 msgid "Authenticate" msgstr "Autentifikatu" #: ../conduit/modules/FlickrModule/FlickrModule.py:322 #: ../conduit/modules/ZotoModule/ZotoModule.py:251 msgid "Saved photo settings" msgstr "Gordetako argazkien ezarpenak" #: ../conduit/modules/FlickrModule/FlickrModule.py:327 msgid "Resize photos" msgstr "Aldatu argazkiak tamainaz" #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "Do not resize" msgstr "Ez aldatu tamainaz" #: ../conduit/modules/FlickrModule/FlickrModule.py:331 msgid "Photos are public" msgstr "Argazkiak publikoak dira" #: ../conduit/modules/FspotModule/FspotModule.py:25 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 msgid "Synchronize your F-Spot photos" msgstr "Sinkronizatu F-Spot-eko zure argazkiak" #: ../conduit/modules/FspotModule/FspotModule.py:152 msgid "F-Spot DBus interface is operating in read-only mode" msgstr "F-Spot DBus interfazea irakurtzeko soilik moduan ari da lanean" #: ../conduit/modules/FspotModule/FspotModule.py:218 msgid "F-Spot is running" msgstr "F-Spot exekutatzen ari da" #: ../conduit/modules/FspotModule/FspotModule.py:219 msgid "Please start F-Spot or activate the D-Bus Extension" msgstr "Abiarazi F-Spot edo aktibatu D-Bus hedapena" #: ../conduit/modules/FspotModule/FspotModule.py:244 msgid "Start F-Spot" msgstr "Abiarazi F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:248 #: ../conduit/modules/FspotModule/FspotModule.py:249 msgid "Tags" msgstr "Etiketak" #: ../conduit/modules/FspotModule/FspotModule.py:262 msgid "Add tags" msgstr "Gehitu etiketak" #: ../conduit/modules/FspotModule/FspotModule.py:263 msgid "Tag name" msgstr "Etiketaren izena" #: ../conduit/modules/FspotModule/FspotModule.py:266 msgid "Add tag" msgstr "Gehitu etiketa" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "Application Settings" msgstr "Aplikazioaren ezarpenak" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Synchronize your application settings" msgstr "Sinkronizatu zure aplikazioen ezarpenak" #: ../conduit/modules/GConfModule/GConfModule.py:31 msgid "Metacity" msgstr "Metacity" #: ../conduit/modules/GConfModule/GConfModule.py:32 msgid "Nautilus" msgstr "Nautilus" #: ../conduit/modules/GConfModule/GConfModule.py:33 msgid "Preferred Applications" msgstr "Hobetsitako aplikazioak" #: ../conduit/modules/GConfModule/GConfModule.py:34 msgid "Desktop Interface" msgstr "Mahaigaineko interfazea" #: ../conduit/modules/GConfModule/GConfModule.py:35 msgid "Gnome Terminal" msgstr "Gnome terminala" #: ../conduit/modules/GConfModule/GConfModule.py:137 msgid "Applications to Synchronize" msgstr "Aplikazioak sinkronizatzeko" #: ../conduit/modules/GoogleBookmarksModule.py:19 msgid "Google Bookmarks" msgstr "Google-ko laster-markak" #: ../conduit/modules/GoogleBookmarksModule.py:20 msgid "Sync your Google Bookmarks" msgstr "Sinkronizatu zure Google-ko laster-markak" #: ../conduit/modules/GoogleBookmarksModule.py:66 msgid "Login Details" msgstr "Saio-hasieraren xehetasunak" #: ../conduit/modules/GoogleBookmarksModule.py:70 #: ../conduit/modules/ZotoModule/ZotoModule.py:247 msgid "Password" msgstr "Pasahitza" #: ../conduit/modules/GoogleModule/GoogleModule.py:399 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:4 msgid "Google Calendar" msgstr "Google-ko egutegia" #: ../conduit/modules/GoogleModule/GoogleModule.py:400 msgid "Synchronize your Google Calendar" msgstr "Sinkronizatu zure Google-ko egutegia" #: ../conduit/modules/GoogleModule/GoogleModule.py:582 msgid "Picasa" msgstr "Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:583 msgid "Synchronize your Google Picasa photos" msgstr "Sinkronizatu zure Google Picasa-ko argazkiak" #: ../conduit/modules/GoogleModule/GoogleModule.py:745 msgid "Google Contacts" msgstr "Google-ko kontaktuak" #: ../conduit/modules/GoogleModule/GoogleModule.py:746 msgid "Synchronize your Google Mail contacts" msgstr "Sinkronizatu zure Google-ko posta-kontaktuak" #: ../conduit/modules/GoogleModule/GoogleModule.py:1076 msgid "Google Documents" msgstr "Google-ko dokumentuak" #: ../conduit/modules/GoogleModule/GoogleModule.py:1077 msgid "Synchronize your Google Documents" msgstr "Sinkronizatu zure Google-ko dokumentuak" #: ../conduit/modules/GoogleModule/GoogleModule.py:1322 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:69 msgid "Unknown" msgstr "Ezezaguna" #: ../conduit/modules/GoogleModule/GoogleModule.py:1323 msgid "miscellaneous" msgstr "hainbat" #: ../conduit/modules/GoogleModule/GoogleModule.py:1324 msgid "No description." msgstr "Azalpenik ez." #: ../conduit/modules/GoogleModule/GoogleModule.py:1333 msgid "YouTube" msgstr "YouTube" #: ../conduit/modules/GoogleModule/GoogleModule.py:1334 msgid "Synchronize data from YouTube" msgstr "Sinkronizatu datuak YouTube-tik" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:1 msgid "Account Details" msgstr "Kontuaren xehetasunak" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:2 msgid "Calendar:" msgstr "Egutegia:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:3 msgid "Email:" msgstr "Hel.Elek.:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:5 msgid "Load Calendars" msgstr "Kargatu egutegiak" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:6 msgid "Password:" msgstr "Pasahitza:" #: ../conduit/modules/iPodModule/iPodModule.py:180 msgid "Synchronize your iPod notes" msgstr "Sinkronizatu zure iPod-eko oharrak" #: ../conduit/modules/iPodModule/iPodModule.py:295 #: ../conduit/modules/SynceModule.py:311 msgid "Contacts" msgstr "Kontaktuak" #: ../conduit/modules/iPodModule/iPodModule.py:296 msgid "Synchronize your iPod contacts" msgstr "Sinkronizatu zure iPod-eko kontaktuak" #: ../conduit/modules/iPodModule/iPodModule.py:331 #: ../conduit/modules/SynceModule.py:449 msgid "Calendar" msgstr "Egutegia" #: ../conduit/modules/iPodModule/iPodModule.py:332 msgid "Synchronize your iPod calendar" msgstr "Sinkronizatu zure iPod-eko egutegia" #: ../conduit/modules/iPodModule/iPodModule.py:368 msgid "Synchronize your iPod photos" msgstr "Sinkronizatu zure iPod-eko argazkiak" #: ../conduit/modules/iPodModule/iPodModule.py:465 msgid "Delete" msgstr "Ezabatu" #: ../conduit/modules/iPodModule/iPodModule.py:695 #: ../conduit/modules/iPodModule/iPodModule.py:812 #: ../conduit/modules/N800Module/N800Module.py:77 msgid "Encoding" msgstr "Kodeketa" #: ../conduit/modules/iPodModule/iPodModule.py:811 msgid "Conversion options" msgstr "Bihurketako aukerak" #: ../conduit/modules/iPodModule/iPodModule.py:816 msgid "Keep converted files" msgstr "Mantendu bihurtutako fitxategiak" #: ../conduit/modules/iPodModule/iPodModule.py:846 msgid "iPod Music" msgstr "iPod musika" #: ../conduit/modules/iPodModule/iPodModule.py:847 msgid "Synchronize your iPod music" msgstr "Sinkronizatu zure iPod-eko musika" #: ../conduit/modules/iPodModule/iPodModule.py:882 msgid "iPod Video" msgstr "iPod bideoa" #: ../conduit/modules/iPodModule/iPodModule.py:883 msgid "Synchronize your iPod videos" msgstr "Sinkronizatu zure iPod-eko bideoak" #: ../conduit/modules/iPodModule/iPodModule.py:907 msgid "Movie" msgstr "Filmeak" #: ../conduit/modules/iPodModule/iPodModule.py:908 msgid "Music Video" msgstr "Musika-bideoa" #: ../conduit/modules/iPodModule/iPodModule.py:909 msgid "TV Show" msgstr "TV programa" #: ../conduit/modules/iPodModule/iPodModule.py:911 msgid "Video kind" msgstr "Bideo mota" #. Translators: Translate this in derived classes. #: ../conduit/modules/N800Module/N800Module.py:55 msgid "Conduit" msgstr "Conduit" #: ../conduit/modules/N800Module/N800Module.py:105 msgid "N800 Files" msgstr "N800 fitxategiak" #: ../conduit/modules/N800Module/N800Module.py:106 msgid "Synchronizes files/folders to a N800 device" msgstr "Sinkronizatu fitxategiak/karpetak N800 gailu batekin" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:111 msgid "Backups" msgstr "Babeskopiak" #: ../conduit/modules/N800Module/N800Module.py:126 msgid "N800 Music" msgstr "N800 musika" #: ../conduit/modules/N800Module/N800Module.py:127 msgid "Synchronizes music to a N800 device" msgstr "Sinkronizatu musika N800 gailu batekin" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:133 msgid "Music" msgstr "Musika" #: ../conduit/modules/N800Module/N800Module.py:150 msgid "N800 Videos" msgstr "N800 bideoak" #: ../conduit/modules/N800Module/N800Module.py:151 msgid "Synchronizes video to a N800 device" msgstr "Sinkronizatu bideoak N800 gailu batekin" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:157 msgid "Video" msgstr "Bideoa" #: ../conduit/modules/N800Module/N800Module.py:174 msgid "N800 Photos" msgstr "N800 argazkiak" #: ../conduit/modules/N800Module/N800Module.py:175 msgid "Synchronizes photos to an N800 device" msgstr "Sinkronizatu argazkiak N800 gailu batekin" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:181 msgid "Photo" msgstr "Argazkia" #: ../conduit/modules/NautilusBookmarksModule.py:19 msgid "Nautilus Bookmarks" msgstr "Nautilus-eko laster-markak" #: ../conduit/modules/NautilusBookmarksModule.py:20 msgid "Sync your Nautilus Bookmarks" msgstr "Sinkronizatu zure Nautilus-eko laster-markak" #: ../conduit/modules/NautilusBookmarksModule.py:145 msgid "Sync bookmarks to local places/files" msgstr "Sinkronizatu laster-markak lokaleko kokaleku/fitxategietan" #: ../conduit/modules/NautilusBookmarksModule.py:148 msgid "Sync bookmarks to remote places/files" msgstr "Sinkronizatu laster-markak urruneko kokaleku/fitxategietan" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "Sarea" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "Gaitu sare bidez sinkronizatzea" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:44 msgid "Rhythmbox Music" msgstr "Rhythmbox musika" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:45 msgid "Synchronize songs from your Rhythmbox playlists" msgstr "Sinkronizatu abestiak zure Rhythmbox-eko erreprodukzio-zerrendetatik" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 msgid "Shutterfly" msgstr "Shutterfly" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 msgid "Synchronize your Shutterfly photos" msgstr "Sinkronizatu Shutterfly-eko zure argazkiak" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "%Y-%m-%d %H:%M:%S" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 msgid "SmugMug" msgstr "SmugMug" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 msgid "Synchronize your SmugMug.com photos" msgstr "Sinkronizatu SmugMug.com webguneko zure argazkiak" #: ../conduit/modules/SynceModule.py:139 msgid "Create Partnership" msgstr "Sortu elkartea" #: ../conduit/modules/SynceModule.py:312 msgid "Windows Mobile Contacts" msgstr "Windows Mobile-ko kontaktuak" #: ../conduit/modules/SynceModule.py:450 msgid "Windows Mobile Calendar" msgstr "Windows Mobile-ko egutegia" #: ../conduit/modules/SynceModule.py:459 msgid "Tasks" msgstr "Zereginak" #: ../conduit/modules/SynceModule.py:460 msgid "Windows Mobile Tasks" msgstr "Windows Mobile-ko zereginak" #: ../conduit/modules/ZotoModule/ZotoModule.py:154 msgid "Zoto" msgstr "Zoto" #: ../conduit/modules/ZotoModule/ZotoModule.py:155 msgid "Synchronize your Zoto photos" msgstr "Sinkronizatu Zoto.com webguneko zure argazkiak" conduit-0.3.17/po/ru.po0000644000175000017500000004162511172176633011613 00000000000000msgid "" msgstr "" "Project-Id-Version: 0.3.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-09-11 16:39+0100\n" "PO-Revision-Date: 2007-09-06 09:22+0300\n" "Last-Translator: Alexandre Prokoudine \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../data/conduit.desktop.in.in.h:1 #: ../data/conduit-autostart.desktop.in.in.h:1 msgid "Conduit" msgstr "Conduit" #: ../data/conduit.desktop.in.in.h:2 #: ../data/conduit-autostart.desktop.in.in.h:2 msgid "Conduit Synchronizer" msgstr "Синхронизатор Conduit" #: ../data/conduit.desktop.in.in.h:3 #: ../data/conduit-autostart.desktop.in.in.h:3 msgid "Synchronization for GNOME" msgstr "Синхронизация в GNOME" #: ../conduit/Canvas.py:68 msgid "Drag a Data Provider here to continue" msgstr "Перетащите сюда источник данных" #: ../conduit/DataProvider.py:173 msgid "Ready" msgstr "Готово" #: ../conduit/DataProvider.py:175 msgid "New data to sync" msgstr "Новые данные для синхронизации" #: ../conduit/DataProvider.py:177 msgid "Refreshing..." msgstr "Выполняется обновление..." #: ../conduit/DataProvider.py:179 msgid "Refreshed OK" msgstr "Обновление прошло успешно" #: ../conduit/DataProvider.py:181 msgid "Error Refreshing" msgstr "Ошибка при обновлении" #: ../conduit/DataProvider.py:183 msgid "Synchronizing..." msgstr "Выполняется синхронизация..." #: ../conduit/DataProvider.py:185 msgid "Synchronized OK" msgstr "Синхронизация прошла успешно" #: ../conduit/DataProvider.py:187 msgid "Error Synchronizing" msgstr "Ошибка при синхронизации" #: ../conduit/DataProvider.py:189 msgid "Synchronization Skipped" msgstr "Синхронизация пропущена" #: ../conduit/DataProvider.py:191 msgid "Synchronization Cancelled" msgstr "Синхронизация отменена" #: ../conduit/DataProvider.py:193 msgid "Synchronization Conflict" msgstr "Конфликт при синхронизации" #: ../conduit/DataProvider.py:195 msgid "Not Configured Correctly" msgstr "Некорректная настройка" #: ../conduit/DataProvider.py:582 msgid "Configure " msgstr "Настроить " #: ../conduit/GtkUI.py:347 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "Выполняется синхронизация. Вы хотите её отменить?" #: ../conduit/TypeConverter.py:144 msgid "Convert from" msgstr "Преобразовать из" #: ../conduit/TypeConverter.py:145 msgid "into" msgstr "в" #: ../conduit/dataproviders/BackpackModule/BackpackModule.py:47 msgid "Backpack Notes" msgstr "" #: ../conduit/dataproviders/BackpackModule/BackpackModule.py:48 msgid "Store things in Backpack Notes" msgstr "" #: ../conduit/dataproviders/BackpackModule/config.glade.h:1 #: ../conduit/dataproviders/FlickrModule/config.glade.h:1 #: ../conduit/dataproviders/GmailModule/config.glade.h:1 #: ../conduit/dataproviders/GoogleModule/config.glade.h:1 #: ../conduit/dataproviders/PicasaModule/config.glade.h:1 #: ../conduit/dataproviders/SmugMugModule/config.glade.h:1 msgid "Account Details" msgstr "Параметры учётной записи" #: ../conduit/dataproviders/BackpackModule/config.glade.h:2 msgid "Saved Note Settings" msgstr "Параметры сохранённых заметок" #: ../conduit/dataproviders/BackpackModule/config.glade.h:3 msgid "API Key:" msgstr "Ключ API" #: ../conduit/dataproviders/BackpackModule/config.glade.h:4 msgid "Backpack" msgstr "" #: ../conduit/dataproviders/BackpackModule/config.glade.h:5 msgid "Save Notes In Page:" msgstr "Сохранить замечания на странице" #: ../conduit/dataproviders/BackpackModule/config.glade.h:6 #: ../conduit/dataproviders/FlickrModule/config.glade.h:6 #: ../conduit/dataproviders/GmailModule/config.glade.h:16 #: ../conduit/dataproviders/PicasaModule/config.glade.h:6 #: ../conduit/dataproviders/SmugMugModule/config.glade.h:6 msgid "Username:" msgstr "Имя пользователя:" #: ../conduit/dataproviders/BoxDotNetModule/config.glade.h:1 msgid "Box.net" msgstr "Box.net" #: ../conduit/dataproviders/BoxDotNetModule/config.glade.h:2 #: ../conduit/dataproviders/FileModule/FileModule.py:520 msgid "Folder" msgstr "Папка" #: ../conduit/dataproviders/EvolutionModule/config.glade.h:1 msgid "Addressbook" msgstr "Адресная книга" #: ../conduit/dataproviders/EvolutionModule/config.glade.h:2 msgid "Evolution" msgstr "Evolution" #: ../conduit/dataproviders/FeedModule/FeedModule.py:32 #: ../conduit/dataproviders/FeedModule/config.glade.h:8 msgid "RSS Feed" msgstr "RSS-поток" #: ../conduit/dataproviders/FeedModule/FeedModule.py:33 msgid "Sync data from RSS enclosures" msgstr "Синхронизировать данные из вложений в RSS" #: ../conduit/dataproviders/FeedModule/config.glade.h:1 msgid "Enclosure Settings" msgstr "Параметры вложений" #: ../conduit/dataproviders/FeedModule/config.glade.h:2 msgid "Feed Details" msgstr "Подробнее о потоке" #: ../conduit/dataproviders/FeedModule/config.glade.h:3 msgid "Download Audio" msgstr "Скачать аудио" #: ../conduit/dataproviders/FeedModule/config.glade.h:4 msgid "Download Photos" msgstr "Скачать фотографии" #: ../conduit/dataproviders/FeedModule/config.glade.h:5 msgid "Feed Address:" msgstr "Адрес потока:" #: ../conduit/dataproviders/FeedModule/config.glade.h:6 msgid "" "Limit the Number of\n" "Enclosures Downloded to:" msgstr "" "Огрничить число вложений,\n" "скачиваемых в:" #: ../conduit/dataproviders/FileModule/FileModule.py:250 msgid "Include file ..." msgstr "Включить файл..." #: ../conduit/dataproviders/FileModule/FileModule.py:260 msgid "All files" msgstr "Все файлы" #: ../conduit/dataproviders/FileModule/FileModule.py:273 msgid "Include folder ..." msgstr "Включить папку..." #: ../conduit/dataproviders/FileModule/FileModule.py:321 msgid "Files" msgstr "Файлы" #: ../conduit/dataproviders/FileModule/FileModule.py:322 msgid "Source for synchronizing multiple files" msgstr "Источник синхронизации многих файлов" #: ../conduit/dataproviders/FileModule/FileModule.py:521 msgid "Synchronize folders" msgstr "Синхронизировать папки" #: ../conduit/dataproviders/FileModule/config.glade.h:1 msgid "Items to Synchronize" msgstr "Синхронизируемые объекты" #: ../conduit/dataproviders/FileModule/config.glade.h:2 msgid "Add Directory" msgstr "Добавить каталог" #: ../conduit/dataproviders/FileModule/config.glade.h:3 msgid "Add File" msgstr "Добавить файл" #: ../conduit/dataproviders/FileModule/config.glade.h:4 msgid "File Configuration" msgstr "Параметры файла" #: ../conduit/dataproviders/FileModule/config.glade.h:5 msgid "Folder Configuration" msgstr "Параметры папки" #: ../conduit/dataproviders/FileModule/config.glade.h:6 msgid "Folder Location:" msgstr "Расположение папки:" #: ../conduit/dataproviders/FileModule/config.glade.h:7 msgid "Folder Name:" msgstr "Имя папки:" #: ../conduit/dataproviders/FileModule/config.glade.h:8 msgid "Include Hidden Files" msgstr "Включить скрытые файлы" #: ../conduit/dataproviders/FileModule/config.glade.h:9 msgid "Select A Folder" msgstr "Выберите папку" #: ../conduit/dataproviders/FlickrModule/config.glade.h:2 #: ../conduit/dataproviders/PicasaModule/config.glade.h:2 #: ../conduit/dataproviders/SmugMugModule/config.glade.h:2 msgid "Saved Photo Settings" msgstr "Параметры сохранённых снимков" #: ../conduit/dataproviders/FlickrModule/config.glade.h:3 msgid "Flickr" msgstr "Flickr" #: ../conduit/dataproviders/FlickrModule/config.glade.h:4 msgid "Photos are Public" msgstr "Фотографии доступны для всех" #: ../conduit/dataproviders/FlickrModule/config.glade.h:5 msgid "Photoset Name:" msgstr "Название фотосета:" #: ../conduit/dataproviders/FspotModule/config.glade.h:1 msgid "Return Photos Tagged With" msgstr "Возвращать фотографии с метками" #: ../conduit/dataproviders/FspotModule/config.glade.h:2 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/dataproviders/GmailModule/GmailModule.py:75 msgid "Email" msgstr "Электронная почта" #: ../conduit/dataproviders/GmailModule/GmailModule.py:76 msgid "Sync your Gmail Emails" msgstr "Синхронизировать почту из Gmail" #: ../conduit/dataproviders/GmailModule/GmailModule.py:302 msgid "Contacts" msgstr "Контакты" #: ../conduit/dataproviders/GmailModule/GmailModule.py:303 msgid "Sync your Gmail Contacts" msgstr "Синхронизировать контакты из Gmail" #: ../conduit/dataproviders/GmailModule/config.glade.h:2 msgid "Login Details" msgstr "Об учётной записи" #: ../conduit/dataproviders/GmailModule/config.glade.h:3 msgid "Return Emails Matching" msgstr "Возвращать письма, проходящие по этим условиям" #: ../conduit/dataproviders/GmailModule/config.glade.h:4 msgid "Saved Email Settings" msgstr "Параметры сохранённых писем" #: ../conduit/dataproviders/GmailModule/config.glade.h:5 msgid "When Saving Emails" msgstr "При сохранении почты" #: ../conduit/dataproviders/GmailModule/config.glade.h:6 msgid "All Emails" msgstr "Все письма" #: ../conduit/dataproviders/GmailModule/config.glade.h:7 msgid "Attach Label to Email" msgstr "Добавить метку к письму" #: ../conduit/dataproviders/GmailModule/config.glade.h:8 msgid "Emails With Label" msgstr "Письма с меткой" #: ../conduit/dataproviders/GmailModule/config.glade.h:9 msgid "Emails in Folder" msgstr "Письма в папке" #: ../conduit/dataproviders/GmailModule/config.glade.h:10 msgid "Gmail Emails" msgstr "Письма в Gmail" #: ../conduit/dataproviders/GmailModule/config.glade.h:11 msgid "Gmail Sink Properties" msgstr "Свойства синхронизации Gmail" #: ../conduit/dataproviders/GmailModule/config.glade.h:12 #: ../conduit/dataproviders/GoogleModule/config.glade.h:6 #: ../conduit/dataproviders/PicasaModule/config.glade.h:4 #: ../conduit/dataproviders/SmugMugModule/config.glade.h:4 msgid "Password:" msgstr "Пароль:" #: ../conduit/dataproviders/GmailModule/config.glade.h:13 msgid "Password: " msgstr "Пароль: " #: ../conduit/dataproviders/GmailModule/config.glade.h:14 msgid "Save With Label" msgstr "Сохранять с меткой" #: ../conduit/dataproviders/GmailModule/config.glade.h:15 msgid "Unread Emails" msgstr "Непрочитанные письма" #: ../conduit/dataproviders/GmailModule/config.glade.h:17 msgid "Username: " msgstr "Имя пользователя: " #: ../conduit/dataproviders/GoogleModule/config.glade.h:2 msgid "Calendar:" msgstr "" #: ../conduit/dataproviders/GoogleModule/config.glade.h:3 #, fuzzy msgid "Email:" msgstr "Электронная почта" #: ../conduit/dataproviders/GoogleModule/config.glade.h:4 msgid "Google Calendar" msgstr "" #: ../conduit/dataproviders/GoogleModule/config.glade.h:5 msgid "Load Calendars" msgstr "" #: ../conduit/dataproviders/PicasaModule/config.glade.h:3 #: ../conduit/dataproviders/SmugMugModule/config.glade.h:3 msgid "Album:" msgstr "Альбом:" #: ../conduit/dataproviders/PicasaModule/config.glade.h:5 msgid "Picasa" msgstr "Picasa" #: ../conduit/dataproviders/SettingsModule/config.glade.h:1 msgid "Synchronize the Following Application Settings" msgstr "Синхронизировать следующие параметры приложения" #: ../conduit/dataproviders/SettingsModule/config.glade.h:2 msgid "Settings Configuration" msgstr "Настройка параметров" #: ../conduit/dataproviders/SmugMugModule/config.glade.h:5 msgid "SmugMug" msgstr "SmugMug" #: ../conduit/dataproviders/YouTubeModule/config.glade.h:1 msgid "Donwload Videos" msgstr "" #: ../conduit/dataproviders/YouTubeModule/config.glade.h:2 msgid "By user" msgstr "" #: ../conduit/dataproviders/YouTubeModule/config.glade.h:3 msgid "Favorites of" msgstr "" #: ../conduit/dataproviders/YouTubeModule/config.glade.h:4 msgid "Max retrieved videos (0 is unlimited):" msgstr "" #: ../conduit/dataproviders/YouTubeModule/config.glade.h:5 msgid "Most viewed" msgstr "" #: ../conduit/dataproviders/YouTubeModule/config.glade.h:6 msgid "Top rated" msgstr "" #: ../conduit/dataproviders/YouTubeModule/config.glade.h:7 msgid "Uploaded by" msgstr "" #: ../conduit/dataproviders/YouTubeModule/config.glade.h:8 #, fuzzy msgid "User: " msgstr "Имя пользователя: " #: ../conduit/dataproviders/YouTubeModule/config.glade.h:9 msgid "YouTube Source" msgstr "" #: ../conduit/dataproviders/YouTubeModule/YouTubeModule.py:34 msgid "YouTube" msgstr "" #: ../conduit/dataproviders/YouTubeModule/YouTubeModule.py:35 #, fuzzy msgid "Sync data from YouTube" msgstr "Синхронизировать данные из вложений в RSS" #: ../data/conduit.glade.h:1 msgid "General" msgstr "Общие" #: ../data/conduit.glade.h:2 msgid "Two Way Synchronisation" msgstr "Двунаправленная синхронизация" #: ../data/conduit.glade.h:3 msgid "Ask Me What to Do" msgstr "Спросить меня, что делать" #: ../data/conduit.glade.h:4 msgid "Clear Canvas" msgstr "Убрать все синхропары" #: ../data/conduit.glade.h:5 msgid "Compare" msgstr "Сравнить" #: ../data/conduit.glade.h:6 msgid "Conduit Properties" msgstr "Параметры Conduit" #: ../data/conduit.glade.h:7 msgid "Configuration" msgstr "Параметры" #: ../data/conduit.glade.h:8 msgid "Configure Item" msgstr "Настроить объект" #: ../data/conduit.glade.h:9 msgid "Configure the Synchronization Settings for this Item" msgstr "Изменить параметры синхронизации этого объекта" #: ../data/conduit.glade.h:10 msgid "Conflicts" msgstr "Конфликты" #: ../data/conduit.glade.h:11 msgid "Contents" msgstr "Содержимое" #: ../data/conduit.glade.h:12 msgid "Data Conversions" msgstr "Преобразователи данных" #: ../data/conduit.glade.h:13 #: ../data/conduit.glade.h:14 msgid "Data Providers" msgstr "Источники данных" #: ../data/conduit.glade.h:15 msgid "Delete Group" msgstr "Удалить группу" #: ../data/conduit.glade.h:16 msgid "Delete Item" msgstr "Удалить объект" #: ../data/conduit.glade.h:17 msgid "Delete from the corresponding Sink" msgstr "Удалить из соответствующей синхропары" #: ../data/conduit.glade.h:18 msgid "Editor" msgstr "Редактор" #: ../data/conduit.glade.h:19 msgid "Enable iPod and USB Key Support" msgstr "Включить поддержку iPod и USB Key" #: ../data/conduit.glade.h:20 msgid "Minimize to Tray Icon" msgstr "Сворачивать в область уведомления" #: ../data/conduit.glade.h:21 msgid "Refresh Group" msgstr "Обновить группу" #: ../data/conduit.glade.h:22 msgid "Refresh Item" msgstr "Обновить объект" #: ../data/conduit.glade.h:23 msgid "Replace the Older Item" msgstr "Заменить старый объект" #: ../data/conduit.glade.h:24 msgid "Resolve Conflicts" msgstr "Разрешить конфликты" #: ../data/conduit.glade.h:25 msgid "Save Synchronization Settings on Exit." msgstr "Сохранять параметры синхронизации при выходе" #: ../data/conduit.glade.h:26 msgid "Show Status Icon" msgstr "Показывать значок статуса" #: ../data/conduit.glade.h:27 msgid "Skip" msgstr "Пропустить" #: ../data/conduit.glade.h:28 msgid "Slow Sync" msgstr "Медленная синхронизация" #: ../data/conduit.glade.h:29 msgid "Synchronize All" msgstr "Синхронизировать всё" #: ../data/conduit.glade.h:30 msgid "Synchronize Group" msgstr "Синхронизировать группу" #: ../data/conduit.glade.h:31 msgid "Title" msgstr "Название" #: ../data/conduit.glade.h:32 msgid "Two Way Sync" msgstr "Двунаправленная синхронизация" #: ../data/conduit.glade.h:33 msgid "When There is a Conflict" msgstr "При возникновении конфликта" #: ../data/conduit.glade.h:34 msgid "When an Item Has Been Deleted" msgstr "Когда объект уже удалён" #: ../data/conduit.glade.h:35 msgid "dialog1" msgstr "dialog1" conduit-0.3.17/po/zh_CN.po0000644000175000017500000010076311321403566012157 00000000000000# Chinese (China) translation for conduit. # Copyright (C) 2009 conduit's COPYRIGHT HOLDER # This file is distributed under the same license as the conduit package. # 运强 苏 , 2009. # msgid "" msgstr "" "Project-Id-Version: conduit master\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=conduit&component=documentation and translation\n" "POT-Creation-Date: 2009-11-23 17:19+0000\n" "PO-Revision-Date: 2009-12-09 12:56+0800\n" "Last-Translator: 苏运强 \n" "Language-Team: Chinese (China) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../data/conduit.desktop.in.in.h:1 msgid "Conduit Synchronizer" msgstr "Conduit 同步工具" #: ../data/conduit.desktop.in.in.h:2 msgid "Synchronization for GNOME" msgstr "GNOME 的同步" #: ../data/conduit.glade.h:1 msgid "Default Synchronization Options" msgstr "默认同步选项" #: ../data/conduit.glade.h:2 msgid "General" msgstr "常规" #: ../data/conduit.glade.h:3 msgid "Always Up-To-Date" msgstr "总是及时更新" #: ../data/conduit.glade.h:4 msgid "Ask Me What to Do" msgstr "询问要做什么" #: ../data/conduit.glade.h:5 msgid "Ask me what to do" msgstr "询问要做什么" #: ../data/conduit.glade.h:6 msgid "Cancel Synchronization" msgstr "取消同步" #: ../data/conduit.glade.h:7 msgid "Cancel currently-synchronizing groups" msgstr "取消正在进行的同步组" #: ../data/conduit.glade.h:8 msgid "Clear Canvas" msgstr "清除显示区" #: ../data/conduit.glade.h:9 msgid "Compare" msgstr "比较" #: ../data/conduit.glade.h:10 msgid "Conduit Preferences" msgstr "Conduit 首选项" #: ../data/conduit.glade.h:11 msgid "Configuration" msgstr "配置" #: ../data/conduit.glade.h:12 msgid "Configure Item" msgstr "配置条目" #: ../data/conduit.glade.h:13 msgid "Configure the synchronization settings for this item" msgstr "为此条目配置同步设置" #: ../data/conduit.glade.h:14 msgid "Conflict Options" msgstr "冲突选项" #: ../data/conduit.glade.h:15 msgid "Conflicts" msgstr "冲突" #: ../data/conduit.glade.h:16 msgid "Contents" msgstr "内容" #: ../data/conduit.glade.h:17 msgid "Data Conversions" msgstr "数据转换" #: ../data/conduit.glade.h:18 msgid "Data Providers" msgstr "数据提供者" #: ../data/conduit.glade.h:19 msgid "Delete Group" msgstr "删除组" #: ../data/conduit.glade.h:20 msgid "Delete Item" msgstr "删除条目" #: ../data/conduit.glade.h:21 msgid "Delete Options" msgstr "删除选项" #: ../data/conduit.glade.h:22 msgid "Delete from the corresponding sink" msgstr "删除相应的接收器" #: ../data/conduit.glade.h:23 msgid "Delete the Corresponding Item" msgstr "删除相应的条目" #: ../data/conduit.glade.h:24 msgid "Editor" msgstr "编辑器" #: ../data/conduit.glade.h:25 msgid "Minimize to notification area" msgstr "最小化到通知区域" #: ../data/conduit.glade.h:26 msgid "Refresh Group" msgstr "刷新组" #: ../data/conduit.glade.h:27 msgid "Refresh Item" msgstr "刷新条目" #: ../data/conduit.glade.h:28 msgid "Replace the Older Item" msgstr "替代旧条目" #: ../data/conduit.glade.h:29 msgid "Replace the older item" msgstr "替代旧条目" #: ../data/conduit.glade.h:30 msgid "Resolve Conflicts" msgstr "解决冲突" #: ../data/conduit.glade.h:31 msgid "Save settings on exit" msgstr "退出时保存设置" #: ../data/conduit.glade.h:32 msgid "Show Hints" msgstr "显示提示" #: ../data/conduit.glade.h:33 msgid "Show status icon" msgstr "显示状态图标" #: ../data/conduit.glade.h:34 msgid "Skip" msgstr "跳过" #: ../data/conduit.glade.h:35 msgid "Slow Synchronization" msgstr "慢速同步" #: ../data/conduit.glade.h:36 msgid "Start Conduit at login" msgstr "登录时启动 Conduit" #: ../data/conduit.glade.h:37 msgid "Synchronization Options" msgstr "同步选项" #: ../data/conduit.glade.h:38 msgid "Synchronize All" msgstr "同步所有" #: ../data/conduit.glade.h:39 msgid "Synchronize Group" msgstr "同步组" #: ../data/conduit.glade.h:40 msgid "Synchronize group" msgstr "同步组" #: ../data/conduit.glade.h:41 msgid "Synchronizes all groups" msgstr "同步所有组" #: ../data/conduit.glade.h:42 msgid "Title" msgstr "标题" #: ../data/conduit.glade.h:43 msgid "Two-Way Synchronization" msgstr "双向同步" #: ../data/conduit.glade.h:44 msgid "When an item has been deleted:" msgstr "当一个条目被删除时:" #: ../data/conduit.glade.h:45 msgid "When an item is deleted..." msgstr "当一个条目被删除时..." #: ../data/conduit.glade.h:46 msgid "When there is a conflict..." msgstr "当有一个冲突时" #: ../data/conduit.glade.h:47 msgid "When there is a two-way conflict:" msgstr "当有双向冲突时:" #: ../data/conduit.glade.h:48 msgid "_Edit" msgstr "编辑(_E)" #: ../data/conduit.glade.h:49 msgid "_File" msgstr "文件(_F)" #: ../data/conduit.glade.h:50 msgid "_Help" msgstr "帮助(_H)" #: ../conduit/Knowledge.py:8 msgid "What Do You Want to Synchronize?" msgstr "您要同步什么?" #: ../conduit/Knowledge.py:9 msgid "Drag and Drop a Data Provider on the Canvas" msgstr "拖放一个数据提供者至画布" #: ../conduit/Knowledge.py:11 msgid "Synchronization Group Created" msgstr "已创建同步组" #: ../conduit/Knowledge.py:12 msgid "Add Another Data Provider to the Group to Synchronize it" msgstr "添加其他数据提供者至此组以同步它" #: ../conduit/Knowledge.py:14 msgid "You Are Now Ready to Synchronize" msgstr "准备好同步了吗?" #: ../conduit/Knowledge.py:15 msgid "Right Click on Group for Options" msgstr "在组上点右键获取选项" #. source,sinc #comment #. twoway #: ../conduit/Knowledge.py:22 msgid "Synchronize Two Folders" msgstr "同步两个目录" #: ../conduit/Knowledge.py:24 msgid "Backup Folder to Box.net" msgstr "备份目录到 Box.net" #: ../conduit/Knowledge.py:26 msgid "Synchronize Tagged F-Spot Photos to Flickr" msgstr "同步标记的 F-Spot 照片到 Flickr" #: ../conduit/Main.py:59 msgid "Conduit is a synchronization application." msgstr "Conduit 是一个同步程序。" #: ../conduit/Main.py:63 #, python-format msgid "Launch without GUI. [default: %default]" msgstr "不使用图形界面运行。[默认: %default]" #: ../conduit/Main.py:67 #, python-format msgid "Save dataprovider configuration to FILE. [default: %default]" msgstr "保存数据提供者配置至文件。[默认:%default]" #: ../conduit/Main.py:71 #, python-format msgid "Iconify on startup. [default: %default]" msgstr "启动时最小化到托盘。[默认: %default]" #: ../conduit/Main.py:75 #, python-format msgid "Run with the specified UI. [default: %default]" msgstr "使用指定的用户界面运行。[默认:%default]" #: ../conduit/Main.py:79 msgid "Only load modules in the named files. [default: load all modules]" msgstr "只从命名的文件中加载模块。[默认:加载所有模块]" #: ../conduit/Main.py:83 msgid "Do not load modules in the named files. [default: load all modules]" msgstr "不要从命名的文件中加载模块。[默认:加载所有模块]" #: ../conduit/Main.py:87 msgid "" "Explicitly set internal Conduit settings (keys) to the given values for this " "session. [default: do not set]" msgstr "显式为会话设置内部 Conduit 设置 (keys) 为给定的值。[默认:不设置]" #: ../conduit/Main.py:91 #, python-format msgid "" "Enable loading of unfinished or unsupported dataproviders. [default: %" "default]" msgstr "启用加载未完成或未支持的数据提供者。[默认:%default]" #: ../conduit/Main.py:95 #, python-format msgid "Generate more debugging information. [default: %default]" msgstr "产生较多调试信息。[默认:%default]" #: ../conduit/Main.py:99 #, python-format msgid "Generate less debugging information. [default: %default]" msgstr "产生较少调试信息。[默认:%default]" #: ../conduit/Main.py:103 #, python-format msgid "Generate no debugging information. [default: %default]" msgstr "不产生调试信息。[默认:%default]" #: ../conduit/dataproviders/DataProvider.py:22 msgid "Ready" msgstr "就绪" #: ../conduit/dataproviders/DataProvider.py:23 msgid "New data to sync" msgstr "要同步的新数据" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Refreshing..." msgstr "正在刷新..." #: ../conduit/dataproviders/DataProvider.py:25 msgid "Refreshed OK" msgstr "刷新完成" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Refreshing" msgstr "刷新出错" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronizing..." msgstr "同步中..." #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronized OK" msgstr "同步完成" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Error Synchronizing" msgstr "同步出错" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Synchronization Skipped" msgstr "同步已跳过" #: ../conduit/dataproviders/DataProvider.py:31 msgid "Synchronization Cancelled" msgstr "同步已取消" #: ../conduit/dataproviders/DataProvider.py:32 msgid "Synchronization Conflict" msgstr "同步冲突" #: ../conduit/dataproviders/DataProvider.py:33 msgid "Not Configured" msgstr "未配置" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "640x480" msgstr "640x480" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "800x600" msgstr "800x600" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "1024x768" msgstr "1024x768" #. Signifies that a conversion should not take place #: ../conduit/dataproviders/Image.py:35 #: ../conduit/modules/N800Module/N800Module.py:57 msgid "None" msgstr "无" #. Default Categories for the DataProviders #: ../conduit/dataproviders/__init__.py:6 msgid "Files and Folders" msgstr "文件和目录" #: ../conduit/dataproviders/__init__.py:7 #: ../conduit/modules/iPodModule/iPodModule.py:179 msgid "Notes" msgstr "便笺" #: ../conduit/dataproviders/__init__.py:8 #: ../conduit/modules/iPodModule/iPodModule.py:367 msgid "Photos" msgstr "照片" #: ../conduit/dataproviders/__init__.py:9 msgid "Office" msgstr "办公" #: ../conduit/dataproviders/__init__.py:10 msgid "Settings" msgstr "设置" #: ../conduit/dataproviders/__init__.py:11 msgid "Miscellaneous" msgstr "杂项" #: ../conduit/dataproviders/__init__.py:12 msgid "Media" msgstr "媒体" #: ../conduit/dataproviders/__init__.py:13 msgid "Bookmarks" msgstr "书签" #: ../conduit/dataproviders/__init__.py:14 msgid "Test" msgstr "测试" #: ../conduit/gtkui/Canvas.py:152 msgid "Drag a Data Provider here to continue" msgstr "拖动一个数据提供者至此处以继续" #: ../conduit/gtkui/Canvas.py:217 msgid "Show me" msgstr "显示此项" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:91 msgid "Source" msgstr "源" #: ../conduit/gtkui/ConflictResolver.py:105 msgid "Resolution" msgstr "" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:110 msgid "Sink" msgstr "" #: ../conduit/gtkui/ConflictResolver.py:150 #: ../conduit/gtkui/ConflictResolver.py:151 #, python-format msgid "Conflicts (%s)" msgstr "冲突(%s)" #. name, #url #: ../conduit/gtkui/UI.py:33 msgid "Introduction" msgstr "简介" #: ../conduit/gtkui/UI.py:34 msgid "Writing a Data Provider" msgstr "正在写入数据提供者" #: ../conduit/gtkui/UI.py:35 msgid "API Documentation" msgstr "API 文档" #: ../conduit/gtkui/UI.py:36 msgid "Test Results" msgstr "测试结果" #: ../conduit/gtkui/UI.py:129 #, python-format msgid " - %s (Development Version)" msgstr " - %s (开发版)" #: ../conduit/gtkui/UI.py:131 msgid " - Running Uninstalled" msgstr "" #: ../conduit/gtkui/UI.py:165 msgid "Examples" msgstr "示例" #: ../conduit/gtkui/UI.py:177 msgid "Developers" msgstr "开发者" #. Build some liststores to display #: ../conduit/gtkui/UI.py:318 msgid "Convert from" msgstr "转换,从" #: ../conduit/gtkui/UI.py:319 msgid "into" msgstr "至" #: ../conduit/gtkui/UI.py:370 msgid "Relationship Database" msgstr "关系数据库" #: ../conduit/gtkui/UI.py:374 msgid "Conversions Available" msgstr "转换可用" #: ../conduit/gtkui/UI.py:380 ../conduit/gtkui/Tree.py:348 #: ../conduit/modules/FileModule/FileConfiguration.py:117 msgid "Name" msgstr "名字" #: ../conduit/gtkui/UI.py:384 msgid "Loaded" msgstr "已加载" #: ../conduit/gtkui/UI.py:512 ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "同步正在进行。您想取消它?" #: ../conduit/gtkui/UI.py:684 msgid "_Synchronize All" msgstr "同步所有(_S)" #: ../conduit/gtkui/UI.py:684 msgid "Synchronizes All Groups" msgstr "同步所有组" #: ../conduit/gtkui/UI.py:685 msgid "_Cancel Synchronization" msgstr "取消同步(_C)" #: ../conduit/gtkui/UI.py:685 msgid "Cancels Currently Synchronizing Groups" msgstr "取消当前同步组" #: ../conduit/gtkui/UI.py:686 msgid "_Quit" msgstr "退出(_Q)" #: ../conduit/gtkui/UI.py:686 msgid "Close Conduit" msgstr "关闭 Conduit" #: ../conduit/gtkui/UI.py:726 msgid "Synchronization Error" msgstr "同步出错" #: ../conduit/gtkui/UI.py:729 msgid "Synchronization Complete" msgstr "同步完成" #: ../conduit/gtkui/UI.py:745 msgid "Synchronizing" msgstr "正在同步" #: ../conduit/gtkui/Tree.py:357 msgid "Description" msgstr "描述" #: ../conduit/gtkui/ConfigItems.py:734 #, python-format msgid "Total: %d" msgstr "总计:%d" #: ../conduit/gtkui/WindowConfigurator.py:14 msgid "Configure" msgstr "配置" #: ../conduit/modules/BackpackModule/BackpackModule.py:58 msgid "Backpack Notes" msgstr "" #: ../conduit/modules/BackpackModule/BackpackModule.py:59 msgid "Store things in Backpack Notes" msgstr "" #: ../conduit/modules/BackpackModule/BackpackModule.py:105 #: ../conduit/modules/FlickrModule/FlickrModule.py:307 #: ../conduit/modules/ZotoModule/ZotoModule.py:243 msgid "Account details" msgstr "账户细节" #: ../conduit/modules/BackpackModule/BackpackModule.py:106 msgid "Login" msgstr "登录" #: ../conduit/modules/BackpackModule/BackpackModule.py:109 msgid "API key" msgstr "API 键" #: ../conduit/modules/BackpackModule/BackpackModule.py:112 msgid "Saved notes" msgstr "已保存笔记" #: ../conduit/modules/BackpackModule/BackpackModule.py:113 msgid "Save notes in page" msgstr "保存便签至页面" #: ../conduit/modules/BansheeModule/BansheeModule.py:52 msgid "Banshee Playlists" msgstr "Banshee 播放列表" #: ../conduit/modules/BansheeModule/BansheeModule.py:53 msgid "Synchronize your Banshee playlists" msgstr "同步 Banshee 播放列表" #: ../conduit/modules/BansheeModule/BansheeModule.py:187 #: ../conduit/modules/BansheeModule/BansheeModule.py:188 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:116 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:117 msgid "Playlists" msgstr "播放列表" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 msgid "Box.net" msgstr "Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 msgid "Synchronize your Box.net files" msgstr "同步您的 Box.net 文件" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:290 #: ../conduit/modules/FileModule/FileModule.py:82 msgid "Folder" msgstr "目录" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:291 msgid "Folder name" msgstr "目录名" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:295 msgid "Load folders" msgstr "加载目录" #: ../conduit/modules/ConverterModule.py:91 msgid "Note-" msgstr "便签-" #: ../conduit/modules/DesktopWallpaperModule.py:38 msgid "Wallpaper" msgstr "壁纸" #: ../conduit/modules/DesktopWallpaperModule.py:39 msgid "Changes your Desktop Wallpaper" msgstr "更改您的桌面壁纸" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:107 #, python-format msgid "Select %s" msgstr "选择 %s" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:127 msgid "Evolution Contacts" msgstr "Evolution 联系人" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:128 msgid "Synchronize your contacts" msgstr "同步您的联系人" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:178 msgid "Evolution Calendar" msgstr "同步日历" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:179 msgid "Synchronize your calendar" msgstr "同步您的日历" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:240 msgid "Evolution Tasks" msgstr "Evolution 任务" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:241 msgid "Synchronize your tasks" msgstr "同步您的任务" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:297 msgid "Evolution Memos" msgstr "Evolution 备忘录" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:298 msgid "Synchronize your memos" msgstr "同步您的备忘录" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 msgid "Facebook" msgstr "Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:39 msgid "Synchronize your Facebook photos" msgstr "同步您的 Facebook 照片" #: ../conduit/modules/FacebookModule/FacebookModule.py:124 #: ../conduit/modules/FlickrModule/FlickrModule.py:282 msgid "Loading album list..." msgstr "正在加载相册列表..." #: ../conduit/modules/FacebookModule/FacebookModule.py:128 msgid "Failed to connect" msgstr "连接失败" #: ../conduit/modules/FacebookModule/FacebookModule.py:131 msgid "Logged in" msgstr "已登录" #: ../conduit/modules/FacebookModule/FacebookModule.py:133 msgid "Failed to login" msgstr "登录失败" #: ../conduit/modules/FacebookModule/FacebookModule.py:145 #: ../conduit/modules/FspotModule/FspotModule.py:243 msgid "Status" msgstr "状态" #: ../conduit/modules/FacebookModule/FacebookModule.py:150 #: ../conduit/modules/iPodModule/iPodModule.py:461 #: ../conduit/modules/ZotoModule/ZotoModule.py:252 msgid "Album" msgstr "相册" #: ../conduit/modules/FacebookModule/FacebookModule.py:151 msgid "Album name" msgstr "相册名" #: ../conduit/modules/FacebookModule/FacebookModule.py:156 msgid "Load albums" msgstr "加载相册" #: ../conduit/modules/FeedModule/FeedModule.py:58 msgid "RSS Feed" msgstr "RSS Feed" #: ../conduit/modules/FeedModule/FeedModule.py:59 msgid "Synchronize data from RSS enclosures" msgstr "从 RSS enclosure 同步数据" #. FIXME: Add Randomize #: ../conduit/modules/FeedModule/FeedModule.py:114 msgid "Feed details" msgstr "Feed 细节" #: ../conduit/modules/FeedModule/FeedModule.py:115 msgid "Feed address" msgstr "Feed 地址" #: ../conduit/modules/FeedModule/FeedModule.py:118 msgid "Enclosure settings" msgstr "Enclosure 设置" #: ../conduit/modules/FeedModule/FeedModule.py:119 msgid "Limit downloaded enclosures" msgstr "限制下载最大速度" #: ../conduit/modules/FeedModule/FeedModule.py:125 msgid "Limit to" msgstr "限制" #: ../conduit/modules/FeedModule/FeedModule.py:129 msgid "Randomize enclosures" msgstr "" #: ../conduit/modules/FeedModule/FeedModule.py:133 msgid "Download types" msgstr "下载类型" #: ../conduit/modules/FeedModule/FeedModule.py:134 msgid "Download audio files" msgstr "下载音频文件" #: ../conduit/modules/FeedModule/FeedModule.py:135 msgid "Download video files" msgstr "下载视频文件" #: ../conduit/modules/FeedModule/FeedModule.py:136 msgid "Download photo files" msgstr "下载图像文件" #: ../conduit/modules/FileModule/FileConfiguration.py:111 msgid "Icon" msgstr "图标" #: ../conduit/modules/FileModule/FileConfiguration.py:123 #: ../conduit/modules/GConfModule/GConfModule.py:138 msgid "Items" msgstr "条目" #: ../conduit/modules/FileModule/FileConfiguration.py:149 #, python-format msgid "Contains %s files" msgstr "包含 %s 文件" #: ../conduit/modules/FileModule/FileConfiguration.py:248 msgid "Include file..." msgstr "包含文件..." #: ../conduit/modules/FileModule/FileConfiguration.py:258 msgid "All files" msgstr "所有文件" #: ../conduit/modules/FileModule/FileConfiguration.py:271 msgid "Include folder..." msgstr "包含目录..." #: ../conduit/modules/FileModule/FileConfiguration.py:314 msgid "Please Name All Folders" msgstr "请命名所有目录" #: ../conduit/modules/FileModule/FileConfiguration.py:315 msgid "" "All folders require a descriptive name. To name a folder simply click on it" msgstr "所有目录都需要一个描述性的名字。要命名一个目录,只需在上边点击" #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "文件" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "" #: ../conduit/modules/FileModule/FileModule.py:83 msgid "Synchronize folders" msgstr "同步目录" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:40 msgid "Firefox 3 Bookmarks" msgstr "Firefox 3 书签" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:41 msgid "Syncronize your Firefox 3 Bookmarks" msgstr "同步您的 Firefox 3 书签" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:100 msgid "Firefox Profile" msgstr "Firefox 配置文件" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 msgid "Flickr" msgstr "Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 msgid "Synchronize your Flickr.com photos" msgstr "同步您的 Flickr.com 照片" #: ../conduit/modules/FlickrModule/FlickrModule.py:287 msgid "Failed to connect." msgstr "连接失败" #: ../conduit/modules/FlickrModule/FlickrModule.py:290 msgid "Album names loaded." msgstr "已加载相册名。" #: ../conduit/modules/FlickrModule/FlickrModule.py:292 msgid "Failed to login." msgstr "登录失败" #: ../conduit/modules/FlickrModule/FlickrModule.py:303 msgid "Logging in, please wait..." msgstr "正在登录,请稍候..." #: ../conduit/modules/FlickrModule/FlickrModule.py:308 #: ../conduit/modules/GoogleBookmarksModule.py:67 #: ../conduit/modules/ZotoModule/ZotoModule.py:244 msgid "Username" msgstr "用户名" #: ../conduit/modules/FlickrModule/FlickrModule.py:319 msgid "Authenticate" msgstr "认证" #: ../conduit/modules/FlickrModule/FlickrModule.py:323 #: ../conduit/modules/ZotoModule/ZotoModule.py:251 msgid "Saved photo settings" msgstr "已保存照片设置" #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "Resize photos" msgstr "调整照片大小" #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "Do not resize" msgstr "不要调整照片大小" #: ../conduit/modules/FlickrModule/FlickrModule.py:332 msgid "Photos are public" msgstr "公照片" #: ../conduit/modules/FspotModule/FspotModule.py:25 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 msgid "Synchronize your F-Spot photos" msgstr "同步您的 F-Spot 照片" #: ../conduit/modules/FspotModule/FspotModule.py:152 msgid "F-Spot DBus interface is operating in read-only mode" msgstr "F-Spot DBus 接口正在以只读模式操作" #: ../conduit/modules/FspotModule/FspotModule.py:218 msgid "F-Spot is running" msgstr "F-Spot 正在运行" #: ../conduit/modules/FspotModule/FspotModule.py:219 msgid "Please start F-Spot or activate the D-Bus Extension" msgstr "请启动 F-Spot 或激活此 D-Bus 扩展。" #: ../conduit/modules/FspotModule/FspotModule.py:244 msgid "Start F-Spot" msgstr "启动 F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:248 #: ../conduit/modules/FspotModule/FspotModule.py:249 msgid "Tags" msgstr "标记" #: ../conduit/modules/FspotModule/FspotModule.py:262 msgid "Add tags" msgstr "添加标记" #: ../conduit/modules/FspotModule/FspotModule.py:263 msgid "Tag name" msgstr "标记名" #: ../conduit/modules/FspotModule/FspotModule.py:266 msgid "Add tag" msgstr "添加标记" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "Application Settings" msgstr "程序设置" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Synchronize your application settings" msgstr "同步您的程序设置" #: ../conduit/modules/GConfModule/GConfModule.py:31 msgid "Metacity" msgstr "Metacity" #: ../conduit/modules/GConfModule/GConfModule.py:32 msgid "Nautilus" msgstr "Nautilus" #: ../conduit/modules/GConfModule/GConfModule.py:33 msgid "Preferred Applications" msgstr "首选应用程序" #: ../conduit/modules/GConfModule/GConfModule.py:34 msgid "Desktop Interface" msgstr "桌面接口" #: ../conduit/modules/GConfModule/GConfModule.py:35 msgid "Gnome Terminal" msgstr "Gnome 终端" #: ../conduit/modules/GConfModule/GConfModule.py:137 msgid "Applications to Synchronize" msgstr "要同步的应用程序" #: ../conduit/modules/GoogleBookmarksModule.py:19 msgid "Google Bookmarks" msgstr "Google 书签" #: ../conduit/modules/GoogleBookmarksModule.py:20 msgid "Sync your Google Bookmarks" msgstr "同步您的 Google 书签" #: ../conduit/modules/GoogleBookmarksModule.py:66 msgid "Login Details" msgstr "登录细节" #: ../conduit/modules/GoogleBookmarksModule.py:70 #: ../conduit/modules/ZotoModule/ZotoModule.py:247 msgid "Password" msgstr "口令" #: ../conduit/modules/GoogleModule/GoogleModule.py:399 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:4 msgid "Google Calendar" msgstr "Google 日历" #: ../conduit/modules/GoogleModule/GoogleModule.py:400 msgid "Synchronize your Google Calendar" msgstr "同步您的 Google 日历" #: ../conduit/modules/GoogleModule/GoogleModule.py:582 msgid "Picasa" msgstr "Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:583 msgid "Synchronize your Google Picasa photos" msgstr "同步您的 Google Picasa 照片" #: ../conduit/modules/GoogleModule/GoogleModule.py:745 msgid "Google Contacts" msgstr "Google 联系人" #: ../conduit/modules/GoogleModule/GoogleModule.py:746 msgid "Synchronize your Google Mail contacts" msgstr "同步您的 Google Mail 联系人" #: ../conduit/modules/GoogleModule/GoogleModule.py:1076 msgid "Google Documents" msgstr "Google 文档" #: ../conduit/modules/GoogleModule/GoogleModule.py:1077 msgid "Synchronize your Google Documents" msgstr "同步您的 Google 文档" #: ../conduit/modules/GoogleModule/GoogleModule.py:1322 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:69 msgid "Unknown" msgstr "未知" #: ../conduit/modules/GoogleModule/GoogleModule.py:1323 msgid "miscellaneous" msgstr "杂项" #: ../conduit/modules/GoogleModule/GoogleModule.py:1324 msgid "No description." msgstr "没有描述" #: ../conduit/modules/GoogleModule/GoogleModule.py:1333 msgid "YouTube" msgstr "YouTube" #: ../conduit/modules/GoogleModule/GoogleModule.py:1334 msgid "Synchronize data from YouTube" msgstr "从 YouTube 同步数据" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:1 msgid "Account Details" msgstr "账户细节" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:2 msgid "Calendar:" msgstr "日历:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:3 msgid "Email:" msgstr "电子邮件:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:5 msgid "Load Calendars" msgstr "加载日历" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:6 msgid "Password:" msgstr "口令:" #: ../conduit/modules/iPodModule/iPodModule.py:180 msgid "Synchronize your iPod notes" msgstr "同步您的 iPod 笔记" #: ../conduit/modules/iPodModule/iPodModule.py:295 #: ../conduit/modules/SynceModule.py:311 msgid "Contacts" msgstr "联系人" #: ../conduit/modules/iPodModule/iPodModule.py:296 msgid "Synchronize your iPod contacts" msgstr "同步您的 iPod 联系人" #: ../conduit/modules/iPodModule/iPodModule.py:331 #: ../conduit/modules/SynceModule.py:449 msgid "Calendar" msgstr "日历" #: ../conduit/modules/iPodModule/iPodModule.py:332 msgid "Synchronize your iPod calendar" msgstr "同步您的 iPod 日历" #: ../conduit/modules/iPodModule/iPodModule.py:368 msgid "Synchronize your iPod photos" msgstr "同步您的 iPod 照片" #: ../conduit/modules/iPodModule/iPodModule.py:465 msgid "Delete" msgstr "删除" #: ../conduit/modules/iPodModule/iPodModule.py:695 #: ../conduit/modules/iPodModule/iPodModule.py:812 #: ../conduit/modules/N800Module/N800Module.py:77 msgid "Encoding" msgstr "编码" #: ../conduit/modules/iPodModule/iPodModule.py:811 msgid "Conversion options" msgstr "转换选项" #: ../conduit/modules/iPodModule/iPodModule.py:816 msgid "Keep converted files" msgstr "保持转换过的文件" #: ../conduit/modules/iPodModule/iPodModule.py:846 msgid "iPod Music" msgstr "iPod 音乐" #: ../conduit/modules/iPodModule/iPodModule.py:847 msgid "Synchronize your iPod music" msgstr "同步您的 iPod 音乐" #: ../conduit/modules/iPodModule/iPodModule.py:882 msgid "iPod Video" msgstr "iPod 视频" #: ../conduit/modules/iPodModule/iPodModule.py:883 msgid "Synchronize your iPod videos" msgstr "同步您的 iPod 视频" #: ../conduit/modules/iPodModule/iPodModule.py:907 msgid "Movie" msgstr "电影" #: ../conduit/modules/iPodModule/iPodModule.py:908 msgid "Music Video" msgstr "音乐视频" #: ../conduit/modules/iPodModule/iPodModule.py:909 msgid "TV Show" msgstr "" #: ../conduit/modules/iPodModule/iPodModule.py:911 msgid "Video kind" msgstr "" #. Translators: Translate this in derived classes. #: ../conduit/modules/N800Module/N800Module.py:55 msgid "Conduit" msgstr "Conduit" #: ../conduit/modules/N800Module/N800Module.py:105 msgid "N800 Files" msgstr "N800 文件" #: ../conduit/modules/N800Module/N800Module.py:106 msgid "Synchronizes files/folders to a N800 device" msgstr "同步文件或目录到 N800" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:111 msgid "Backups" msgstr "备份" #: ../conduit/modules/N800Module/N800Module.py:126 msgid "N800 Music" msgstr "N800 音乐" #: ../conduit/modules/N800Module/N800Module.py:127 msgid "Synchronizes music to a N800 device" msgstr "同步音乐到 N800" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:133 msgid "Music" msgstr "音乐" #: ../conduit/modules/N800Module/N800Module.py:150 msgid "N800 Videos" msgstr "N800 视频" #: ../conduit/modules/N800Module/N800Module.py:151 msgid "Synchronizes video to a N800 device" msgstr "同步视频到 N800" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:157 msgid "Video" msgstr "视频" #: ../conduit/modules/N800Module/N800Module.py:174 msgid "N800 Photos" msgstr "N800 照片" #: ../conduit/modules/N800Module/N800Module.py:175 msgid "Synchronizes photos to an N800 device" msgstr "同步照片到 N800" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:181 msgid "Photo" msgstr "照片" #: ../conduit/modules/NautilusBookmarksModule.py:19 msgid "Nautilus Bookmarks" msgstr "Nautilus 书签" #: ../conduit/modules/NautilusBookmarksModule.py:20 msgid "Sync your Nautilus Bookmarks" msgstr "同步您的 Nautilus 书签" #: ../conduit/modules/NautilusBookmarksModule.py:145 msgid "Sync bookmarks to local places/files" msgstr "同步书签到本地位置或文件" #: ../conduit/modules/NautilusBookmarksModule.py:148 msgid "Sync bookmarks to remote places/files" msgstr "同步书签到远程位置或文件" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "网络" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "启用通过网络同步" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:44 msgid "Rhythmbox Music" msgstr "Rhythmbox 音乐" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:45 msgid "Synchronize songs from your Rhythmbox playlists" msgstr "从 Rhythmbox 播放列表同步歌曲" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 msgid "Shutterfly" msgstr "Shutterfly" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 msgid "Synchronize your Shutterfly photos" msgstr "同步您的 Shutterfly 照片" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "%Y-%m-%d %H:%M:%S" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 msgid "SmugMug" msgstr "SmugMug" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 msgid "Synchronize your SmugMug.com photos" msgstr "同步您的 SmugMug.com 照片" #: ../conduit/modules/SynceModule.py:139 msgid "Create Partnership" msgstr "创建合作关系" #: ../conduit/modules/SynceModule.py:312 msgid "Windows Mobile Contacts" msgstr "Windows Mobile 联系人" #: ../conduit/modules/SynceModule.py:450 msgid "Windows Mobile Calendar" msgstr "Windows Mobile 日历" #: ../conduit/modules/SynceModule.py:459 msgid "Tasks" msgstr "任务" #: ../conduit/modules/SynceModule.py:460 msgid "Windows Mobile Tasks" msgstr "Windows Mobile 任务" #: ../conduit/modules/ZotoModule/ZotoModule.py:154 msgid "Zoto" msgstr "Zoto" #: ../conduit/modules/ZotoModule/ZotoModule.py:155 msgid "Synchronize your Zoto photos" msgstr "同步您的 Zoto 照片" conduit-0.3.17/po/LINGUAS0000644000175000017500000000022211321403566011630 00000000000000# please keep this list sorted alphabetically ar ca cs de el en_GB es eu fi fr gl he hu it nb nds oc pa pl pt pt_BR ru sl sv vi zh_CN zh_HK zh_TW conduit-0.3.17/po/en_GB.po0000644000175000017500000011367711321403566012140 00000000000000# English (British) translation. # Copyright (C) 2008 THE conduit'S COPYRIGHT HOLDER # This file is distributed under the same license as the conduit package. # Philip Withnall , 2008, 2009. # Jen Ockwell , 2009. # # msgid "" msgstr "" "Project-Id-Version: conduit VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-09-13 13:46+0100\n" "PO-Revision-Date: 2009-03-22 10:14+0000\n" "Last-Translator: Philip Withnall \n" "Language-Team: British English \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../data/conduit.desktop.in.in.h:1 msgid "Conduit Synchronizer" msgstr "Conduit Synchroniser" #: ../data/conduit.desktop.in.in.h:2 msgid "Synchronization for GNOME" msgstr "Synchronisation for GNOME" #: ../data/conduit.glade.h:1 msgid "Default Synchronization Options" msgstr "Default Synchronisation Options" #: ../data/conduit.glade.h:2 msgid "General" msgstr "General" #: ../data/conduit.glade.h:3 msgid "Always Up-To-Date" msgstr "Always Up-To-Date" #: ../data/conduit.glade.h:4 msgid "Ask Me What to Do" msgstr "Ask Me What to Do" #: ../data/conduit.glade.h:5 msgid "Ask me what to do" msgstr "Ask me what to do" #: ../data/conduit.glade.h:6 msgid "Cancel Synchronization" msgstr "Cancel Synchronisation" #: ../data/conduit.glade.h:7 msgid "Cancel currently-synchronizing groups" msgstr "Cancel currently-synchronising groups" #: ../data/conduit.glade.h:8 msgid "Clear Canvas" msgstr "Clear Canvas" #: ../data/conduit.glade.h:9 msgid "Compare" msgstr "Compare" #: ../data/conduit.glade.h:10 msgid "Conduit Preferences" msgstr "Conduit Preferences" #: ../data/conduit.glade.h:11 msgid "Configuration" msgstr "Configuration" #: ../data/conduit.glade.h:12 msgid "Configure Item" msgstr "Configure Item" #: ../data/conduit.glade.h:13 msgid "Configure the synchronization settings for this item" msgstr "Configure the synchronisation settings for this item" #: ../data/conduit.glade.h:14 msgid "Conflict Options" msgstr "Conflict Options" #: ../data/conduit.glade.h:15 msgid "Conflicts" msgstr "Conflicts" #: ../data/conduit.glade.h:16 msgid "Contents" msgstr "Contents" #: ../data/conduit.glade.h:17 msgid "Data Conversions" msgstr "Data Conversions" #: ../data/conduit.glade.h:18 msgid "Data Providers" msgstr "Data Providers" #: ../data/conduit.glade.h:19 msgid "Delete Group" msgstr "Delete Group" #: ../data/conduit.glade.h:20 msgid "Delete Item" msgstr "Delete Item" #: ../data/conduit.glade.h:21 msgid "Delete Options" msgstr "Delete Options" #: ../data/conduit.glade.h:22 msgid "Delete from the corresponding sink" msgstr "Delete from the corresponding sink" #: ../data/conduit.glade.h:23 msgid "Delete the Corresponding Item" msgstr "Delete the Corresponding Item" #: ../data/conduit.glade.h:24 msgid "Editor" msgstr "Editor" #: ../data/conduit.glade.h:25 msgid "Minimize to notification area" msgstr "Minimise to notification area" #: ../data/conduit.glade.h:26 msgid "Refresh Group" msgstr "Refresh Group" #: ../data/conduit.glade.h:27 msgid "Refresh Item" msgstr "Refresh Item" #: ../data/conduit.glade.h:28 msgid "Replace the Older Item" msgstr "Replace the Older Item" #: ../data/conduit.glade.h:29 msgid "Replace the older item" msgstr "Replace the older item" #: ../data/conduit.glade.h:30 msgid "Resolve Conflicts" msgstr "Resolve Conflicts" #: ../data/conduit.glade.h:31 msgid "Save settings on exit" msgstr "Save settings on exit" #: ../data/conduit.glade.h:32 msgid "Show Hints" msgstr "Show Hints" #: ../data/conduit.glade.h:33 msgid "Show status icon" msgstr "Show status icon" #: ../data/conduit.glade.h:34 msgid "Skip" msgstr "Skip" #: ../data/conduit.glade.h:35 msgid "Slow Synchronization" msgstr "Slow Synchronisation" #: ../data/conduit.glade.h:36 msgid "Start Conduit at login" msgstr "Start Conduit at login" #: ../data/conduit.glade.h:37 msgid "Synchronization Options" msgstr "Synchronisation Options" #: ../data/conduit.glade.h:38 msgid "Synchronize All" msgstr "Synchronise All" #: ../data/conduit.glade.h:39 msgid "Synchronize Group" msgstr "Synchronise Group" #: ../data/conduit.glade.h:40 msgid "Synchronize group" msgstr "Synchronise group" #: ../data/conduit.glade.h:41 msgid "Synchronizes all groups" msgstr "Synchronises all groups" #: ../data/conduit.glade.h:42 msgid "Title" msgstr "Title" #: ../data/conduit.glade.h:43 msgid "Two-Way Synchronization" msgstr "Two-Way Synchronisation" #: ../data/conduit.glade.h:44 msgid "When an item has been deleted:" msgstr "When an item has been deleted:" #: ../data/conduit.glade.h:45 msgid "When an item is deleted..." msgstr "When an item is deleted…" #: ../data/conduit.glade.h:46 msgid "When there is a conflict..." msgstr "When there is a conflict…" #: ../data/conduit.glade.h:47 msgid "When there is a two-way conflict:" msgstr "When there is a two-way conflict:" #: ../data/conduit.glade.h:48 msgid "_Edit" msgstr "_Edit" #: ../data/conduit.glade.h:49 msgid "_File" msgstr "_File" #: ../data/conduit.glade.h:50 msgid "_Help" msgstr "_Help" #: ../conduit/Knowledge.py:8 msgid "What Do You Want to Synchronize?" msgstr "What Do You Want to Synchronise?" #: ../conduit/Knowledge.py:9 msgid "Drag and Drop a Data Provider on the Canvas" msgstr "Drag and Drop a Data Provider on the Canvas" #: ../conduit/Knowledge.py:11 msgid "Synchronization Group Created" msgstr "Synchronisation Group Created" #: ../conduit/Knowledge.py:12 msgid "Add Another Data Provider to the Group to Synchronize it" msgstr "Add Another Data Provider to the Group to Synchronise it" #: ../conduit/Knowledge.py:14 msgid "You Are Now Ready to Synchronize" msgstr "You Are Now Ready to Synchronise" #: ../conduit/Knowledge.py:15 msgid "Right Click on Group for Options" msgstr "Right-Click on Group for Options" #. source,sinc #comment #. twoway #: ../conduit/Knowledge.py:22 msgid "Synchronize Two Folders" msgstr "Synchronise Two Folders" #: ../conduit/Knowledge.py:24 msgid "Backup Folder to Box.net" msgstr "Back up Folder to Box.net" #: ../conduit/Knowledge.py:26 msgid "Synchronize Tagged F-Spot Photos to Flickr" msgstr "Synchronise Tagged F-Spot Photos to Flickr" #: ../conduit/Main.py:59 msgid "Conduit is a synchronization application." msgstr "Conduit is a synchronisation application." #: ../conduit/Main.py:63 #, python-format msgid "Launch without GUI. [default: %default]" msgstr "Launch without GUI. [default: %default]" #: ../conduit/Main.py:67 #, python-format msgid "Save dataprovider configuration to FILE. [default: %default]" msgstr "Save dataprovider configuration to FILE. [default: %default]" #: ../conduit/Main.py:71 #, python-format msgid "Iconify on startup. [default: %default]" msgstr "Iconify on startup. [default: %default]" #: ../conduit/Main.py:75 #, python-format msgid "Run with the specified UI. [default: %default]" msgstr "Run with the specified UI. [default: %default]" #: ../conduit/Main.py:79 msgid "Only load modules in the named files. [default: load all modules]" msgstr "Only load modules in the named files. [default: load all modules]" #: ../conduit/Main.py:83 msgid "Do not load modules in the named files. [default: load all modules]" msgstr "Do not load modules in the named files. [default: load all modules]" #: ../conduit/Main.py:87 msgid "" "Explicitly set internal Conduit settings (keys) to the given values for this " "session. [default: do not set]" msgstr "" "Explicitly set internal Conduit settings (keys) to the given values for this " "session. [default: do not set]" #: ../conduit/Main.py:91 #, python-format msgid "" "Enable loading of unfinished or unsupported dataproviders. [default: %" "default]" msgstr "" "Enable loading of unfinished or unsupported dataproviders. [default: %" "default]" #: ../conduit/Main.py:95 #, python-format msgid "Generate more debugging information. [default: %default]" msgstr "Generate more debugging information. [default: %default]" #: ../conduit/Main.py:99 #, python-format msgid "Generate less debugging information. [default: %default]" msgstr "Generate less debugging information. [default: %default]" #: ../conduit/Main.py:103 #, python-format msgid "Generate no debugging information. [default: %default]" msgstr "Generate no debugging information. [default: %default]" #: ../conduit/dataproviders/DataProvider.py:22 msgid "Ready" msgstr "Ready" #: ../conduit/dataproviders/DataProvider.py:23 msgid "New data to sync" msgstr "New data to syncronise" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Refreshing..." msgstr "Refreshing…" #: ../conduit/dataproviders/DataProvider.py:25 msgid "Refreshed OK" msgstr "Refreshed OK" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Refreshing" msgstr "Error Refreshing" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronizing..." msgstr "Synchronising…" #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronized OK" msgstr "Synchronised OK" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Error Synchronizing" msgstr "Error Synchronising" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Synchronization Skipped" msgstr "Synchronisation Skipped" #: ../conduit/dataproviders/DataProvider.py:31 msgid "Synchronization Cancelled" msgstr "Synchronisation Cancelled" #: ../conduit/dataproviders/DataProvider.py:32 msgid "Synchronization Conflict" msgstr "Synchronisation Conflict" #: ../conduit/dataproviders/DataProvider.py:33 msgid "Not Configured" msgstr "Not Configured" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "640x480" msgstr "640×480" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "800x600" msgstr "800×600" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "1024x768" msgstr "1024×768" #. Signifies that a conversion should not take place #: ../conduit/dataproviders/Image.py:35 #: ../conduit/modules/N800Module/N800Module.py:57 msgid "None" msgstr "None" #. Default Categories for the DataProviders #: ../conduit/dataproviders/__init__.py:6 msgid "Files and Folders" msgstr "Files and Folders" #: ../conduit/dataproviders/__init__.py:7 #: ../conduit/modules/iPodModule/iPodModule.py:179 msgid "Notes" msgstr "Notes" #: ../conduit/dataproviders/__init__.py:8 #: ../conduit/modules/iPodModule/iPodModule.py:367 msgid "Photos" msgstr "Photos" #: ../conduit/dataproviders/__init__.py:9 msgid "Office" msgstr "Office" #: ../conduit/dataproviders/__init__.py:10 msgid "Settings" msgstr "Settings" #: ../conduit/dataproviders/__init__.py:11 msgid "Miscellaneous" msgstr "Miscellaneous" #: ../conduit/dataproviders/__init__.py:12 msgid "Media" msgstr "Media" #: ../conduit/dataproviders/__init__.py:13 msgid "Bookmarks" msgstr "Bookmarks" #: ../conduit/dataproviders/__init__.py:14 msgid "Test" msgstr "Test" #: ../conduit/gtkui/Canvas.py:152 msgid "Drag a Data Provider here to continue" msgstr "Drag a Data Provider here to continue" #: ../conduit/gtkui/Canvas.py:217 msgid "Show me" msgstr "Show me" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:91 msgid "Source" msgstr "Source" #: ../conduit/gtkui/ConflictResolver.py:105 msgid "Resolution" msgstr "Resolution" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:110 msgid "Sink" msgstr "Sink" #: ../conduit/gtkui/ConflictResolver.py:150 #: ../conduit/gtkui/ConflictResolver.py:151 #, python-format msgid "Conflicts (%s)" msgstr "Conflicts (%s)" #. name, #url #: ../conduit/gtkui/UI.py:33 msgid "Introduction" msgstr "Introduction" #: ../conduit/gtkui/UI.py:34 msgid "Writing a Data Provider" msgstr "Writing a Data Provider" #: ../conduit/gtkui/UI.py:35 msgid "API Documentation" msgstr "API Documentation" #: ../conduit/gtkui/UI.py:36 msgid "Test Results" msgstr "Test Results" #: ../conduit/gtkui/UI.py:129 #, python-format msgid " - %s (Development Version)" msgstr " - %s (Development Version)" #: ../conduit/gtkui/UI.py:131 msgid " - Running Uninstalled" msgstr " - Running Uninstalled" #: ../conduit/gtkui/UI.py:165 msgid "Examples" msgstr "Examples" #: ../conduit/gtkui/UI.py:177 msgid "Developers" msgstr "Developers" #. Build some liststores to display #: ../conduit/gtkui/UI.py:318 msgid "Convert from" msgstr "Convert from" #: ../conduit/gtkui/UI.py:319 msgid "into" msgstr "into" #: ../conduit/gtkui/UI.py:370 msgid "Relationship Database" msgstr "Relationship Database" #: ../conduit/gtkui/UI.py:374 msgid "Conversions Available" msgstr "Conversions Available" #: ../conduit/gtkui/UI.py:380 ../conduit/gtkui/Tree.py:348 #: ../conduit/modules/FileModule/FileConfiguration.py:117 msgid "Name" msgstr "Name" #: ../conduit/gtkui/UI.py:384 msgid "Loaded" msgstr "Loaded" #: ../conduit/gtkui/UI.py:512 ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "Synchronisation in progress. Do you want to cancel it?" #: ../conduit/gtkui/UI.py:684 msgid "_Synchronize All" msgstr "_Synchronise All" #: ../conduit/gtkui/UI.py:684 msgid "Synchronizes All Groups" msgstr "Synchronises All Groups" #: ../conduit/gtkui/UI.py:685 msgid "_Cancel Synchronization" msgstr "_Cancel Synchronisation" #: ../conduit/gtkui/UI.py:685 msgid "Cancels Currently Synchronizing Groups" msgstr "Cancels Currently-Synchronising Groups" #: ../conduit/gtkui/UI.py:686 msgid "_Quit" msgstr "_Quit" #: ../conduit/gtkui/UI.py:686 msgid "Close Conduit" msgstr "Close Conduit" #: ../conduit/gtkui/UI.py:726 msgid "Synchronization Error" msgstr "Synchronisation Error" #: ../conduit/gtkui/UI.py:729 msgid "Synchronization Complete" msgstr "Synchronisation Complete" #: ../conduit/gtkui/UI.py:745 msgid "Synchronizing" msgstr "Synchronising" #: ../conduit/gtkui/Tree.py:357 msgid "Description" msgstr "Description" #: ../conduit/gtkui/ConfigItems.py:729 #, python-format msgid "Total: %d" msgstr "Total: %d" #: ../conduit/gtkui/WindowConfigurator.py:14 msgid "Configure" msgstr "Configure" #: ../conduit/modules/BackpackModule/BackpackModule.py:58 msgid "Backpack Notes" msgstr "Backpack Notes" #: ../conduit/modules/BackpackModule/BackpackModule.py:59 msgid "Store things in Backpack Notes" msgstr "Store things in Backpack Notes" #: ../conduit/modules/BackpackModule/BackpackModule.py:105 #: ../conduit/modules/FlickrModule/FlickrModule.py:307 #: ../conduit/modules/ZotoModule/ZotoModule.py:243 msgid "Account details" msgstr "Account details" #: ../conduit/modules/BackpackModule/BackpackModule.py:106 msgid "Login" msgstr "Login" #: ../conduit/modules/BackpackModule/BackpackModule.py:109 msgid "API key" msgstr "API key" #: ../conduit/modules/BackpackModule/BackpackModule.py:112 msgid "Saved notes" msgstr "Saved notes" #: ../conduit/modules/BackpackModule/BackpackModule.py:113 msgid "Save notes in page" msgstr "Save notes in page" #: ../conduit/modules/BansheeModule/BansheeModule.py:52 msgid "Banshee Playlists" msgstr "Banshee Playlists" #: ../conduit/modules/BansheeModule/BansheeModule.py:53 msgid "Synchronize your Banshee playlists" msgstr "Synchronise your Banshee playlists" #: ../conduit/modules/BansheeModule/BansheeModule.py:187 #: ../conduit/modules/BansheeModule/BansheeModule.py:188 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:116 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:117 msgid "Playlists" msgstr "Playlists" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 msgid "Box.net" msgstr "Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 msgid "Synchronize your Box.net files" msgstr "Synchronise your Box.net files" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:290 #: ../conduit/modules/FileModule/FileModule.py:82 msgid "Folder" msgstr "Folder" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:291 msgid "Folder name" msgstr "Folder name" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:295 msgid "Load folders" msgstr "Load folders" #: ../conduit/modules/ConverterModule.py:91 msgid "Note-" msgstr "Note-" #: ../conduit/modules/DesktopWallpaperModule.py:38 msgid "Wallpaper" msgstr "Wallpaper" #: ../conduit/modules/DesktopWallpaperModule.py:39 msgid "Changes your Desktop Wallpaper" msgstr "Changes your Desktop Wallpaper" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:107 #, python-format msgid "Select %s" msgstr "Select %s" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:127 msgid "Evolution Contacts" msgstr "Evolution Contacts" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:128 msgid "Synchronize your contacts" msgstr "Synchronise your contacts" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:178 msgid "Evolution Calendar" msgstr "Evolution Calendar" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:179 msgid "Synchronize your calendar" msgstr "Synchronise your calendar" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:240 msgid "Evolution Tasks" msgstr "Evolution Tasks" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:241 msgid "Synchronize your tasks" msgstr "Synchronise your tasks" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:297 msgid "Evolution Memos" msgstr "Evolution Memos" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:298 msgid "Synchronize your memos" msgstr "Synchronise your memos" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 msgid "Facebook" msgstr "Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:39 msgid "Synchronize your Facebook photos" msgstr "Synchronise your Facebook photos" #: ../conduit/modules/FacebookModule/FacebookModule.py:124 #: ../conduit/modules/FlickrModule/FlickrModule.py:282 msgid "Loading album list..." msgstr "Loading album list…" #: ../conduit/modules/FacebookModule/FacebookModule.py:128 msgid "Failed to connect" msgstr "Failed to connect" #: ../conduit/modules/FacebookModule/FacebookModule.py:131 msgid "Logged in" msgstr "Logged in" #: ../conduit/modules/FacebookModule/FacebookModule.py:133 msgid "Failed to login" msgstr "Failed to log in" #: ../conduit/modules/FacebookModule/FacebookModule.py:145 #: ../conduit/modules/FspotModule/FspotModule.py:243 msgid "Status" msgstr "Status" #: ../conduit/modules/FacebookModule/FacebookModule.py:150 #: ../conduit/modules/iPodModule/iPodModule.py:461 #: ../conduit/modules/ZotoModule/ZotoModule.py:252 msgid "Album" msgstr "Album" #: ../conduit/modules/FacebookModule/FacebookModule.py:151 msgid "Album name" msgstr "Album name" #: ../conduit/modules/FacebookModule/FacebookModule.py:156 msgid "Load albums" msgstr "Load albums" #: ../conduit/modules/FeedModule/FeedModule.py:58 msgid "RSS Feed" msgstr "RSS Feed" #: ../conduit/modules/FeedModule/FeedModule.py:59 msgid "Synchronize data from RSS enclosures" msgstr "Synchronise data from RSS enclosures" #. FIXME: Add Randomize #: ../conduit/modules/FeedModule/FeedModule.py:114 msgid "Feed details" msgstr "Feed details" #: ../conduit/modules/FeedModule/FeedModule.py:115 msgid "Feed address" msgstr "Feed address" #: ../conduit/modules/FeedModule/FeedModule.py:118 msgid "Enclosure settings" msgstr "Enclosure settings" #: ../conduit/modules/FeedModule/FeedModule.py:119 msgid "Limit downloaded enclosures" msgstr "Limit downloaded enclosures" #: ../conduit/modules/FeedModule/FeedModule.py:125 msgid "Limit to" msgstr "Limit to" #: ../conduit/modules/FeedModule/FeedModule.py:129 msgid "Randomize enclosures" msgstr "Randomise enclosures" #: ../conduit/modules/FeedModule/FeedModule.py:133 msgid "Download types" msgstr "Download types" #: ../conduit/modules/FeedModule/FeedModule.py:134 msgid "Download audio files" msgstr "Download audio files" #: ../conduit/modules/FeedModule/FeedModule.py:135 msgid "Download video files" msgstr "Download video files" #: ../conduit/modules/FeedModule/FeedModule.py:136 msgid "Download photo files" msgstr "Download photo files" #: ../conduit/modules/FileModule/FileConfiguration.py:111 msgid "Icon" msgstr "Icon" #: ../conduit/modules/FileModule/FileConfiguration.py:123 #: ../conduit/modules/GConfModule/GConfModule.py:138 msgid "Items" msgstr "Items" #: ../conduit/modules/FileModule/FileConfiguration.py:149 #, python-format msgid "Contains %s files" msgstr "Contains %s files" #: ../conduit/modules/FileModule/FileConfiguration.py:248 msgid "Include file..." msgstr "Include file…" #: ../conduit/modules/FileModule/FileConfiguration.py:258 msgid "All files" msgstr "All files" #: ../conduit/modules/FileModule/FileConfiguration.py:271 msgid "Include folder..." msgstr "Include folder…" #: ../conduit/modules/FileModule/FileConfiguration.py:314 msgid "Please Name All Folders" msgstr "Please Name All Folders" #: ../conduit/modules/FileModule/FileConfiguration.py:315 msgid "" "All folders require a descriptive name. To name a folder simply click on it" msgstr "" "All folders require a descriptive name. To name a folder simply click on it" #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "Files" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "Source for synchronising multiple files" #: ../conduit/modules/FileModule/FileModule.py:83 msgid "Synchronize folders" msgstr "Synchronise folders" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:40 msgid "Firefox 3 Bookmarks" msgstr "Firefox 3 Bookmarks" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:41 msgid "Syncronize your Firefox 3 Bookmarks" msgstr "Syncronise your Firefox 3 Bookmarks" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:100 msgid "Firefox Profile" msgstr "Firefox Profile" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 msgid "Flickr" msgstr "Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 msgid "Synchronize your Flickr.com photos" msgstr "Synchronise your Flickr.com photos" #: ../conduit/modules/FlickrModule/FlickrModule.py:287 msgid "Failed to connect." msgstr "Failed to connect." #: ../conduit/modules/FlickrModule/FlickrModule.py:290 msgid "Album names loaded." msgstr "Album names loaded." #: ../conduit/modules/FlickrModule/FlickrModule.py:292 msgid "Failed to login." msgstr "Failed to log in." #: ../conduit/modules/FlickrModule/FlickrModule.py:303 msgid "Logging in, please wait..." msgstr "Logging in, please wait…" #: ../conduit/modules/FlickrModule/FlickrModule.py:308 #: ../conduit/modules/GoogleBookmarksModule.py:67 #: ../conduit/modules/ZotoModule/ZotoModule.py:244 msgid "Username" msgstr "Username" #: ../conduit/modules/FlickrModule/FlickrModule.py:318 msgid "Authenticate" msgstr "Authenticate" #: ../conduit/modules/FlickrModule/FlickrModule.py:322 #: ../conduit/modules/ZotoModule/ZotoModule.py:251 msgid "Saved photo settings" msgstr "Saved photo settings" #: ../conduit/modules/FlickrModule/FlickrModule.py:327 msgid "Resize photos" msgstr "Resize photos" #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "Do not resize" msgstr "Do not resize" #: ../conduit/modules/FlickrModule/FlickrModule.py:331 msgid "Photos are public" msgstr "Photos are public" #: ../conduit/modules/FspotModule/FspotModule.py:25 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 msgid "Synchronize your F-Spot photos" msgstr "Synchronise your F-Spot photos" #: ../conduit/modules/FspotModule/FspotModule.py:152 msgid "F-Spot DBus interface is operating in read-only mode" msgstr "F-Spot DBus interface is operating in read-only mode" #: ../conduit/modules/FspotModule/FspotModule.py:218 msgid "F-Spot is running" msgstr "F-Spot is running" #: ../conduit/modules/FspotModule/FspotModule.py:219 msgid "Please start F-Spot or activate the D-Bus Extension" msgstr "Please start F-Spot or activate the D-Bus Extension" #: ../conduit/modules/FspotModule/FspotModule.py:244 msgid "Start F-Spot" msgstr "Start F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:248 #: ../conduit/modules/FspotModule/FspotModule.py:249 msgid "Tags" msgstr "Tags" #: ../conduit/modules/FspotModule/FspotModule.py:262 msgid "Add tags" msgstr "Add tags" #: ../conduit/modules/FspotModule/FspotModule.py:263 msgid "Tag name" msgstr "Tag name" #: ../conduit/modules/FspotModule/FspotModule.py:266 msgid "Add tag" msgstr "Add tag" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "Application Settings" msgstr "Application Settings" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Synchronize your application settings" msgstr "Synchronise your application settings" #: ../conduit/modules/GConfModule/GConfModule.py:31 msgid "Metacity" msgstr "Metacity" #: ../conduit/modules/GConfModule/GConfModule.py:32 msgid "Nautilus" msgstr "Nautilus" #: ../conduit/modules/GConfModule/GConfModule.py:33 msgid "Preferred Applications" msgstr "Preferred Applications" #: ../conduit/modules/GConfModule/GConfModule.py:34 msgid "Desktop Interface" msgstr "Desktop Interface" #: ../conduit/modules/GConfModule/GConfModule.py:35 msgid "Gnome Terminal" msgstr "GNOME Terminal" #: ../conduit/modules/GConfModule/GConfModule.py:137 msgid "Applications to Synchronize" msgstr "Applications to Synchronise" #: ../conduit/modules/GoogleBookmarksModule.py:19 msgid "Google Bookmarks" msgstr "Google Bookmarks" #: ../conduit/modules/GoogleBookmarksModule.py:20 msgid "Sync your Google Bookmarks" msgstr "Syncronise your Google Bookmarks" #: ../conduit/modules/GoogleBookmarksModule.py:66 msgid "Login Details" msgstr "Login Details" #: ../conduit/modules/GoogleBookmarksModule.py:70 #: ../conduit/modules/ZotoModule/ZotoModule.py:247 msgid "Password" msgstr "Password" #: ../conduit/modules/GoogleModule/GoogleModule.py:399 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:4 msgid "Google Calendar" msgstr "Google Calendar" #: ../conduit/modules/GoogleModule/GoogleModule.py:400 msgid "Synchronize your Google Calendar" msgstr "Synchronise your Google Calendar" #: ../conduit/modules/GoogleModule/GoogleModule.py:582 msgid "Picasa" msgstr "Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:583 msgid "Synchronize your Google Picasa photos" msgstr "Synchronise your Google Picasa photos" #: ../conduit/modules/GoogleModule/GoogleModule.py:745 msgid "Google Contacts" msgstr "Google Contacts" #: ../conduit/modules/GoogleModule/GoogleModule.py:746 msgid "Synchronize your Google Mail contacts" msgstr "Synchronise your Google Mail contacts" #: ../conduit/modules/GoogleModule/GoogleModule.py:1076 msgid "Google Documents" msgstr "Google Documents" #: ../conduit/modules/GoogleModule/GoogleModule.py:1077 msgid "Synchronize your Google Documents" msgstr "Synchronise your Google Documents" #: ../conduit/modules/GoogleModule/GoogleModule.py:1322 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:69 msgid "Unknown" msgstr "Unknown" #: ../conduit/modules/GoogleModule/GoogleModule.py:1323 msgid "miscellaneous" msgstr "miscellaneous" #: ../conduit/modules/GoogleModule/GoogleModule.py:1324 msgid "No description." msgstr "No description." #: ../conduit/modules/GoogleModule/GoogleModule.py:1333 msgid "YouTube" msgstr "YouTube" #: ../conduit/modules/GoogleModule/GoogleModule.py:1334 msgid "Synchronize data from YouTube" msgstr "Synchronise data from YouTube" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:1 msgid "Account Details" msgstr "Account Details" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:2 msgid "Calendar:" msgstr "Calendar:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:3 msgid "Email:" msgstr "E-mail:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:5 msgid "Load Calendars" msgstr "Load Calendars" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:6 msgid "Password:" msgstr "Password:" #: ../conduit/modules/iPodModule/iPodModule.py:180 msgid "Synchronize your iPod notes" msgstr "Synchronise your iPod notes" #: ../conduit/modules/iPodModule/iPodModule.py:295 #: ../conduit/modules/SynceModule.py:311 msgid "Contacts" msgstr "Contacts" #: ../conduit/modules/iPodModule/iPodModule.py:296 msgid "Synchronize your iPod contacts" msgstr "Synchronise your iPod contacts" #: ../conduit/modules/iPodModule/iPodModule.py:331 #: ../conduit/modules/SynceModule.py:449 msgid "Calendar" msgstr "Calendar" #: ../conduit/modules/iPodModule/iPodModule.py:332 msgid "Synchronize your iPod calendar" msgstr "Synchronise your iPod calendar" #: ../conduit/modules/iPodModule/iPodModule.py:368 msgid "Synchronize your iPod photos" msgstr "Synchronise your iPod photos" #: ../conduit/modules/iPodModule/iPodModule.py:465 msgid "Delete" msgstr "Delete" #: ../conduit/modules/iPodModule/iPodModule.py:695 #: ../conduit/modules/iPodModule/iPodModule.py:812 #: ../conduit/modules/N800Module/N800Module.py:77 msgid "Encoding" msgstr "Encoding" #: ../conduit/modules/iPodModule/iPodModule.py:811 msgid "Conversion options" msgstr "Conversion options" #: ../conduit/modules/iPodModule/iPodModule.py:816 msgid "Keep converted files" msgstr "Keep converted files" #: ../conduit/modules/iPodModule/iPodModule.py:846 msgid "iPod Music" msgstr "iPod Music" #: ../conduit/modules/iPodModule/iPodModule.py:847 msgid "Synchronize your iPod music" msgstr "Synchronise your iPod music" #: ../conduit/modules/iPodModule/iPodModule.py:882 msgid "iPod Video" msgstr "iPod Video" #: ../conduit/modules/iPodModule/iPodModule.py:883 msgid "Synchronize your iPod videos" msgstr "Synchronise your iPod videos" #: ../conduit/modules/iPodModule/iPodModule.py:907 msgid "Movie" msgstr "Movie" #: ../conduit/modules/iPodModule/iPodModule.py:908 msgid "Music Video" msgstr "Music Video" #: ../conduit/modules/iPodModule/iPodModule.py:909 msgid "TV Show" msgstr "TV Show" #: ../conduit/modules/iPodModule/iPodModule.py:911 msgid "Video kind" msgstr "Video kind" #. Translators: Translate this in derived classes. #: ../conduit/modules/N800Module/N800Module.py:55 msgid "Conduit" msgstr "Conduit" #: ../conduit/modules/N800Module/N800Module.py:105 msgid "N800 Files" msgstr "N800 Files" #: ../conduit/modules/N800Module/N800Module.py:106 msgid "Synchronizes files/folders to a N800 device" msgstr "Synchronises files/folders to a N800 device" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:111 msgid "Backups" msgstr "Backups" #: ../conduit/modules/N800Module/N800Module.py:126 msgid "N800 Music" msgstr "N800 Music" #: ../conduit/modules/N800Module/N800Module.py:127 msgid "Synchronizes music to a N800 device" msgstr "Synchronises music to a N800 device" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:133 msgid "Music" msgstr "Music" #: ../conduit/modules/N800Module/N800Module.py:150 msgid "N800 Videos" msgstr "N800 Videos" #: ../conduit/modules/N800Module/N800Module.py:151 msgid "Synchronizes video to a N800 device" msgstr "Synchronises video to a N800 device" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:157 msgid "Video" msgstr "Video" #: ../conduit/modules/N800Module/N800Module.py:174 msgid "N800 Photos" msgstr "N800 Photos" #: ../conduit/modules/N800Module/N800Module.py:175 msgid "Synchronizes photos to an N800 device" msgstr "Synchronises photos to an N800 device" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:181 msgid "Photo" msgstr "Photo" #: ../conduit/modules/NautilusBookmarksModule.py:19 msgid "Nautilus Bookmarks" msgstr "Nautilus Bookmarks" #: ../conduit/modules/NautilusBookmarksModule.py:20 msgid "Sync your Nautilus Bookmarks" msgstr "Syncronise your Nautilus Bookmarks" #: ../conduit/modules/NautilusBookmarksModule.py:145 msgid "Sync bookmarks to local places/files" msgstr "Syncronise bookmarks to local places/files" #: ../conduit/modules/NautilusBookmarksModule.py:148 msgid "Sync bookmarks to remote places/files" msgstr "Syncronise bookmarks to remote places/files" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "Network" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "Enable synchronisation via network" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:44 msgid "Rhythmbox Music" msgstr "Rhythmbox Music" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:45 msgid "Synchronize songs from your Rhythmbox playlists" msgstr "Synchronise songs from your Rhythmbox playlists" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 msgid "Shutterfly" msgstr "Shutterfly" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 msgid "Synchronize your Shutterfly photos" msgstr "Synchronise your Shutterfly photos" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "%Y-%m-%d %H:%M:%S" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 msgid "SmugMug" msgstr "SmugMug" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 msgid "Synchronize your SmugMug.com photos" msgstr "Synchronise your SmugMug.com photos" #: ../conduit/modules/SynceModule.py:139 msgid "Create Partnership" msgstr "Create Partnership" #: ../conduit/modules/SynceModule.py:312 msgid "Windows Mobile Contacts" msgstr "Windows Mobile Contacts" #: ../conduit/modules/SynceModule.py:450 msgid "Windows Mobile Calendar" msgstr "Windows Mobile Calendar" #: ../conduit/modules/SynceModule.py:459 msgid "Tasks" msgstr "Tasks" #: ../conduit/modules/SynceModule.py:460 msgid "Windows Mobile Tasks" msgstr "Windows Mobile Tasks" #: ../conduit/modules/ZotoModule/ZotoModule.py:154 msgid "Zoto" msgstr "Zoto" #: ../conduit/modules/ZotoModule/ZotoModule.py:155 msgid "Synchronize your Zoto photos" msgstr "Synchronise your Zoto photos" #~ msgid "Saved Note Settings" #~ msgstr "Saved Note Settings" #~ msgid "Backpack" #~ msgstr "Backpack" #~ msgid "Enabled" #~ msgstr "Enabled" #~ msgid "Return Playlists" #~ msgstr "Return Playlists" #~ msgid "Banshee" #~ msgstr "Banshee" #~ msgid "Addressbook:" #~ msgstr "Addressbook:" #~ msgid "Evolution" #~ msgstr "Evolution" #~ msgid "Load" #~ msgstr "Load" #~ msgid "" #~ "Limit the Number of\n" #~ "Enclosures Downloaded to:" #~ msgstr "" #~ "Limit the Number of\n" #~ "Enclosures Downloaded to:" #~ msgid "Items to Synchronize" #~ msgstr "Items to Synchronise" #~ msgid "Add Directory" #~ msgstr "Add Directory" #~ msgid "Add File" #~ msgstr "Add File" #~ msgid "Advanced" #~ msgstr "Advanced" #~ msgid "File Configuration" #~ msgstr "File Configuration" #~ msgid "Folder Configuration" #~ msgstr "Folder Configuration" #~ msgid "Folder Location:" #~ msgstr "Folder Location:" #~ msgid "Follow Symbolic Links" #~ msgstr "Follow Symbolic Links" #~ msgid "Ignore File Modification Times" #~ msgstr "Ignore File Modification Times" #~ msgid "Include Hidden Files" #~ msgstr "Include Hidden Files" #~ msgid "Select A Folder" #~ msgstr "Select A Folder" #~ msgid "Photoset Name:" #~ msgstr "Photoset Name:" #~ msgid "Downloaded Document Format" #~ msgstr "Downloaded Document Format" #~ msgid "Presentations" #~ msgstr "Presentations" #~ msgid "Spreadsheets" #~ msgstr "Spreadsheets" #~ msgid "Download Videos" #~ msgstr "Download Videos" #~ msgid "Favorites of above user" #~ msgstr "Favourites of above user" #~ msgid "Max retrieved videos (0 is unlimited):" #~ msgstr "Max retrieved videos (0 is unlimited):" #~ msgid "Top rated" #~ msgstr "Top rated" #~ msgid "Uploaded by above user" #~ msgstr "Uploaded by above user" #~ msgid "YouTube Source" #~ msgstr "YouTube Source" #~ msgid "Encoding" #~ msgstr "Encoding" #~ msgid "iPod Photos" #~ msgstr "iPod Photos" #~ msgid "%s Format (%s)" #~ msgstr "%s Format (%s)" #~ msgid "unchanged" #~ msgstr "unchanged" #~ msgid "Firefox" #~ msgstr "Firefox" #~ msgid "Slow Sync" #~ msgstr "Slow Sync" #~ msgid "Sync Options" #~ msgstr "Synchronisation Options" #~ msgid "Two Way Sync" #~ msgstr "Two-Way Sync" #~ msgid "Folder:" #~ msgstr "Folder:" #~ msgid "Return Photos Tagged With" #~ msgstr "Return Photos Tagged With" #~ msgid "Create Tags: " #~ msgstr "Create Tags: " #~ msgid "Synchronize your desktop preferences" #~ msgstr "Synchronise your desktop preferences" #~ msgid "Synchronize the Following Playlists" #~ msgstr "Synchronise the Following Playlists" #~ msgid "Rhythmbox Playlists" #~ msgstr "Rhythmbox Playlists" #~ msgid "Use built in Web browser" #~ msgstr "Use built-in Web browser" #~ msgid "_About" #~ msgstr "_About" #~ msgid "About Conduit" #~ msgstr "About Conduit" #~ msgid "Please Enter a Folder Name" #~ msgstr "Please Enter a Folder Name" #~ msgid "" #~ "All folders require a descriptive name. To name a folder enter its name " #~ "where indicated" #~ msgstr "" #~ "All folders require a descriptive name. To name a folder enter its name " #~ "where indicated" #~ msgid "F-Spot Photos" #~ msgstr "F-Spot Photos" #~ msgid "Sync contacts from Google" #~ msgstr "Synchronise contacts from Google" #~ msgid "By user" #~ msgstr "By user" #~ msgid "User: " #~ msgstr "User: " #~ msgid "Gmail Emails" #~ msgstr "Gmail E-mails" #~ msgid "Sync your emails" #~ msgstr "Sync your e-mails" #~ msgid "Return Emails Matching" #~ msgstr "Return E-mails Matching" #~ msgid "When Saving Emails" #~ msgstr "When Saving E-mails" #~ msgid "Add Label:" #~ msgstr "Add Label:" #~ msgid "All emails" #~ msgstr "All e-mails" #~ msgid "Emails in folder:" #~ msgstr "E-mails in folder:" #~ msgid "Emails with label:" #~ msgstr "E-mails with label:" #~ msgid "Unread emails" #~ msgstr "Unread e-mails" #~ msgid "Sync your Evolution contacts" #~ msgstr "Sync your Evolution contacts" #~ msgid "Evolution Events" #~ msgstr "Evolution Events" #~ msgid "Sync your Evolution events" #~ msgstr "Sync your Evolution events" #~ msgid "Evolution Todo" #~ msgstr "Evolution Todo" #~ msgid "Picasa Desktop" #~ msgstr "Picasa Desktop" #~ msgid "Sync your Picasa photos" #~ msgstr "Sync your Picasa photos" #~ msgid "Return Photos In The Following Albums" #~ msgstr "Return Photos In The Following Albums" #~ msgid "Sync your devices contacts" #~ msgstr "Sync your devices contacts" #~ msgid "Windows Mobile Events" #~ msgstr "Windows Mobile Events" #~ msgid "Sync your devices events" #~ msgstr "Sync your devices events" #~ msgid "Sync your devices tasks" #~ msgstr "Sync your devices tasks" conduit-0.3.17/po/zh_TW.po0000644000175000017500000006470511172176633012224 00000000000000# traditional Chinese translation of conduit. # Copyright (C) 2001, 2003 Free Software Foundation, Inc. # Chao-Hsiung Liao , 2008. # # msgid "" msgstr "" "Project-Id-Version: conduit 0.3.15\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-09-26 13:45+0800\n" "PO-Revision-Date: 2008-09-29 14:15+0800\n" "Last-Translator: Chao-Hsiung Liao \n" "Language-Team: Chinese/Traditional \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../data/conduit.desktop.in.in.h:1 #: ../data/conduit-autostart.desktop.in.in.h:2 msgid "Conduit Synchronizer" msgstr "Conduit 同步化程式" #: ../data/conduit.desktop.in.in.h:2 #: ../data/conduit-autostart.desktop.in.in.h:3 msgid "Synchronization for GNOME" msgstr "GNOME 的同步化程式" #. Translators: Translate this in derived classes. #: ../data/conduit-autostart.desktop.in.in.h:1 #: ../conduit/modules/N800Module/N800Module.py:55 msgid "Conduit" msgstr "Conduit" #: ../data/conduit.glade.h:1 msgid "Default Synchronization Options" msgstr "預設同步化選項" #: ../data/conduit.glade.h:2 msgid "General" msgstr "一般" #: ../data/conduit.glade.h:3 msgid "Always Up To Date" msgstr "永遠保持最新" #: ../data/conduit.glade.h:4 msgid "Ask Me What to Do" msgstr "詢問我要怎麼做" #: ../data/conduit.glade.h:5 msgid "Ask me what to do" msgstr "詢問我要怎麼做" #: ../data/conduit.glade.h:6 msgid "Cancel Synchronization" msgstr "取消同步化" #: ../data/conduit.glade.h:7 msgid "Cancel currently synchronizing groups" msgstr "取消目前的同步群組" #: ../data/conduit.glade.h:8 #, fuzzy msgid "Clear Canvas" msgstr "全部清除" #: ../data/conduit.glade.h:9 msgid "Compare" msgstr "比較" #: ../data/conduit.glade.h:10 msgid "Conduit Preferences" msgstr "Conduit 偏好設定" #: ../data/conduit.glade.h:11 msgid "Configuration" msgstr "組態" #: ../data/conduit.glade.h:12 msgid "Configure Item" msgstr "設定項目" #: ../data/conduit.glade.h:13 msgid "Configure the synchronization settings for this item" msgstr "設定這個項目的同步設定值" #: ../data/conduit.glade.h:14 msgid "Conflict Options" msgstr "衝突選項" #: ../data/conduit.glade.h:15 msgid "Conflicts" msgstr "衝突" #: ../data/conduit.glade.h:16 msgid "Contents" msgstr "內容" #: ../data/conduit.glade.h:17 msgid "Data Conversions" msgstr "資料轉換" #: ../data/conduit.glade.h:18 msgid "Data Providers" msgstr "資料提供者" #: ../data/conduit.glade.h:19 msgid "Delete Group" msgstr "刪除群組" #: ../data/conduit.glade.h:20 msgid "Delete Item" msgstr "刪除項目" #: ../data/conduit.glade.h:21 msgid "Delete Options" msgstr "刪除選項" #: ../data/conduit.glade.h:22 #, fuzzy msgid "Delete from the corresponding sink" msgstr "從 {0} 版刪除舊資料?" #: ../data/conduit.glade.h:23 msgid "Delete the Corresponding Item" msgstr "刪除對等的項目" #: ../data/conduit.glade.h:24 msgid "Editor" msgstr "編輯" #: ../data/conduit.glade.h:25 msgid "Minimize to notification area" msgstr "最小化至通知區域" #: ../data/conduit.glade.h:26 msgid "Refresh Group" msgstr "重新整理群組" #: ../data/conduit.glade.h:27 msgid "Refresh Item" msgstr "重新整理項目" #: ../data/conduit.glade.h:28 msgid "Replace the Older Item" msgstr "取代較舊的項目" #: ../data/conduit.glade.h:29 msgid "Replace the older item" msgstr "取代較舊的項目" #: ../data/conduit.glade.h:30 msgid "Resolve Conflicts" msgstr "解決衝突" #: ../data/conduit.glade.h:31 msgid "Save settings on exit" msgstr "離開時儲存設定值" #: ../data/conduit.glade.h:32 msgid "Show Hints" msgstr "顯示提示" #: ../data/conduit.glade.h:33 msgid "Show status icon" msgstr "顯示狀態圖示" #: ../data/conduit.glade.h:34 msgid "Skip" msgstr "略過" #: ../data/conduit.glade.h:35 msgid "Slow Sync" msgstr "慢速同步" #: ../data/conduit.glade.h:36 msgid "Sync Options" msgstr "同步選項" #: ../data/conduit.glade.h:37 msgid "Synchronize All" msgstr "同步全部" #: ../data/conduit.glade.h:38 msgid "Synchronize Group" msgstr "同步群組" #: ../data/conduit.glade.h:39 msgid "Synchronize group" msgstr "同步群組" #: ../data/conduit.glade.h:40 msgid "Synchronizes all groups" msgstr "同步所有的群組" #: ../data/conduit.glade.h:41 msgid "Title" msgstr "標題" #: ../data/conduit.glade.h:42 msgid "Two Way Sync" msgstr "雙向同步" #: ../data/conduit.glade.h:43 msgid "When an item has been deleted:" msgstr "當項目被刪除時:" #: ../data/conduit.glade.h:44 msgid "When an item is deleted..." msgstr "當項目被刪除時..." #: ../data/conduit.glade.h:45 msgid "When there is a conflict..." msgstr "當發生衝突時..." #: ../data/conduit.glade.h:46 msgid "When there is a two way conflict:" msgstr "當發生雙向衝突時:" #: ../data/conduit.glade.h:47 msgid "_Edit" msgstr "編輯(_E)" #: ../data/conduit.glade.h:48 msgid "_File" msgstr "檔案(_F)" #: ../data/conduit.glade.h:49 msgid "_Help" msgstr "求助(_H)" #: ../conduit/gtkui/Canvas.py:149 msgid "Drag a Data Provider here to continue" msgstr "將資料提供者拖放到這裡以繼續" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:91 msgid "Source" msgstr "來源" #: ../conduit/gtkui/ConflictResolver.py:105 msgid "Resolution" msgstr "解析度" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:110 msgid "Sink" msgstr "" #: ../conduit/gtkui/ConflictResolver.py:150 #: ../conduit/gtkui/ConflictResolver.py:151 #, python-format msgid "Conflicts (%s)" msgstr "衝突 (%s)" #. Build some liststores to display #: ../conduit/gtkui/UI.py:281 msgid "Convert from" msgstr "轉換自" #: ../conduit/gtkui/UI.py:282 msgid "into" msgstr "到" #: ../conduit/gtkui/UI.py:333 msgid "Relationship Database" msgstr "關係資料庫" #: ../conduit/gtkui/UI.py:337 msgid "Conversions Available" msgstr "可用的轉換" #: ../conduit/gtkui/UI.py:343 #: ../conduit/gtkui/Tree.py:348 #: ../conduit/modules/FileModule/FileConfiguration.py:105 msgid "Name" msgstr "名稱" #: ../conduit/gtkui/UI.py:347 #, fuzzy msgid "Loaded" msgstr "負載:" #: ../conduit/gtkui/UI.py:459 #: ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "同步化尚在進行中。您是否要取消它?" #: ../conduit/gtkui/UI.py:625 msgid "_Synchronize All" msgstr "同步全部(_S)" #: ../conduit/gtkui/UI.py:625 msgid "Synchronizes All Groups" msgstr "同步所有的群組" #: ../conduit/gtkui/UI.py:626 msgid "_Cancel Synchronization" msgstr "取消同步化(_C)" #: ../conduit/gtkui/UI.py:626 msgid "Cancels Currently Synchronizing Groups" msgstr "取消目前正在同步的群組" #: ../conduit/gtkui/UI.py:627 msgid "_Quit" msgstr "離開(_Q)" #: ../conduit/gtkui/UI.py:627 msgid "Close Conduit" msgstr "關閉 Conduit" #: ../conduit/gtkui/UI.py:667 msgid "Synchronization Error" msgstr "同步化錯誤" #: ../conduit/gtkui/UI.py:670 msgid "Synchronization Complete" msgstr "同步化完成" #: ../conduit/gtkui/UI.py:686 msgid "Synchronizing" msgstr "同步中" #: ../conduit/gtkui/Tree.py:357 msgid "Description" msgstr "描述" #: ../conduit/dataproviders/DataProvider.py:19 msgid "Ready" msgstr "就緒" #: ../conduit/dataproviders/DataProvider.py:20 msgid "New data to sync" msgstr "要同步的新資料" #: ../conduit/dataproviders/DataProvider.py:21 msgid "Refreshing..." msgstr "重新整理..." #: ../conduit/dataproviders/DataProvider.py:22 msgid "Refreshed OK" msgstr "重新整理完成" #: ../conduit/dataproviders/DataProvider.py:23 msgid "Error Refreshing" msgstr "重新整理發生錯誤" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Synchronizing..." msgstr "正在同步..." #: ../conduit/dataproviders/DataProvider.py:25 msgid "Synchronized OK" msgstr "同步完成" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Synchronizing" msgstr "同步發生錯誤" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronization Skipped" msgstr "同步化已略過" #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronization Cancelled" msgstr "同步化已取消" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Synchronization Conflict" msgstr "同步化有衝突" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Not Configured Correctly" msgstr "沒有正確的設定" #: ../conduit/modules/BackpackModule/BackpackModule.py:56 msgid "Backpack Notes" msgstr "Backpack Notes" #: ../conduit/modules/BackpackModule/BackpackModule.py:57 msgid "Store things in Backpack Notes" msgstr "在 Backpack Notes 中儲存東西" #: ../conduit/modules/BackpackModule/config.glade.h:1 #: ../conduit/modules/FlickrModule/config.glade.h:1 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:1 #: ../conduit/modules/GoogleModule/documents-config.glade.h:1 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:1 #: ../conduit/modules/GoogleModule/youtube-config.glade.h:1 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:1 #: ../conduit/modules/SmugMugModule/config.glade.h:1 #: ../conduit/modules/ZotoModule/zoto.glade.h:1 msgid "Account Details" msgstr "帳號詳細資料" #: ../conduit/modules/BackpackModule/config.glade.h:2 msgid "Saved Note Settings" msgstr "儲存的筆記設定值" #: ../conduit/modules/BackpackModule/config.glade.h:3 msgid "API key:" msgstr "API 鍵值:" #: ../conduit/modules/BackpackModule/config.glade.h:4 msgid "Backpack" msgstr "Backpack" #: ../conduit/modules/BackpackModule/config.glade.h:5 msgid "Save notes in page:" msgstr "將筆記儲存於頁面:" #: ../conduit/modules/BackpackModule/config.glade.h:6 #: ../conduit/modules/FlickrModule/config.glade.h:8 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:8 #: ../conduit/modules/GoogleModule/youtube-config.glade.h:9 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:6 #: ../conduit/modules/SmugMugModule/config.glade.h:7 #: ../conduit/modules/ZotoModule/zoto.glade.h:5 msgid "Username:" msgstr "使用者名稱:" #: ../conduit/modules/BansheeModule/BansheeModule.py:33 msgid "Banshee Playlists" msgstr "Banshee 播放清單" #: ../conduit/modules/BansheeModule/BansheeModule.py:34 msgid "Sync your Banshee playlists" msgstr "同步您的 Banshee 播放清單" #. column 1 is the tag name #: ../conduit/modules/BansheeModule/BansheeModule.py:141 #: ../conduit/modules/FspotModule/FspotModule.py:246 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:132 msgid "Tag Name" msgstr "標籤名稱" #: ../conduit/modules/BansheeModule/BansheeModule.py:149 #: ../conduit/modules/FspotModule/FspotModule.py:254 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:140 msgid "Enabled" msgstr "已啟用" #: ../conduit/modules/BansheeModule/config.glade.h:1 msgid "Return Playlists" msgstr "返回播放清單" #: ../conduit/modules/BansheeModule/config.glade.h:2 msgid "Banshee" msgstr "Banshee" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 #: ../conduit/modules/BoxDotNetModule/config.glade.h:1 msgid "Box.net" msgstr "Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 msgid "Sync your Box.net files" msgstr "同步您的 Box.net 檔案" #: ../conduit/modules/BoxDotNetModule/config.glade.h:2 msgid "Folder:" msgstr "資料夾:" #: ../conduit/modules/BoxDotNetModule/config.glade.h:3 #: ../conduit/modules/FacebookModule/config.glade.h:3 #: ../conduit/modules/FlickrModule/config.glade.h:4 msgid "Load" msgstr "載入" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:108 #, python-format msgid "Select %s:" msgstr "選擇 %s:" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:147 msgid "Evolution Contacts" msgstr "Evolution 連絡人" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:148 msgid "Sync your contacts" msgstr "同步您的連絡人" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:198 msgid "Evolution Calendar" msgstr "Evolution 行事曆" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:199 msgid "Sync your calendar" msgstr "同步您的行事曆" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:256 msgid "Evolution Tasks" msgstr "Evolution 工作" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:257 msgid "Sync your tasks" msgstr "同步您的工作" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:313 msgid "Evolution Memos" msgstr "Evolution 備忘錄" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:314 msgid "Sync your memos" msgstr "同步您的備忘錄" #: ../conduit/modules/EvolutionModule/config.glade.h:1 msgid "Addressbook:" msgstr "通訊錄:" #: ../conduit/modules/EvolutionModule/config.glade.h:2 msgid "Evolution" msgstr "Evolution" #: ../conduit/modules/FacebookModule/FacebookModule.py:37 #: ../conduit/modules/FacebookModule/config.glade.h:2 msgid "Facebook" msgstr "Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 msgid "Sync your Facebook photos" msgstr "同步您的 Facebook 相片" #: ../conduit/modules/FacebookModule/config.glade.h:1 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:3 #: ../conduit/modules/iPodModule/config.glade.h:2 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:3 #: ../conduit/modules/SmugMugModule/config.glade.h:3 #: ../conduit/modules/ZotoModule/zoto.glade.h:3 msgid "Album:" msgstr "專輯:" #: ../conduit/modules/FeedModule/FeedModule.py:57 #: ../conduit/modules/FeedModule/config.glade.h:9 msgid "RSS Feed" msgstr "RSS 餵送" #: ../conduit/modules/FeedModule/FeedModule.py:58 msgid "Sync data from RSS enclosures" msgstr "從 RSS enclosure(多媒體資料) 同步資料" #: ../conduit/modules/FeedModule/config.glade.h:1 msgid "Enclosure Settings" msgstr "Enclosure 設定值" #: ../conduit/modules/FeedModule/config.glade.h:2 msgid "Feed Details" msgstr "餵送詳細資料" #: ../conduit/modules/FeedModule/config.glade.h:3 msgid "Download Audio Files" msgstr "下載音樂檔案" #: ../conduit/modules/FeedModule/config.glade.h:4 msgid "Download Photos" msgstr "下載相片" #: ../conduit/modules/FeedModule/config.glade.h:5 msgid "Download Video Files" msgstr "下載影片檔案" #: ../conduit/modules/FeedModule/config.glade.h:6 msgid "Feed Address:" msgstr "餵送位址:" #: ../conduit/modules/FeedModule/config.glade.h:7 msgid "" "Limit the Number of\n" "Enclosures Downloaded to:" msgstr "" "限制要下載的\n" "Enclosur 數量:" #: ../conduit/modules/FileModule/FileConfiguration.py:99 msgid "Icon" msgstr "圖示" #: ../conduit/modules/FileModule/FileConfiguration.py:111 msgid "Items" msgstr "項目" #: ../conduit/modules/FileModule/FileConfiguration.py:137 #, python-format msgid "Contains %s files" msgstr "包含 %s 個檔案" #: ../conduit/modules/FileModule/FileConfiguration.py:228 msgid "Include file..." msgstr "包含檔案..." #: ../conduit/modules/FileModule/FileConfiguration.py:238 msgid "All files" msgstr "所有檔案" #: ../conduit/modules/FileModule/FileConfiguration.py:253 msgid "Include folder..." msgstr "包含資料夾..." #: ../conduit/modules/FileModule/FileConfiguration.py:298 msgid "Please Name All Folders" msgstr "請為所有的資料夾命名" #: ../conduit/modules/FileModule/FileConfiguration.py:299 msgid "All folders require a descriptive name. To name a folder simply click on it" msgstr "所有的資料夾都需要一個描述用的名稱。要為資料夾命名只需點選它即可。" #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "檔案" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "同步多個檔案的來源" #: ../conduit/modules/FileModule/FileModule.py:63 msgid "Folder" msgstr "資料夾" #: ../conduit/modules/FileModule/FileModule.py:64 msgid "Synchronize folders" msgstr "同步資料夾" #: ../conduit/modules/FileModule/config.glade.h:1 msgid "Items to Synchronize" msgstr "要同步的項目" #: ../conduit/modules/FileModule/config.glade.h:2 msgid "Add Directory" msgstr "加入目錄" #: ../conduit/modules/FileModule/config.glade.h:3 msgid "Add File" msgstr "加入檔案" #: ../conduit/modules/FileModule/config.glade.h:4 msgid "Advanced" msgstr "進階" #: ../conduit/modules/FileModule/config.glade.h:5 msgid "File Configuration" msgstr "檔案組態" #: ../conduit/modules/FileModule/config.glade.h:6 msgid "Folder Configuration" msgstr "資料夾組態" #: ../conduit/modules/FileModule/config.glade.h:7 msgid "Folder Location:" msgstr "資料夾位置:" #: ../conduit/modules/FileModule/config.glade.h:8 msgid "Follow Symbolic Links" msgstr "隨著符號連結" #: ../conduit/modules/FileModule/config.glade.h:9 msgid "Ignore File Modification Times" msgstr "忽略檔案修改時刻" #: ../conduit/modules/FileModule/config.glade.h:10 msgid "Include Hidden Files" msgstr "包含隱藏檔案" #: ../conduit/modules/FileModule/config.glade.h:11 msgid "Select A Folder" msgstr "選擇資料夾" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 #: ../conduit/modules/FlickrModule/config.glade.h:3 msgid "Flickr" msgstr "Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 msgid "Sync your Flickr.com photos" msgstr "同步您的 Flickr.com 相片" #: ../conduit/modules/FlickrModule/config.glade.h:2 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:2 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:2 #: ../conduit/modules/SmugMugModule/config.glade.h:2 #: ../conduit/modules/ZotoModule/zoto.glade.h:2 msgid "Saved Photo Settings" msgstr "儲存的相片設定值" #: ../conduit/modules/FlickrModule/config.glade.h:5 msgid "Photos are public" msgstr "相片是公開的" #: ../conduit/modules/FlickrModule/config.glade.h:6 msgid "Photoset Name:" msgstr "相片集名稱:" #: ../conduit/modules/FlickrModule/config.glade.h:7 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:7 #: ../conduit/modules/SmugMugModule/config.glade.h:5 msgid "Resize Photos:" msgstr "重設相片大小:" #: ../conduit/modules/FspotModule/FspotModule.py:25 #: ../conduit/modules/FspotModule/config.glade.h:3 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 msgid "Sync your F-Spot photos" msgstr "同步您的 F-Spot 相片" #: ../conduit/modules/FspotModule/FspotModule.py:127 msgid "F-Spot DBus interface is operating in read only mode" msgstr "F-Spot DBus 介面正以唯讀模式運行" #: ../conduit/modules/FspotModule/config.glade.h:1 msgid "Return Photos Tagged With" msgstr "回傳相片標籤於" #: ../conduit/modules/FspotModule/config.glade.h:2 msgid "Create Tags: " msgstr "建立標籤:" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "GConf Settings" msgstr "GConf 設定值" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Sync your desktop preferences" msgstr "同步您的桌面偏好設定" #: ../conduit/modules/GoogleModule/GoogleModule.py:369 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:4 msgid "Google Calendar" msgstr "Google 日曆" #: ../conduit/modules/GoogleModule/GoogleModule.py:370 msgid "Sync your Google Calendar" msgstr "同步您的 Google 日曆" #: ../conduit/modules/GoogleModule/GoogleModule.py:555 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:6 msgid "Picasa" msgstr "Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:556 msgid "Sync your Google Picasa photos" msgstr "同步您的 Google Picasa 相片" #: ../conduit/modules/GoogleModule/GoogleModule.py:803 msgid "Google Contacts" msgstr "Google 連絡人" #: ../conduit/modules/GoogleModule/GoogleModule.py:804 msgid "Sync your Gmail contacts" msgstr "同步您的 Gmail 連絡人" #: ../conduit/modules/GoogleModule/GoogleModule.py:1060 #: ../conduit/modules/GoogleModule/documents-config.glade.h:5 msgid "Google Documents" msgstr "Google 文件" #: ../conduit/modules/GoogleModule/GoogleModule.py:1061 msgid "Sync your Google Documents" msgstr "同步您的 Google 文件" #: ../conduit/modules/GoogleModule/GoogleModule.py:1338 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:60 msgid "Unknown" msgstr "不明" #: ../conduit/modules/GoogleModule/GoogleModule.py:1339 msgid "miscellaneous" msgstr "雜項" #: ../conduit/modules/GoogleModule/GoogleModule.py:1340 msgid "No description." msgstr "沒有描述。" #: ../conduit/modules/GoogleModule/GoogleModule.py:1349 msgid "YouTube" msgstr "YouTube" #: ../conduit/modules/GoogleModule/GoogleModule.py:1350 msgid "Sync data from YouTube" msgstr "同步 YouTube 的資料" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:2 msgid "Calendar:" msgstr "行事曆:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:3 #: ../conduit/modules/GoogleModule/documents-config.glade.h:4 msgid "Email:" msgstr "電子郵件:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:5 msgid "Load Calendars" msgstr "載入行事曆" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:6 #: ../conduit/modules/GoogleModule/documents-config.glade.h:6 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:5 #: ../conduit/modules/GoogleModule/youtube-config.glade.h:6 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:4 #: ../conduit/modules/SmugMugModule/config.glade.h:4 #: ../conduit/modules/ZotoModule/zoto.glade.h:4 msgid "Password:" msgstr "密碼:" #: ../conduit/modules/GoogleModule/documents-config.glade.h:2 msgid "Downloaded Document Format" msgstr "下載的文件格式" #: ../conduit/modules/GoogleModule/documents-config.glade.h:3 msgid "Documents" msgstr "文件" #: ../conduit/modules/GoogleModule/documents-config.glade.h:7 msgid "Presentations" msgstr "簡報" #: ../conduit/modules/GoogleModule/documents-config.glade.h:8 msgid "Spreadsheets" msgstr "試算表" #: ../conduit/modules/GoogleModule/picasa-config.glade.h:4 msgid "Login" msgstr "登入" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:2 msgid "Download Videos" msgstr "下載影片" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:3 msgid "Favorites of above user" msgstr "以上使用者的最愛" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:4 msgid "Max retrieved videos (0 is unlimited):" msgstr "最多取回影片數 (0 為不限制):" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:5 msgid "Most viewed" msgstr "最多人檢視的" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:7 msgid "Top rated" msgstr "熱門指數" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:8 msgid "Uploaded by above user" msgstr "由以上使用者上傳" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:10 msgid "YouTube Source" msgstr "YouTube 來源" #: ../conduit/modules/iPodModule/iPodModule.py:635 msgid "Encoding" msgstr "編碼" #: ../conduit/modules/iPodModule/iPodModule.py:744 msgid "Keep converted files" msgstr "保存轉換後的檔案" #: ../conduit/modules/iPodModule/config.glade.h:1 msgid "Encoding" msgstr "編碼" #: ../conduit/modules/iPodModule/config.glade.h:3 msgid "iPod Photos" msgstr "iPod 相片" #. Translators: Format string used to describe the acceptable formats the #. device accepts. The first arg is replaced with DEFAULT_FOLDER and the second #. arg is a comma seperated list of encodings #: ../conduit/modules/N800Module/N800Module.py:59 #, python-format msgid "%s Format (%s)" msgstr "%s 格式 (%s)" #. Signifies that a conversion should not take place #: ../conduit/modules/N800Module/N800Module.py:61 msgid "unchanged" msgstr "未變更" #: ../conduit/modules/N800Module/N800Module.py:123 msgid "N800 Files" msgstr "N800 檔案" #: ../conduit/modules/N800Module/N800Module.py:124 msgid "Synchronizes files/folders to a N800 device" msgstr "同步檔案/資料夾至 N800 裝置" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:129 msgid "Backups" msgstr "Backups" #: ../conduit/modules/N800Module/N800Module.py:144 msgid "N800 Music" msgstr "N800 音樂" #: ../conduit/modules/N800Module/N800Module.py:145 msgid "Synchronizes music to a N800 device" msgstr "同步音樂至 N800 裝置" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:151 msgid "Music" msgstr "音樂" #: ../conduit/modules/N800Module/N800Module.py:168 msgid "N800 Videos" msgstr "N800 影片" #: ../conduit/modules/N800Module/N800Module.py:169 msgid "Synchronizes video to a N800 device" msgstr "同步影片至 N800 裝置" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:175 msgid "Video" msgstr "Video" #: ../conduit/modules/N800Module/N800Module.py:192 msgid "N800 Photos" msgstr "N800 相片" #: ../conduit/modules/N800Module/N800Module.py:193 msgid "Synchronizes photo to a N800 device" msgstr "同步相片至 N800 裝置" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:199 msgid "Photo" msgstr "Photo" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "網路" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "啟用透過網路同步化" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:40 msgid "Rhythmbox Music" msgstr "Rhythmbox 音樂" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:41 msgid "Sync songs from your Rhythmbox playlists" msgstr "從您的 Rhythmbox 播放清單同步歌曲" #: ../conduit/modules/RhythmboxModule/config.glade.h:1 msgid "Synchronize the Following Playlists" msgstr "同步下列播放清單" #: ../conduit/modules/RhythmboxModule/config.glade.h:2 msgid "Rhythmbox Playlists" msgstr "Rhythmbox 播放清單" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:5 msgid "Shutterfly" msgstr "Shutterfly" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 msgid "Sync your Shutterfly photos" msgstr "同步您的 Shutterfly 相片" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "%Y-%m-%d %H:%M:%S" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 #: ../conduit/modules/SmugMugModule/config.glade.h:6 msgid "SmugMug" msgstr "SmugMug" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 msgid "Sync your SmugMug.com photos" msgstr "同步您的 SmugMug.com 相片" #: ../conduit/modules/ZotoModule/ZotoModule.py:154 #: ../conduit/modules/ZotoModule/zoto.glade.h:6 msgid "Zoto" msgstr "Zoto" #: ../conduit/modules/ZotoModule/ZotoModule.py:155 msgid "Sync your Zoto photos" msgstr "同步您的 Zoto 相片" conduit-0.3.17/po/fr.po0000644000175000017500000010632111321403566011561 00000000000000# French translation of conduit. # Copyright © 2007-2009 Free Software Foundation, Inc. # This file is distributed under the same license as the conduit package. # # Christian Iuga , 2007. # Claude Paroz , 2007-2009. # Robert-André Mauchin , 2007. # Stéphane Raimbault , 2008. # Bruno Brouard , 2009 # Laurent Coudeur , 2009. # msgid "" msgstr "" "Project-Id-Version: Conduit HEAD\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=conduit&component=documentation and translation\n" "POT-Creation-Date: 2009-08-28 17:45+0000\n" "PO-Revision-Date: 2009-09-04 22:38+0200\n" "Last-Translator: Bruno Brouard \n" "Language-Team: GNOME French Team \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../data/conduit.desktop.in.in.h:1 msgid "Conduit Synchronizer" msgstr "Synchronisation Conduit" #: ../data/conduit.desktop.in.in.h:2 msgid "Synchronization for GNOME" msgstr "Synchronisation pour GNOME" #: ../data/conduit.glade.h:1 msgid "Default Synchronization Options" msgstr "Options de synchronisation par défaut" #: ../data/conduit.glade.h:2 msgid "General" msgstr "Général" #: ../data/conduit.glade.h:3 msgid "Always Up-To-Date" msgstr "Toujours à jour" #: ../data/conduit.glade.h:4 msgid "Ask Me What to Do" msgstr "Me demander quoi faire" #: ../data/conduit.glade.h:5 msgid "Ask me what to do" msgstr "Me demander quoi faire" #: ../data/conduit.glade.h:6 msgid "Cancel Synchronization" msgstr "Annuler la synchronisation" #: ../data/conduit.glade.h:7 msgid "Cancel currently-synchronizing groups" msgstr "Annule les groupes actuellement en cours de synchronisation" #: ../data/conduit.glade.h:8 msgid "Clear Canvas" msgstr "Effacer le canevas" #: ../data/conduit.glade.h:9 msgid "Compare" msgstr "Comparer" #: ../data/conduit.glade.h:10 msgid "Conduit Preferences" msgstr "Préférences de Conduit" #: ../data/conduit.glade.h:11 msgid "Configuration" msgstr "Configuration" #: ../data/conduit.glade.h:12 msgid "Configure Item" msgstr "Configurer l'élément" #: ../data/conduit.glade.h:13 msgid "Configure the synchronization settings for this item" msgstr "Configure les paramètres de synchronisation de cet élément" #: ../data/conduit.glade.h:14 msgid "Conflict Options" msgstr "Options de conflits" #: ../data/conduit.glade.h:15 msgid "Conflicts" msgstr "Conflits" #: ../data/conduit.glade.h:16 msgid "Contents" msgstr "Contenu" #: ../data/conduit.glade.h:17 msgid "Data Conversions" msgstr "Conversions de données" #: ../data/conduit.glade.h:18 msgid "Data Providers" msgstr "Sources de données" #: ../data/conduit.glade.h:19 msgid "Delete Group" msgstr "Supprimer ce groupe" #: ../data/conduit.glade.h:20 msgid "Delete Item" msgstr "Supprimer l'élément" #: ../data/conduit.glade.h:21 msgid "Delete Options" msgstr "Options de suppression" #: ../data/conduit.glade.h:22 msgid "Delete from the corresponding sink" msgstr "Supprimer du collecteur correspondant" #: ../data/conduit.glade.h:23 msgid "Delete the Corresponding Item" msgstr "Supprimer l'élément correspondant" #: ../data/conduit.glade.h:24 msgid "Editor" msgstr "Éditeur" #: ../data/conduit.glade.h:25 msgid "Minimize to notification area" msgstr "Minimiser dans la zone de notification" #: ../data/conduit.glade.h:26 msgid "Refresh Group" msgstr "Actualiser le groupe" #: ../data/conduit.glade.h:27 msgid "Refresh Item" msgstr "Actualiser l'élément" #: ../data/conduit.glade.h:28 msgid "Replace the Older Item" msgstr "Remplacer l'élément le plus ancien" #: ../data/conduit.glade.h:29 msgid "Replace the older item" msgstr "Remplacer l'élément le plus ancien" #: ../data/conduit.glade.h:30 msgid "Resolve Conflicts" msgstr "Résoudre les conflits" #: ../data/conduit.glade.h:31 msgid "Save settings on exit" msgstr "Enregistrer les paramètres à la fermeture" #: ../data/conduit.glade.h:32 msgid "Show Hints" msgstr "Afficher les astuces" #: ../data/conduit.glade.h:33 msgid "Show status icon" msgstr "Afficher l'icône d'état" #: ../data/conduit.glade.h:34 msgid "Skip" msgstr "Ignorer" #: ../data/conduit.glade.h:35 msgid "Slow Synchronization" msgstr "Synchronisation lente" #: ../data/conduit.glade.h:36 msgid "Start Conduit at login" msgstr "Démarrer Conduit à la connexion" #: ../data/conduit.glade.h:37 msgid "Synchronization Options" msgstr "Options de synchronisation" #: ../data/conduit.glade.h:38 msgid "Synchronize All" msgstr "Tout synchroniser" #: ../data/conduit.glade.h:39 msgid "Synchronize Group" msgstr "Synchroniser ce groupe" #: ../data/conduit.glade.h:40 msgid "Synchronize group" msgstr "Synchroniser ce groupe" #: ../data/conduit.glade.h:41 msgid "Synchronizes all groups" msgstr "Synchronise tous les groupes" #: ../data/conduit.glade.h:42 msgid "Title" msgstr "Titre" #: ../data/conduit.glade.h:43 msgid "Two-Way Synchronization" msgstr "Synchronisation bidirectionnelle" #: ../data/conduit.glade.h:44 msgid "When an item has been deleted:" msgstr "Quand un objet a été supprimé :" #: ../data/conduit.glade.h:45 msgid "When an item is deleted..." msgstr "Quand un objet est supprimé..." #: ../data/conduit.glade.h:46 msgid "When there is a conflict..." msgstr "Quand il y a un conflit..." #: ../data/conduit.glade.h:47 msgid "When there is a two-way conflict:" msgstr "Quand il y a un conflit bidirectionnel :" #: ../data/conduit.glade.h:48 msgid "_Edit" msgstr "É_dition" #: ../data/conduit.glade.h:49 msgid "_File" msgstr "_Fichier" #: ../data/conduit.glade.h:50 msgid "_Help" msgstr "Aid_e" #: ../conduit/Knowledge.py:8 msgid "What Do You Want to Synchronize?" msgstr "Que souhaitez-vous synchroniser ?" #: ../conduit/Knowledge.py:9 msgid "Drag and Drop a Data Provider on the Canvas" msgstr "Faites glisser une source de données sur le canevas" #: ../conduit/Knowledge.py:11 msgid "Synchronization Group Created" msgstr "Groupe de synchronisation créé" #: ../conduit/Knowledge.py:12 msgid "Add Another Data Provider to the Group to Synchronize it" msgstr "Ajoutez une autre source de données à ce groupe pour le synchroniser" #: ../conduit/Knowledge.py:14 msgid "You Are Now Ready to Synchronize" msgstr "Vous êtes maintenant prêt à synchroniser" #: ../conduit/Knowledge.py:15 msgid "Right Click on Group for Options" msgstr "Cliquez avec le bouton droit sur les groupes pour afficher les options" #. source,sinc #comment #. twoway #: ../conduit/Knowledge.py:22 msgid "Synchronize Two Folders" msgstr "Synchroniser deux dossiers" #: ../conduit/Knowledge.py:24 msgid "Backup Folder to Box.net" msgstr "Sauvegarder le dossier sur box.net" #: ../conduit/Knowledge.py:26 msgid "Synchronize Tagged F-Spot Photos to Flickr" msgstr "Synchroniser vos photos F-Spot étiquetées vers Flicker" #: ../conduit/Main.py:59 msgid "Conduit is a synchronization application." msgstr "Conduit est une application de synchronisation." #: ../conduit/Main.py:63 #, python-format msgid "Launch without GUI. [default: %default]" msgstr "Lancer sans interface graphique. [par défaut : %default]" #: ../conduit/Main.py:67 #, python-format msgid "Save dataprovider configuration to FILE. [default: %default]" msgstr "" "Enregistrer la configuration du fournisseur de données dans un fichier. [par " "défaut : %default]" #: ../conduit/Main.py:71 #, python-format msgid "Iconify on startup. [default: %default]" msgstr "Réduire au lancement. [par défaut : %default]" #: ../conduit/Main.py:75 #, python-format msgid "Run with the specified UI. [default: %default]" msgstr "Lancer avec l'interface graphique spécifiée. [par défaut : %default]" #: ../conduit/Main.py:79 msgid "Only load modules in the named files. [default: load all modules]" msgstr "" "Ne charger que les modules dans les fichiers nommés. [par défaut : charger " "tous les modules]" #: ../conduit/Main.py:83 msgid "Do not load modules in the named files. [default: load all modules]" msgstr "" "Ne pas charger les modules dans les fichiers nommés. [par défaut : charger " "tous les modules]" #: ../conduit/Main.py:87 msgid "" "Explicitly set internal Conduit settings (keys) to the given values for this " "session. [default: do not set]" msgstr "" "Définir explicitement les paramètres internes (clés) de Conduit aux valeurs " "données pour cette session. [par défaut : ne pas définir]" #: ../conduit/Main.py:91 #, python-format msgid "" "Enable loading of unfinished or unsupported dataproviders. [default: %" "default]" msgstr "" "Permettre le chargement de fournisseurs de données non terminés ou non pris " "en charge. [par défaut : %default]" #: ../conduit/Main.py:95 #, python-format msgid "Generate more debugging information. [default: %default]" msgstr "Générer plus d'informations de débogage. [par défaut : %default]" #: ../conduit/Main.py:99 #, python-format msgid "Generate less debugging information. [default: %default]" msgstr "Générer moins d'informations de débogage. [par défaut : %default]" #: ../conduit/Main.py:103 #, python-format msgid "Generate no debugging information. [default: %default]" msgstr "Ne pas générer d'informations de débogage. [par défaut : %default]" #: ../conduit/dataproviders/DataProvider.py:22 msgid "Ready" msgstr "Prêt" #: ../conduit/dataproviders/DataProvider.py:23 msgid "New data to sync" msgstr "Nouvelles données à synchroniser" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Refreshing..." msgstr "Actualisation..." #: ../conduit/dataproviders/DataProvider.py:25 msgid "Refreshed OK" msgstr "Actualisation terminée" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Refreshing" msgstr "Erreur lors de l'actualisation" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronizing..." msgstr "Synchronisation..." #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronized OK" msgstr "Synchronisation effectuée" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Error Synchronizing" msgstr "Erreur lors de la synchronisation" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Synchronization Skipped" msgstr "Synchronisation omise" #: ../conduit/dataproviders/DataProvider.py:31 msgid "Synchronization Cancelled" msgstr "Synchronisation annulée" #: ../conduit/dataproviders/DataProvider.py:32 msgid "Synchronization Conflict" msgstr "Conflit de synchronisation" #: ../conduit/dataproviders/DataProvider.py:33 msgid "Not Configured" msgstr "Non configuré" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "640x480" msgstr "640x480" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "800x600" msgstr "800x600" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "1024x768" msgstr "1024x768" #. Signifies that a conversion should not take place #: ../conduit/dataproviders/Image.py:35 #: ../conduit/modules/N800Module/N800Module.py:57 msgid "None" msgstr "Aucun" #. Default Categories for the DataProviders #: ../conduit/dataproviders/__init__.py:6 msgid "Files and Folders" msgstr "Fichiers et dossiers" #: ../conduit/dataproviders/__init__.py:7 #: ../conduit/modules/iPodModule/iPodModule.py:179 msgid "Notes" msgstr "Notes" #: ../conduit/dataproviders/__init__.py:8 #: ../conduit/modules/iPodModule/iPodModule.py:367 msgid "Photos" msgstr "Photos" #: ../conduit/dataproviders/__init__.py:9 msgid "Office" msgstr "Bureau" #: ../conduit/dataproviders/__init__.py:10 msgid "Settings" msgstr "Paramètres" #: ../conduit/dataproviders/__init__.py:11 msgid "Miscellaneous" msgstr "Divers" #: ../conduit/dataproviders/__init__.py:12 msgid "Media" msgstr "Médias" #: ../conduit/dataproviders/__init__.py:13 msgid "Bookmarks" msgstr "Signets" #: ../conduit/dataproviders/__init__.py:14 msgid "Test" msgstr "Test" #: ../conduit/gtkui/Canvas.py:152 msgid "Drag a Data Provider here to continue" msgstr "Déplacer une source de données ici pour poursuivre" #: ../conduit/gtkui/Canvas.py:217 msgid "Show me" msgstr "Montre-moi" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:91 msgid "Source" msgstr "Source" #: ../conduit/gtkui/ConflictResolver.py:105 msgid "Resolution" msgstr "Résolution" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:110 msgid "Sink" msgstr "Collecteur" #: ../conduit/gtkui/ConflictResolver.py:150 #: ../conduit/gtkui/ConflictResolver.py:151 #, python-format msgid "Conflicts (%s)" msgstr "Conflits (%s)" #. name, #url #: ../conduit/gtkui/UI.py:33 msgid "Introduction" msgstr "Introduction" #: ../conduit/gtkui/UI.py:34 msgid "Writing a Data Provider" msgstr "Écriture d'une source de données" #: ../conduit/gtkui/UI.py:35 msgid "API Documentation" msgstr "Documentation de l'API" #: ../conduit/gtkui/UI.py:36 msgid "Test Results" msgstr "Résultats de tests" #: ../conduit/gtkui/UI.py:129 #, python-format msgid " - %s (Development Version)" msgstr " - %s (version de développement)" #: ../conduit/gtkui/UI.py:131 msgid " - Running Uninstalled" msgstr " - exécution sans installation" #: ../conduit/gtkui/UI.py:165 msgid "Examples" msgstr "Exemples" #: ../conduit/gtkui/UI.py:177 msgid "Developers" msgstr "Développeurs" #. Build some liststores to display #: ../conduit/gtkui/UI.py:318 msgid "Convert from" msgstr "Convertir depuis" #: ../conduit/gtkui/UI.py:319 msgid "into" msgstr "en" #: ../conduit/gtkui/UI.py:370 msgid "Relationship Database" msgstr "Base de données des relations" #: ../conduit/gtkui/UI.py:374 msgid "Conversions Available" msgstr "Conversions disponibles" #: ../conduit/gtkui/UI.py:380 ../conduit/gtkui/Tree.py:348 #: ../conduit/modules/FileModule/FileConfiguration.py:117 msgid "Name" msgstr "Nom" #: ../conduit/gtkui/UI.py:384 msgid "Loaded" msgstr "Chargé" #: ../conduit/gtkui/UI.py:512 ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "Synchronisation en cours. Voulez-vous l'annuler ?" #: ../conduit/gtkui/UI.py:684 msgid "_Synchronize All" msgstr "_Tout synchroniser" #: ../conduit/gtkui/UI.py:684 msgid "Synchronizes All Groups" msgstr "Synchronise tous les groupes" #: ../conduit/gtkui/UI.py:685 msgid "_Cancel Synchronization" msgstr "_Annuler la synchronisation" #: ../conduit/gtkui/UI.py:685 msgid "Cancels Currently Synchronizing Groups" msgstr "Annule les groupes actuellement en cours de synchronisation" #: ../conduit/gtkui/UI.py:686 msgid "_Quit" msgstr "_Quitter" #: ../conduit/gtkui/UI.py:686 msgid "Close Conduit" msgstr "Ferme Conduit" #: ../conduit/gtkui/UI.py:726 msgid "Synchronization Error" msgstr "Erreur de synchronisation" #: ../conduit/gtkui/UI.py:729 msgid "Synchronization Complete" msgstr "Synchronisation terminée" #: ../conduit/gtkui/UI.py:745 msgid "Synchronizing" msgstr "Synchronisation en cours" #: ../conduit/gtkui/Tree.py:357 msgid "Description" msgstr "Description" #: ../conduit/gtkui/ConfigItems.py:729 #, python-format msgid "Total: %d" msgstr "Total : %d" #: ../conduit/gtkui/WindowConfigurator.py:14 msgid "Configure" msgstr "Configurer" # Fait réference à http://www.backpackit.com/ ? #: ../conduit/modules/BackpackModule/BackpackModule.py:58 msgid "Backpack Notes" msgstr "Notes Backpack" #: ../conduit/modules/BackpackModule/BackpackModule.py:59 msgid "Store things in Backpack Notes" msgstr "Stocker des choses dans les notes Backpack" #: ../conduit/modules/BackpackModule/BackpackModule.py:105 #: ../conduit/modules/FlickrModule/FlickrModule.py:307 #: ../conduit/modules/ZotoModule/ZotoModule.py:243 msgid "Account details" msgstr "Détails du compte" #: ../conduit/modules/BackpackModule/BackpackModule.py:106 msgid "Login" msgstr "Connexion" #: ../conduit/modules/BackpackModule/BackpackModule.py:109 msgid "API key" msgstr "Clé d'API" #: ../conduit/modules/BackpackModule/BackpackModule.py:112 msgid "Saved notes" msgstr "Notes enregistrées" #: ../conduit/modules/BackpackModule/BackpackModule.py:113 msgid "Save notes in page" msgstr "Enregistrer les notes dans la page" #: ../conduit/modules/BansheeModule/BansheeModule.py:52 msgid "Banshee Playlists" msgstr "Listes de lecture Banshee" #: ../conduit/modules/BansheeModule/BansheeModule.py:53 msgid "Synchronize your Banshee playlists" msgstr "Synchroniser vos listes de lecture Banshee" #: ../conduit/modules/BansheeModule/BansheeModule.py:187 #: ../conduit/modules/BansheeModule/BansheeModule.py:188 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:116 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:117 msgid "Playlists" msgstr "Listes de lecture" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 msgid "Box.net" msgstr "Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 msgid "Synchronize your Box.net files" msgstr "Synchroniser vos fichiers Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:290 #: ../conduit/modules/FileModule/FileModule.py:82 msgid "Folder" msgstr "Dossier" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:291 msgid "Folder name" msgstr "Nom du dossier" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:295 msgid "Load folders" msgstr "Charger les dossiers" #: ../conduit/modules/ConverterModule.py:91 msgid "Note-" msgstr "Note-" #: ../conduit/modules/DesktopWallpaperModule.py:38 msgid "Wallpaper" msgstr "Papier peint" #: ../conduit/modules/DesktopWallpaperModule.py:39 msgid "Changes your Desktop Wallpaper" msgstr "Change le papier peint de votre bureau" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:107 #, python-format msgid "Select %s" msgstr "Sélectionner %s" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:127 msgid "Evolution Contacts" msgstr "Contacts Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:128 msgid "Synchronize your contacts" msgstr "Synchroniser vos contacts" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:178 msgid "Evolution Calendar" msgstr "Calendrier Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:179 msgid "Synchronize your calendar" msgstr "Synchroniser votre agenda" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:240 msgid "Evolution Tasks" msgstr "Tâches Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:241 msgid "Synchronize your tasks" msgstr "Synchroniser vos tâches" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:297 msgid "Evolution Memos" msgstr "Mémos Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:298 msgid "Synchronize your memos" msgstr "Synchroniser vos mémos" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 msgid "Facebook" msgstr "Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:39 msgid "Synchronize your Facebook photos" msgstr "Synchroniser vos photos Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:124 #: ../conduit/modules/FlickrModule/FlickrModule.py:282 msgid "Loading album list..." msgstr "Chargement de la liste des albums..." #: ../conduit/modules/FacebookModule/FacebookModule.py:128 msgid "Failed to connect" msgstr "Échec de connexion" #: ../conduit/modules/FacebookModule/FacebookModule.py:131 msgid "Logged in" msgstr "Connecté" #: ../conduit/modules/FacebookModule/FacebookModule.py:133 msgid "Failed to login" msgstr "L'identification a échoué" #: ../conduit/modules/FacebookModule/FacebookModule.py:145 #: ../conduit/modules/FspotModule/FspotModule.py:243 msgid "Status" msgstr "État" #: ../conduit/modules/FacebookModule/FacebookModule.py:150 #: ../conduit/modules/iPodModule/iPodModule.py:461 #: ../conduit/modules/ZotoModule/ZotoModule.py:252 msgid "Album" msgstr "Album" #: ../conduit/modules/FacebookModule/FacebookModule.py:151 msgid "Album name" msgstr "Nom de l'album" #: ../conduit/modules/FacebookModule/FacebookModule.py:156 msgid "Load albums" msgstr "Charger des albums" #: ../conduit/modules/FeedModule/FeedModule.py:58 msgid "RSS Feed" msgstr "Flux RSS" #: ../conduit/modules/FeedModule/FeedModule.py:59 msgid "Synchronize data from RSS enclosures" msgstr "Synchroniser des données depuis un flux média RSS" #. FIXME: Add Randomize #: ../conduit/modules/FeedModule/FeedModule.py:114 msgid "Feed details" msgstr "Détails du flux" #: ../conduit/modules/FeedModule/FeedModule.py:115 msgid "Feed address" msgstr "Adresse du flux" #: ../conduit/modules/FeedModule/FeedModule.py:118 msgid "Enclosure settings" msgstr "Paramétrage des pièces jointes" #: ../conduit/modules/FeedModule/FeedModule.py:119 msgid "Limit downloaded enclosures" msgstr "Limiter les pièces jointes téléchargées" #: ../conduit/modules/FeedModule/FeedModule.py:125 msgid "Limit to" msgstr "Limiter à" #: ../conduit/modules/FeedModule/FeedModule.py:129 msgid "Randomize enclosures" msgstr "Pièces jointes aléatoires" #: ../conduit/modules/FeedModule/FeedModule.py:133 msgid "Download types" msgstr "Types de téléchargement" #: ../conduit/modules/FeedModule/FeedModule.py:134 msgid "Download audio files" msgstr "Télécharger des fichiers audio" #: ../conduit/modules/FeedModule/FeedModule.py:135 msgid "Download video files" msgstr "Télécharger des fichiers vidéo" #: ../conduit/modules/FeedModule/FeedModule.py:136 msgid "Download photo files" msgstr "Télécharger des photos" #: ../conduit/modules/FileModule/FileConfiguration.py:111 msgid "Icon" msgstr "Icône" #: ../conduit/modules/FileModule/FileConfiguration.py:123 #: ../conduit/modules/GConfModule/GConfModule.py:138 msgid "Items" msgstr "Éléments" #: ../conduit/modules/FileModule/FileConfiguration.py:149 #, python-format msgid "Contains %s files" msgstr "Contient %s fichiers" #: ../conduit/modules/FileModule/FileConfiguration.py:248 msgid "Include file..." msgstr "Inclure un fichier ..." #: ../conduit/modules/FileModule/FileConfiguration.py:258 msgid "All files" msgstr "Tous les fichiers" #: ../conduit/modules/FileModule/FileConfiguration.py:271 msgid "Include folder..." msgstr "Inclure un dossier..." #: ../conduit/modules/FileModule/FileConfiguration.py:314 msgid "Please Name All Folders" msgstr "Veuillez nommer tous les dossiers" #: ../conduit/modules/FileModule/FileConfiguration.py:315 msgid "" "All folders require a descriptive name. To name a folder simply click on it" msgstr "" "Tous les dossiers nécessitent un nom descriptif. Pour nommer un dossier, " "cliquez simplement dessus" #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "Fichiers" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "Source pour la synchronisation de multiples fichiers" #: ../conduit/modules/FileModule/FileModule.py:83 msgid "Synchronize folders" msgstr "Synchronisation de répertoires" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:40 msgid "Firefox 3 Bookmarks" msgstr "Marque-pages Firefox 3" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:41 msgid "Syncronize your Firefox 3 Bookmarks" msgstr "Synchroniser vos marque-pages Firefox 3" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:100 msgid "Firefox Profile" msgstr "Profil Firefox" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 msgid "Flickr" msgstr "Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 msgid "Synchronize your Flickr.com photos" msgstr "Synchroniser vos photos Flickr.com" #: ../conduit/modules/FlickrModule/FlickrModule.py:287 msgid "Failed to connect." msgstr "Échec de la connexion." #: ../conduit/modules/FlickrModule/FlickrModule.py:290 msgid "Album names loaded." msgstr "Noms des albums chargés." #: ../conduit/modules/FlickrModule/FlickrModule.py:292 msgid "Failed to login." msgstr "L'identification a échoué." #: ../conduit/modules/FlickrModule/FlickrModule.py:303 msgid "Logging in, please wait..." msgstr "Identification en cours, veuillez patienter..." #: ../conduit/modules/FlickrModule/FlickrModule.py:308 #: ../conduit/modules/GoogleBookmarksModule.py:67 #: ../conduit/modules/ZotoModule/ZotoModule.py:244 msgid "Username" msgstr "Identifiant" #: ../conduit/modules/FlickrModule/FlickrModule.py:318 msgid "Authenticate" msgstr "S'authentifier" #: ../conduit/modules/FlickrModule/FlickrModule.py:322 #: ../conduit/modules/ZotoModule/ZotoModule.py:251 msgid "Saved photo settings" msgstr "Paramètres des photos enregistrées" #: ../conduit/modules/FlickrModule/FlickrModule.py:327 msgid "Resize photos" msgstr "Redimensionner les photos" #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "Do not resize" msgstr "Ne pas redimmensioner" #: ../conduit/modules/FlickrModule/FlickrModule.py:331 msgid "Photos are public" msgstr "Les photos sont publiques" #: ../conduit/modules/FspotModule/FspotModule.py:25 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 msgid "Synchronize your F-Spot photos" msgstr "Synchroniser vos photos F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:152 msgid "F-Spot DBus interface is operating in read-only mode" msgstr "L'interface DBus de F-Spot fonctionne en mode lecture seule" #: ../conduit/modules/FspotModule/FspotModule.py:218 msgid "F-Spot is running" msgstr "F-Spot est lancé" #: ../conduit/modules/FspotModule/FspotModule.py:219 msgid "Please start F-Spot or activate the D-Bus Extension" msgstr "Veuillez démarrer F-Spot ou activez l'extension D-Bus" #: ../conduit/modules/FspotModule/FspotModule.py:244 msgid "Start F-Spot" msgstr "Démarrer F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:248 #: ../conduit/modules/FspotModule/FspotModule.py:249 msgid "Tags" msgstr "Étiquettes" #: ../conduit/modules/FspotModule/FspotModule.py:262 msgid "Add tags" msgstr "Ajouter les étiquettes" #: ../conduit/modules/FspotModule/FspotModule.py:263 msgid "Tag name" msgstr "Nom de l'étiquette" #: ../conduit/modules/FspotModule/FspotModule.py:266 msgid "Add tag" msgstr "Ajouter une étiquette" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "Application Settings" msgstr "Paramètres d'application" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Synchronize your application settings" msgstr "Synchroniser vos paramètres d'application" #: ../conduit/modules/GConfModule/GConfModule.py:31 msgid "Metacity" msgstr "Metacity" #: ../conduit/modules/GConfModule/GConfModule.py:32 msgid "Nautilus" msgstr "Nautilus" #: ../conduit/modules/GConfModule/GConfModule.py:33 msgid "Preferred Applications" msgstr "Applications préférées" #: ../conduit/modules/GConfModule/GConfModule.py:34 msgid "Desktop Interface" msgstr "Interface de bureau" #: ../conduit/modules/GConfModule/GConfModule.py:35 msgid "Gnome Terminal" msgstr "Terminal GNOME" #: ../conduit/modules/GConfModule/GConfModule.py:137 msgid "Applications to Synchronize" msgstr "Applications à synchroniser" #: ../conduit/modules/GoogleBookmarksModule.py:19 msgid "Google Bookmarks" msgstr "Signets Google" #: ../conduit/modules/GoogleBookmarksModule.py:20 msgid "Sync your Google Bookmarks" msgstr "Synchroniser vos signets Google" #: ../conduit/modules/GoogleBookmarksModule.py:66 msgid "Login Details" msgstr "Informations d'identification" #: ../conduit/modules/GoogleBookmarksModule.py:70 #: ../conduit/modules/ZotoModule/ZotoModule.py:247 msgid "Password" msgstr "Mot de passe" #: ../conduit/modules/GoogleModule/GoogleModule.py:399 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:4 msgid "Google Calendar" msgstr "Calendrier Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:400 msgid "Synchronize your Google Calendar" msgstr "Synchroniser votre calendrier Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:582 msgid "Picasa" msgstr "Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:583 msgid "Synchronize your Google Picasa photos" msgstr "Synchroniser vos photos Google Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:745 msgid "Google Contacts" msgstr "Contacts Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:746 msgid "Synchronize your Google Mail contacts" msgstr "Synchroniser vos contacts Google Mail" #: ../conduit/modules/GoogleModule/GoogleModule.py:1076 msgid "Google Documents" msgstr "Documents Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:1077 msgid "Synchronize your Google Documents" msgstr "Synchroniser vos documents Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:1322 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:69 msgid "Unknown" msgstr "Inconnu" #: ../conduit/modules/GoogleModule/GoogleModule.py:1323 msgid "miscellaneous" msgstr "divers" #: ../conduit/modules/GoogleModule/GoogleModule.py:1324 msgid "No description." msgstr "Aucune description." #: ../conduit/modules/GoogleModule/GoogleModule.py:1333 msgid "YouTube" msgstr "YouTube" #: ../conduit/modules/GoogleModule/GoogleModule.py:1334 msgid "Synchronize data from YouTube" msgstr "Synchroniser des données de YouTube" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:1 msgid "Account Details" msgstr "Détails du compte" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:2 msgid "Calendar:" msgstr "Calendrier :" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:3 msgid "Email:" msgstr "Courriel :" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:5 msgid "Load Calendars" msgstr "Charger les calendriers" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:6 msgid "Password:" msgstr "Mot de passe :" #: ../conduit/modules/iPodModule/iPodModule.py:180 msgid "Synchronize your iPod notes" msgstr "Synchroniser vos notes iPod" #: ../conduit/modules/iPodModule/iPodModule.py:295 #: ../conduit/modules/SynceModule.py:311 msgid "Contacts" msgstr "Contacts" #: ../conduit/modules/iPodModule/iPodModule.py:296 msgid "Synchronize your iPod contacts" msgstr "Synchroniser vos contacts iPod" #: ../conduit/modules/iPodModule/iPodModule.py:331 #: ../conduit/modules/SynceModule.py:449 msgid "Calendar" msgstr "Calendrier" #: ../conduit/modules/iPodModule/iPodModule.py:332 msgid "Synchronize your iPod calendar" msgstr "Synchroniser votre agenda iPod" #: ../conduit/modules/iPodModule/iPodModule.py:368 msgid "Synchronize your iPod photos" msgstr "Synchroniser vos photos iPod" #: ../conduit/modules/iPodModule/iPodModule.py:465 msgid "Delete" msgstr "Supprimer" #: ../conduit/modules/iPodModule/iPodModule.py:695 #: ../conduit/modules/iPodModule/iPodModule.py:812 #: ../conduit/modules/N800Module/N800Module.py:77 msgid "Encoding" msgstr "Codage" #: ../conduit/modules/iPodModule/iPodModule.py:811 msgid "Conversion options" msgstr "Options de conversion" #: ../conduit/modules/iPodModule/iPodModule.py:816 msgid "Keep converted files" msgstr "Conserver les fichiers convertis" #: ../conduit/modules/iPodModule/iPodModule.py:846 msgid "iPod Music" msgstr "Musique iPod" #: ../conduit/modules/iPodModule/iPodModule.py:847 msgid "Synchronize your iPod music" msgstr "Synchroniser votre musique iPod" #: ../conduit/modules/iPodModule/iPodModule.py:882 msgid "iPod Video" msgstr "Vidéo iPod" #: ../conduit/modules/iPodModule/iPodModule.py:883 msgid "Synchronize your iPod videos" msgstr "Synchroniser vos vidéos iPod" #: ../conduit/modules/iPodModule/iPodModule.py:907 msgid "Movie" msgstr "Film" #: ../conduit/modules/iPodModule/iPodModule.py:908 msgid "Music Video" msgstr "Vidéo musicale" #: ../conduit/modules/iPodModule/iPodModule.py:909 msgid "TV Show" msgstr "Émission de télévision" #: ../conduit/modules/iPodModule/iPodModule.py:911 msgid "Video kind" msgstr "Type de vidéo" #. Translators: Translate this in derived classes. #: ../conduit/modules/N800Module/N800Module.py:55 msgid "Conduit" msgstr "Conduit" #: ../conduit/modules/N800Module/N800Module.py:105 msgid "N800 Files" msgstr "Fichiers N800" #: ../conduit/modules/N800Module/N800Module.py:106 msgid "Synchronizes files/folders to a N800 device" msgstr "Synchronise vos fichiers/dossiers avec un appareil N800" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:111 msgid "Backups" msgstr "Sauvegardes" #: ../conduit/modules/N800Module/N800Module.py:126 msgid "N800 Music" msgstr "Musique N800" #: ../conduit/modules/N800Module/N800Module.py:127 msgid "Synchronizes music to a N800 device" msgstr "Synchronise votre musique avec un appareil N800" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:133 msgid "Music" msgstr "Musique" #: ../conduit/modules/N800Module/N800Module.py:150 msgid "N800 Videos" msgstr "Vidéos N800" #: ../conduit/modules/N800Module/N800Module.py:151 msgid "Synchronizes video to a N800 device" msgstr "Synchronise vos vidéos avec un appareil N800" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:157 msgid "Video" msgstr "Vidéo" #: ../conduit/modules/N800Module/N800Module.py:174 msgid "N800 Photos" msgstr "Photos N800" #: ../conduit/modules/N800Module/N800Module.py:175 msgid "Synchronizes photos to an N800 device" msgstr "Synchronise vos photos avec un appareil N800" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:181 msgid "Photo" msgstr "Photo" #: ../conduit/modules/NautilusBookmarksModule.py:19 msgid "Nautilus Bookmarks" msgstr "Signets Nautilus" #: ../conduit/modules/NautilusBookmarksModule.py:20 msgid "Sync your Nautilus Bookmarks" msgstr "Synchroniser vos signets Nautilus" #: ../conduit/modules/NautilusBookmarksModule.py:145 msgid "Sync bookmarks to local places/files" msgstr "Synchroniser vos signets vers des emplacements/fichiers locaux" #: ../conduit/modules/NautilusBookmarksModule.py:148 msgid "Sync bookmarks to remote places/files" msgstr "Synchroniser vos signets vers des emplacements/fichiers distants" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "Réseau" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "Activer la synchronisation via le réseau" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:44 msgid "Rhythmbox Music" msgstr "Musique Rhythmbox" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:45 msgid "Synchronize songs from your Rhythmbox playlists" msgstr "Synchroniser les morceaux de vos listes de lecture Rhythmbox" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 msgid "Shutterfly" msgstr "Shutterfly" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 msgid "Synchronize your Shutterfly photos" msgstr "Synchroniser vos photos Shutterfly" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "%d/%m/%Y %H:%M:%S" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 msgid "SmugMug" msgstr "SmugMug" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 msgid "Synchronize your SmugMug.com photos" msgstr "Synchroniser vos photos SmugMug.com" #: ../conduit/modules/SynceModule.py:139 msgid "Create Partnership" msgstr "Créer un partenariat" #: ../conduit/modules/SynceModule.py:312 msgid "Windows Mobile Contacts" msgstr "Contacts Windows Mobile" #: ../conduit/modules/SynceModule.py:450 msgid "Windows Mobile Calendar" msgstr "Calendrier Windows Mobile" #: ../conduit/modules/SynceModule.py:459 msgid "Tasks" msgstr "Tâches" #: ../conduit/modules/SynceModule.py:460 msgid "Windows Mobile Tasks" msgstr "Tâches Windows Mobile" #: ../conduit/modules/ZotoModule/ZotoModule.py:154 msgid "Zoto" msgstr "Zoto" #: ../conduit/modules/ZotoModule/ZotoModule.py:155 msgid "Synchronize your Zoto photos" msgstr "Synchroniser vos photos Zoto" conduit-0.3.17/po/ca.po0000644000175000017500000007326711321403566011551 00000000000000# Catalan translations for conduit package # Traduccions al català del paquet «conduit». # Copyright (C) 2008 The Free Software Foundation, Inc. # This file is distributed under the same license as the conduit package. # David Planella , 2008, 2009. # msgid "" msgstr "" "Project-Id-Version: conduit\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-06-14 11:23+0200\n" "PO-Revision-Date: 2009-06-14 11:27+0200\n" "Last-Translator: David Planella \n" "Language-Team: Catalan \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../data/conduit.desktop.in.in.h:1 msgid "Conduit Synchronizer" msgstr "Sincronitzador Conduit" #: ../data/conduit.desktop.in.in.h:2 msgid "Synchronization for GNOME" msgstr "Sincronització per al GNOME" #: ../data/conduit.glade.h:1 msgid "Default Synchronization Options" msgstr "Opcions de sincronització predeterminades" #: ../data/conduit.glade.h:2 msgid "General" msgstr "General" #: ../data/conduit.glade.h:3 msgid "Always Up-To-Date" msgstr "Sempre actualitzat" #: ../data/conduit.glade.h:4 msgid "Ask Me What to Do" msgstr "Demana'm què vull fer" #: ../data/conduit.glade.h:5 msgid "Ask me what to do" msgstr "Demana'm què vull fer" #: ../data/conduit.glade.h:6 msgid "Cancel Synchronization" msgstr "Cancel·la la sincronització" #: ../data/conduit.glade.h:7 msgid "Cancel currently-synchronizing groups" msgstr "Cancel·la els grups en sincronització" #: ../data/conduit.glade.h:8 msgid "Clear Canvas" msgstr "Neteja el llenç" #: ../data/conduit.glade.h:9 msgid "Compare" msgstr "Compara" #: ../data/conduit.glade.h:10 msgid "Conduit Preferences" msgstr "Preferències del Conduit" #: ../data/conduit.glade.h:11 msgid "Configuration" msgstr "Configuració" #: ../data/conduit.glade.h:12 msgid "Configure Item" msgstr "Configura l'element" #: ../data/conduit.glade.h:13 msgid "Configure the synchronization settings for this item" msgstr "Configura els paràmetres de sincronització per a aquest element" #: ../data/conduit.glade.h:14 msgid "Conflict Options" msgstr "Opcions de conflicte" #: ../data/conduit.glade.h:15 msgid "Conflicts" msgstr "Conflictes" #: ../data/conduit.glade.h:16 msgid "Contents" msgstr "Continguts" #: ../data/conduit.glade.h:17 msgid "Data Conversions" msgstr "Conversions de dades" #: ../data/conduit.glade.h:18 msgid "Data Providers" msgstr "Proveïdors de dades" #: ../data/conduit.glade.h:19 msgid "Delete Group" msgstr "Suprimeix el grup" #: ../data/conduit.glade.h:20 msgid "Delete Item" msgstr "Suprimeix l'element" #: ../data/conduit.glade.h:21 msgid "Delete Options" msgstr "Opcions de supressió" #: ../data/conduit.glade.h:22 msgid "Delete from the corresponding sink" msgstr "Suprimeix de la destinació corresponent" #: ../data/conduit.glade.h:23 msgid "Delete the Corresponding Item" msgstr "Suprimeix l'element corresponent" #: ../data/conduit.glade.h:24 msgid "Editor" msgstr "Editor" #: ../data/conduit.glade.h:25 msgid "Minimize to notification area" msgstr "Minimitza a l'àrea de notificació" #: ../data/conduit.glade.h:26 msgid "Refresh Group" msgstr "Refresca el grup" #: ../data/conduit.glade.h:27 msgid "Refresh Item" msgstr "Refresca l'element" #: ../data/conduit.glade.h:28 msgid "Replace the Older Item" msgstr "Reemplaça l'element antic" #: ../data/conduit.glade.h:29 msgid "Replace the older item" msgstr "Reemplaça l'element antic" #: ../data/conduit.glade.h:30 msgid "Resolve Conflicts" msgstr "Resol els conflictes" #: ../data/conduit.glade.h:31 msgid "Save settings on exit" msgstr "Desa la configuració en sortir" #: ../data/conduit.glade.h:32 msgid "Show Hints" msgstr "Mostra els indicadors de funció" #: ../data/conduit.glade.h:33 msgid "Show status icon" msgstr "Mostra la icona d'estat" #: ../data/conduit.glade.h:34 msgid "Skip" msgstr "Omet" #: ../data/conduit.glade.h:35 msgid "Slow Synchronization" msgstr "Sincronització lenta" #: ../data/conduit.glade.h:36 msgid "Start Conduit at login" msgstr "Inicia el Conduit en entrar" #: ../data/conduit.glade.h:37 msgid "Synchronization Options" msgstr "Opcions de sincronització" #: ../data/conduit.glade.h:38 msgid "Synchronize All" msgstr "Sincronitza-ho tot" #: ../data/conduit.glade.h:39 msgid "Synchronize Group" msgstr "Sincronitza el grup" #: ../data/conduit.glade.h:40 msgid "Synchronize group" msgstr "Sincronitza el grup" #: ../data/conduit.glade.h:41 msgid "Synchronizes all groups" msgstr "Sincronitza tots els grups" #: ../data/conduit.glade.h:42 msgid "Title" msgstr "Títol" #: ../data/conduit.glade.h:43 msgid "Two-Way Synchronization" msgstr "Sincronització a dues bandes" #: ../data/conduit.glade.h:44 msgid "When an item has been deleted:" msgstr "Quan s'hagi suprimit un element:" #: ../data/conduit.glade.h:45 msgid "When an item is deleted..." msgstr "Quan s'hagi suprimit un element..." #: ../data/conduit.glade.h:46 msgid "When there is a conflict..." msgstr "Quan hi hagi un conflicte..." #: ../data/conduit.glade.h:47 msgid "When there is a two-way conflict:" msgstr "Quan hi hagi un conflicte a dues bandes:" #: ../data/conduit.glade.h:48 msgid "_Edit" msgstr "_Edita" #: ../data/conduit.glade.h:49 msgid "_File" msgstr "_Fitxer" #: ../data/conduit.glade.h:50 msgid "_Help" msgstr "A_juda" #: ../conduit/gtkui/Canvas.py:152 msgid "Drag a Data Provider here to continue" msgstr "Arrossegueu un proveïdor de dades cap aquí per a continuar" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:91 msgid "Source" msgstr "Font" #: ../conduit/gtkui/ConflictResolver.py:105 msgid "Resolution" msgstr "Resolució" # FIXME: «pica» no seria correcte aquí. Es refereix al concepte # de «source-sink», que aproximadament seria «productor-consumidor» # en català. «Source» es pot traduir fàcilment com a «font», però # «sink» traduït com a «pica» queda molt forçat. Per tant, en aquest # fitxer he utilitzat «font-destinació». Tot i que els termes traduïts # no són directament complementaris i utilitzar «productor-consumidor» # seria més conseqüent, trobo que «font» és més apropiat per a l'ús # que se'n fa en aquest programa. Aquesta és la justificació per haver # utilitzat una combinació dels dos termes que no és potser la més # òptima, però de totes maneres correcta. Qualsevol altre suggeriment # serà benvingut (dpm). Vegeu el fil la discussió a: # http://llistes.softcatala.org/pipermail/gnome/2008-January/001633.html #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:110 msgid "Sink" msgstr "Destinació" #: ../conduit/gtkui/ConflictResolver.py:150 #: ../conduit/gtkui/ConflictResolver.py:151 #, python-format msgid "Conflicts (%s)" msgstr "Conflictes (%s)" #. Build some liststores to display #: ../conduit/gtkui/UI.py:321 msgid "Convert from" msgstr "Converteix de" #: ../conduit/gtkui/UI.py:322 msgid "into" msgstr "a" #: ../conduit/gtkui/UI.py:373 msgid "Relationship Database" msgstr "Base de dades relacional" #: ../conduit/gtkui/UI.py:377 msgid "Conversions Available" msgstr "Conversions disponibles" #: ../conduit/gtkui/UI.py:383 ../conduit/gtkui/Tree.py:348 #: ../conduit/modules/FileModule/FileConfiguration.py:117 msgid "Name" msgstr "Nom" #: ../conduit/gtkui/UI.py:387 msgid "Loaded" msgstr "Carregat" #: ../conduit/gtkui/UI.py:515 ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "Sincronització en progrés. Voleu cancel·lar-la?" #: ../conduit/gtkui/UI.py:681 msgid "_Synchronize All" msgstr "Sincronitza-ho _tot" #: ../conduit/gtkui/UI.py:681 msgid "Synchronizes All Groups" msgstr "Sincronitza tots els grups" #: ../conduit/gtkui/UI.py:682 msgid "_Cancel Synchronization" msgstr "_Cancel·la la sincronització" #: ../conduit/gtkui/UI.py:682 msgid "Cancels Currently Synchronizing Groups" msgstr "Cancel·la els grups que s'estiguin sincronitzant actualment" #: ../conduit/gtkui/UI.py:683 msgid "_Quit" msgstr "_Surt" #: ../conduit/gtkui/UI.py:683 msgid "Close Conduit" msgstr "Tanca el Conduit" #: ../conduit/gtkui/UI.py:723 msgid "Synchronization Error" msgstr "Error de sincronització" #: ../conduit/gtkui/UI.py:726 msgid "Synchronization Complete" msgstr "S'ha completat la sincronització" #: ../conduit/gtkui/UI.py:742 msgid "Synchronizing" msgstr "S'està sincronitzant" #: ../conduit/gtkui/Tree.py:357 msgid "Description" msgstr "Descripció" #: ../conduit/gtkui/ConfigItems.py:729 #, python-format msgid "Total: %d" msgstr "Total: %d" #: ../conduit/gtkui/WindowConfigurator.py:14 #, fuzzy msgid "Configure" msgstr "Configura l'element" #: ../conduit/dataproviders/DataProvider.py:20 msgid "Ready" msgstr "A punt" #: ../conduit/dataproviders/DataProvider.py:21 msgid "New data to sync" msgstr "Dades noves a sincronitzar" #: ../conduit/dataproviders/DataProvider.py:22 msgid "Refreshing..." msgstr "S'està refrescant..." #: ../conduit/dataproviders/DataProvider.py:23 msgid "Refreshed OK" msgstr "S'ha refrescat correctament" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Error Refreshing" msgstr "S'ha produït un error en sincronitzar" #: ../conduit/dataproviders/DataProvider.py:25 msgid "Synchronizing..." msgstr "S'està sincronitzant..." #: ../conduit/dataproviders/DataProvider.py:26 msgid "Synchronized OK" msgstr "S'ha sincronitzat correctament" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Error Synchronizing" msgstr "S'ha produït un error en sincronitzar" #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronization Skipped" msgstr "S'ha omès la sincronització" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Synchronization Cancelled" msgstr "S'ha cancel·lat la sincronització" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Synchronization Conflict" msgstr "Conflicte de sincronització" #: ../conduit/dataproviders/DataProvider.py:31 msgid "Not Configured" msgstr "Sense configurar" #: ../conduit/modules/BackpackModule/BackpackModule.py:58 msgid "Backpack Notes" msgstr "Anotacions del Backpack" #: ../conduit/modules/BackpackModule/BackpackModule.py:59 msgid "Store things in Backpack Notes" msgstr "Emmagatzema coses en anotacions del Backpack" #: ../conduit/modules/BansheeModule/BansheeModule.py:52 msgid "Banshee Playlists" msgstr "Llistes de reproducció del Banshee" #: ../conduit/modules/BansheeModule/BansheeModule.py:53 msgid "Synchronize your Banshee playlists" msgstr "Sincronitzeu les vostres llistes de reproducció del Banshee" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 msgid "Box.net" msgstr "Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 msgid "Synchronize your Box.net files" msgstr "Sincronitzeu els vostres fitxers del Box.net" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:127 msgid "Evolution Contacts" msgstr "Contactes de l'Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:128 msgid "Synchronize your contacts" msgstr "Sincronitzeu els vostres contactes" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:178 msgid "Evolution Calendar" msgstr "Calendari de l'Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:179 msgid "Synchronize your calendar" msgstr "Sincronitzeu el vostre calendari" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:240 msgid "Evolution Tasks" msgstr "Tasques de l'Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:241 msgid "Synchronize your tasks" msgstr "Sincronitzeu les vostres tasques" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:297 msgid "Evolution Memos" msgstr "Anotacions de l'Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:298 msgid "Synchronize your memos" msgstr "Sincronitzeu les vostres anotacions" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 msgid "Facebook" msgstr "Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:39 msgid "Synchronize your Facebook photos" msgstr "Sincronitzeu les vostres fotos del Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:124 #: ../conduit/modules/FlickrModule/FlickrModule.py:282 msgid "Loading album list..." msgstr "" #: ../conduit/modules/FacebookModule/FacebookModule.py:128 msgid "Failed to connect" msgstr "" #: ../conduit/modules/FacebookModule/FacebookModule.py:131 #, fuzzy msgid "Logged in" msgstr "Entrada" #: ../conduit/modules/FacebookModule/FacebookModule.py:133 msgid "Failed to login" msgstr "" #: ../conduit/modules/FeedModule/FeedModule.py:58 msgid "RSS Feed" msgstr "Canal RSS" #: ../conduit/modules/FeedModule/FeedModule.py:59 msgid "Synchronize data from RSS enclosures" msgstr "Sincronitzeu dades de contenidors RSS" #: ../conduit/modules/FileModule/FileConfiguration.py:111 msgid "Icon" msgstr "Icona" #: ../conduit/modules/FileModule/FileConfiguration.py:123 msgid "Items" msgstr "Elements" #: ../conduit/modules/FileModule/FileConfiguration.py:149 #, python-format msgid "Contains %s files" msgstr "Conté %s fitxers" #: ../conduit/modules/FileModule/FileConfiguration.py:247 msgid "Include file..." msgstr "Inclou un fitxer..." #: ../conduit/modules/FileModule/FileConfiguration.py:257 msgid "All files" msgstr "Tots els fitxers" #: ../conduit/modules/FileModule/FileConfiguration.py:272 msgid "Include folder..." msgstr "Inclou una carpeta..." #: ../conduit/modules/FileModule/FileConfiguration.py:317 msgid "Please Name All Folders" msgstr "Hauríeu d'anomenar totes les carpetes" #: ../conduit/modules/FileModule/FileConfiguration.py:318 msgid "" "All folders require a descriptive name. To name a folder simply click on it" msgstr "" "Totes les carpetes han de tenir un nom que les descrigui. Feu clic en una " "carpeta per a donar-li un nom" #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "Fitxers" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "Font per a sincronitzar múltiples fitxers" #: ../conduit/modules/FileModule/FileModule.py:96 msgid "Folder" msgstr "Carpeta" #: ../conduit/modules/FileModule/FileModule.py:97 msgid "Synchronize folders" msgstr "Sincronitza carpetes" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:26 msgid "Firefox 3 Bookmarks" msgstr "" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:27 #, fuzzy msgid "Syncronize your Firefox 3 Bookmarks" msgstr "Sincronitzeu les vostres fotos del Flickr.com" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:87 msgid "Firefox Profile" msgstr "Perfil del Firefox" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 msgid "Flickr" msgstr "Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 msgid "Synchronize your Flickr.com photos" msgstr "Sincronitzeu les vostres fotos del Flickr.com" #: ../conduit/modules/FlickrModule/FlickrModule.py:287 msgid "Failed to connect." msgstr "" #: ../conduit/modules/FlickrModule/FlickrModule.py:290 #, fuzzy msgid "Album names loaded." msgstr "Nom de l'àlbum" #: ../conduit/modules/FlickrModule/FlickrModule.py:292 msgid "Failed to login." msgstr "" #: ../conduit/modules/FlickrModule/FlickrModule.py:303 msgid "Logging in, please wait..." msgstr "" #: ../conduit/modules/FlickrModule/FlickrModule.py:307 #, fuzzy msgid "Account details" msgstr "Detalls del compte" #: ../conduit/modules/FlickrModule/FlickrModule.py:318 msgid "Authenticate" msgstr "" #: ../conduit/modules/FlickrModule/FlickrModule.py:322 #, fuzzy msgid "Saved photo settings" msgstr "Paràmetres desats de les fotos" #: ../conduit/modules/FlickrModule/FlickrModule.py:327 #, fuzzy msgid "Resize photos" msgstr "Canvi de mida de les fotos:" #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "Do not resize" msgstr "" #: ../conduit/modules/FlickrModule/FlickrModule.py:331 msgid "Photos are public" msgstr "Les fotos són públiques" #: ../conduit/modules/FspotModule/FspotModule.py:25 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 msgid "Synchronize your F-Spot photos" msgstr "Sincronitzeu les vostres fotos de l'F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:152 msgid "F-Spot DBus interface is operating in read-only mode" msgstr "" "La interfície DBus de l'F-Spot està funcionant en mode de només lectura" #: ../conduit/modules/FspotModule/FspotModule.py:218 msgid "F-Spot is running" msgstr "" #: ../conduit/modules/FspotModule/FspotModule.py:219 msgid "Please start F-Spot or activate the D-Bus Extension" msgstr "" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "Application Settings" msgstr "Paràmetres de les aplicacions" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Synchronize your application settings" msgstr "Sincronitzeu els vostres paràmetres de les aplicacions" #: ../conduit/modules/GConfModule/GConfModule.py:137 #, fuzzy msgid "Applications to Synchronize" msgstr "Sincronitzador Conduit" #: ../conduit/modules/GoogleModule/GoogleModule.py:399 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:4 msgid "Google Calendar" msgstr "Calendari del Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:400 msgid "Synchronize your Google Calendar" msgstr "Sincronitzeu el vostre calendari del Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:582 msgid "Picasa" msgstr "Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:583 msgid "Synchronize your Google Picasa photos" msgstr "Sincronitzeu les vostres fotos del Google Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:745 msgid "Google Contacts" msgstr "Contactes del Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:746 msgid "Synchronize your Google Mail contacts" msgstr "Sincronitzeu els vostres contactes del Google Mail" #: ../conduit/modules/GoogleModule/GoogleModule.py:1076 msgid "Google Documents" msgstr "Documents del Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:1077 msgid "Synchronize your Google Documents" msgstr "Sincronitzeu els vostres documents del Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:1322 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:69 msgid "Unknown" msgstr "Desconegut" #: ../conduit/modules/GoogleModule/GoogleModule.py:1323 msgid "miscellaneous" msgstr "miscel·lània" #: ../conduit/modules/GoogleModule/GoogleModule.py:1324 msgid "No description." msgstr "Sense descripció." #: ../conduit/modules/GoogleModule/GoogleModule.py:1333 msgid "YouTube" msgstr "YouTube" #: ../conduit/modules/GoogleModule/GoogleModule.py:1334 msgid "Synchronize data from YouTube" msgstr "Sincronitzeu les dades del YouTube" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:1 msgid "Account Details" msgstr "Detalls del compte" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:2 msgid "Calendar:" msgstr "Calendari:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:3 msgid "Email:" msgstr "Correu electrònic:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:5 msgid "Load Calendars" msgstr "Carrega els calendaris" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:6 msgid "Password:" msgstr "Contrasenya:" #: ../conduit/modules/iPodModule/iPodModule.py:695 #: ../conduit/modules/N800Module/N800Module.py:77 msgid "Encoding" msgstr "Codificació" #. Translators: Translate this in derived classes. #: ../conduit/modules/N800Module/N800Module.py:55 msgid "Conduit" msgstr "Conduit" #. Signifies that a conversion should not take place #: ../conduit/modules/N800Module/N800Module.py:57 msgid "None" msgstr "" #: ../conduit/modules/N800Module/N800Module.py:105 msgid "N800 Files" msgstr "Fitxers de l'N800" #: ../conduit/modules/N800Module/N800Module.py:106 msgid "Synchronizes files/folders to a N800 device" msgstr "Sincronitza fitxers/arxius amb un dispositiu N800" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:111 msgid "Backups" msgstr "Còpies de seguretat" #: ../conduit/modules/N800Module/N800Module.py:126 msgid "N800 Music" msgstr "Música de l'N800" #: ../conduit/modules/N800Module/N800Module.py:127 msgid "Synchronizes music to a N800 device" msgstr "Sincronitza música amb un dispositiu N800" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:133 msgid "Music" msgstr "Música" #: ../conduit/modules/N800Module/N800Module.py:150 msgid "N800 Videos" msgstr "Vídeos de l'N800" #: ../conduit/modules/N800Module/N800Module.py:151 msgid "Synchronizes video to a N800 device" msgstr "Sincronitza vídeos amb un dispositiu N800" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:157 msgid "Video" msgstr "Vídeo" #: ../conduit/modules/N800Module/N800Module.py:174 msgid "N800 Photos" msgstr "Fotos de l'N800" #: ../conduit/modules/N800Module/N800Module.py:175 msgid "Synchronizes photos to an N800 device" msgstr "Sincroniteu les fotos amb un dispositiu N800" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:181 msgid "Photo" msgstr "Foto" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "Xarxa" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "Habilita la sincronització a través de la xarxa" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:44 msgid "Rhythmbox Music" msgstr "Música del Rhythmbox" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:45 msgid "Synchronize songs from your Rhythmbox playlists" msgstr "" "Sincronitzeu cançons de les vostres llistes de reproducció del Rhythmbox" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 msgid "Shutterfly" msgstr "Shutterfly" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 msgid "Synchronize your Shutterfly photos" msgstr "Sincronitzeu les vostres fotos del Shutterfly" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "%d-%m-%Y %H:%M:%S" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 msgid "SmugMug" msgstr "SmugMug" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 msgid "Synchronize your SmugMug.com photos" msgstr "Sincronitzeu les vostres fotos de l'SmugMug.com" #: ../conduit/modules/ZotoModule/ZotoModule.py:154 msgid "Zoto" msgstr "Zoto" #: ../conduit/modules/ZotoModule/ZotoModule.py:155 msgid "Synchronize your Zoto photos" msgstr "Sincronitzeu les vostres fotos del Zoto" #~ msgid "Saved Note Settings" #~ msgstr "Paràmetres desats de les anotacions" #~ msgid "API key:" #~ msgstr "Clau de l'API:" #~ msgid "Backpack" #~ msgstr "Backpack" #~ msgid "Save notes in page:" #~ msgstr "Desa les anotacions a la pàgina:" #~ msgid "Username:" #~ msgstr "Nom d'usuari" #~ msgid "Playlist Name" #~ msgstr "Nom de la llista de reproducció" #~ msgid "Enabled" #~ msgstr "Habilitat" #~ msgid "Return Playlists" #~ msgstr "Recupera llistes de reproducció" #~ msgid "Banshee" #~ msgstr "Banshee" #~ msgid "Folder:" #~ msgstr "Carpeta:" #~ msgid "Load" #~ msgstr "Carrega" #~ msgid "Select %s:" #~ msgstr "Seleccioneu %s:" #~ msgid "Addressbook:" #~ msgstr "Llibreta d'adreces:" #~ msgid "Evolution" #~ msgstr "Evolution" #~ msgid "Album:" #~ msgstr "Àlbum:" #~ msgid "Enclosure Settings" #~ msgstr "Paràmetres del contenidor" #~ msgid "Feed Details" #~ msgstr "Detalls del canal" #~ msgid "Download Audio Files" #~ msgstr "Baixa els fitxers d'àudio" #~ msgid "Download Photos" #~ msgstr "Baixa les fotos" #~ msgid "Download Video Files" #~ msgstr "Baixa els fitxers de vídeo" #~ msgid "Feed Address:" #~ msgstr "Adreça del canal:" #~ msgid "" #~ "Limit the Number of\n" #~ "Enclosures Downloaded to:" #~ msgstr "" #~ "Limita el nombre de\n" #~ "contenidors a baixar a:" #~ msgid "Randomize Enclosures" #~ msgstr "Contenidors a l'atzar" #~ msgid "Items to Synchronize" #~ msgstr "Elements a sincronitzar" #~ msgid "Add Directory" #~ msgstr "Afegeix un directori" #~ msgid "Add File" #~ msgstr "Afegeix un fitxer" #~ msgid "Advanced" #~ msgstr "Avançat" #~ msgid "File Configuration" #~ msgstr "Configuració del fitxer" #~ msgid "Folder Configuration" #~ msgstr "Configuració de la carpeta" #~ msgid "Folder Location:" #~ msgstr "Ubicació de la carpeta:" #~ msgid "Follow Symbolic Links" #~ msgstr "Segueix els enllaços simbòlics" #~ msgid "Ignore File Modification Times" #~ msgstr "Ignora les dates de modificació dels fitxers" #~ msgid "Include Hidden Files" #~ msgstr "Inclou els fitxers ocults" #~ msgid "Select A Folder" #~ msgstr "Seleccioneu un fitxer" #~ msgid "Photoset Name:" #~ msgstr "Nom del conjunt de fotos:" #~ msgid "Tag Name" #~ msgstr "Nom de l'etiqueta" #~ msgid "Return Photos Tagged With" #~ msgstr "Recupera les fotos etiquetades amb" #~ msgid "Create Tags: " #~ msgstr "Creació d'etiquetes: " #~ msgid "Downloaded Document Format" #~ msgstr "Format del document baixat" #~ msgid "Documents" #~ msgstr "Documents" #~ msgid "Presentations" #~ msgstr "Presentacions" #~ msgid "Spreadsheets" #~ msgstr "Fulls de càlcul" #~ msgid "Download Videos" #~ msgstr "Baixa els vídeos" #~ msgid "Favorites of above user" #~ msgstr "Preferits de l'usuari de sobre" #~ msgid "Max retrieved videos (0 is unlimited):" #~ msgstr "Nombre màxim de vídeos recollits (0 vol dir sense límit):" #~ msgid "Most viewed" #~ msgstr "Els més vistos" #~ msgid "Top rated" #~ msgstr "Els més ben puntuats" #~ msgid "Uploaded by above user" #~ msgstr "Pujats per l'usuari de sobre" #~ msgid "YouTube Source" #~ msgstr "Font del YouTube" #~ msgid "Keep converted files" #~ msgstr "Conserva els fitxers convertits" #~ msgid "Encoding" #~ msgstr "Codificació" #~ msgid "iPod Photos" #~ msgstr "Fotos de l'iPod" #~ msgid "%s Format (%s)" #~ msgstr "Format de %s (%s)" #~ msgid "unchanged" #~ msgstr "sense canvis" #~ msgid "Synchronize the Following Playlists" #~ msgstr "Sincronitza les llistes de reproducció següents" #~ msgid "Rhythmbox Playlists" #~ msgstr "Llistes de reproducció del Rhythmbox" #~ msgid "Firefox" #~ msgstr "Firefox" #~ msgid "Synchronize your desktop preferences" #~ msgstr "Sincronitzeu les vostres preferències de l'escriptori" #~ msgid "Slow Sync" #~ msgstr "Sincronització lenta" #~ msgid "Sync Options" #~ msgstr "Opcions de sincronització" #~ msgid "Two Way Sync" #~ msgstr "Sincronització bidireccional" #~ msgid "Use Built in Web Browser" #~ msgstr "Utilitza el navegador web integrat" #~ msgid "_Synchronize" #~ msgstr "_Sincronitza" #~ msgid "Synchronize all dataproviders" #~ msgstr "Sincronitza tots els proveïdors de dades" #~ msgid "_About" #~ msgstr "_Quant a" #~ msgid "About Conduit" #~ msgstr "Quant al Conduit" #~ msgid "Please Enter a Folder Name" #~ msgstr "Introduïu un nom de carpeta" #~ msgid "" #~ "All folders require a descriptive name. To name a folder enter its name " #~ "where indicated" #~ msgstr "" #~ "Totes les carpetes han de tenir un nom que les descrigui. Per a donar un " #~ "nom a una carpeta, introduïu aquest on se us indiqui" #~ msgid "Folder Name:" #~ msgstr "Nom de la carpeta:" #~ msgid "F-Spot Photos" #~ msgstr "Fotos de l'F-Spot" #~ msgid "Gmail Emails" #~ msgstr "Correus del GMail" #~ msgid "Sync your emails" #~ msgstr "Sincronitzeu els vostres correus" #~ msgid "Return Emails Matching" #~ msgstr "Recupera els correus que concordin amb" #~ msgid "When Saving Emails" #~ msgstr "En desar els correus" #~ msgid "Add Label:" #~ msgstr "Afegeix l'etiqueta:" #~ msgid "All emails" #~ msgstr "Tots els correus" #~ msgid "Emails in folder:" #~ msgstr "Correus a la carpeta:" #~ msgid "Emails with label:" #~ msgstr "Correus amb l'etiqueta:" #~ msgid "Unread emails" #~ msgstr "Correus sense llegir" #~ msgid "By user" #~ msgstr "Per usuari" #~ msgid "User: " #~ msgstr "Usuari: " #~ msgid "Sync your Evolution contacts" #~ msgstr "Sincronitzeu els vostres contactes de l'Evolution" #~ msgid "Evolution Events" #~ msgstr "Esdeveniments de l'Evolution" #~ msgid "Sync your Evolution events" #~ msgstr "Sincronitzeu els vostres esdeveniments de l'Evolution" #~ msgid "Evolution Todo" #~ msgstr "Tasques de l'Evolution" #~ msgid "Sync your Evolution tasks" #~ msgstr "Sincronitzeu les vostres tasques de l'Evolution" #~ msgid "Picasa Desktop" #~ msgstr "Escriptori Picasa" #~ msgid "Sync your Picasa photos" #~ msgstr "Sincronitzeu les vostres fotos del Picasa" #~ msgid "Return Photos In The Following Albums" #~ msgstr "Recupera les fotos dels àlbums següents" #~ msgid "Windows Mobile Contacts" #~ msgstr "Contactes del Windows Mobile" #~ msgid "Sync your devices contacts" #~ msgstr "Sincronitzeu els contactes del vostre dispositiu" #~ msgid "Windows Mobile Events" #~ msgstr "Esdeveniments del Windows Mobile" #~ msgid "Sync your devices events" #~ msgstr "Sincronitzeu els esdeveniments del vostre dispositiu" #~ msgid "Windows Mobile Todo" #~ msgstr "Tasques del Windows Mobile" #~ msgid "Sync your devices tasks" #~ msgstr "Sincronitzeu les tasques del vostre dispositiu" #~ msgid "F-Spot DBus Photos" #~ msgstr "Fotos de l'F-Spot per DBus" #~ msgid "Sync your F-Spot photos over DBus" #~ msgstr "Sincronitzeu les vostres fotos de l'F-Spot a través del DBus" #~ msgid "Failed to get f-spot remote control interface" #~ msgstr "No s'ha pogut obtenir la interfície de control remot de l'F-Spot" #~ msgid "Email" #~ msgstr "Correu electrònic" #~ msgid "Login Details" #~ msgstr "Detalls de l'entrada" #~ msgid "Saved Email Settings" #~ msgstr "Paràmetres desats del correu" #~ msgid "Attach label to email" #~ msgstr "Afegeix una etiqueta al correu" #~ msgid "Gmail Sink Properties" #~ msgstr "Propietats de la destinació Gmail" #~ msgid "Password: " #~ msgstr "Contrasenya: " #~ msgid "Save with label:" #~ msgstr "Desa amb l'etiqueta:" #~ msgid "Username: " #~ msgstr "Nom de l'usuari: " conduit-0.3.17/po/pa.po0000644000175000017500000007630611172176633011571 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: Conduit\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-06-05 12:16+0000\n" "PO-Revision-Date: 2008-06-06 06:47+0530\n" "Last-Translator: Amanpreet Singh Alam \n" "Language-Team: Punjabi Open Source Team \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Panjabi\n" "X-Poedit-Country: INDIA\n" "X-Poedit-SourceCharset: utf-8\n" #: ../data/conduit.desktop.in.in.h:1 #: ../data/conduit-autostart.desktop.in.in.h:2 msgid "Conduit Synchronizer" msgstr "ਕੰਡੁਟ ਸੈਕਰੋਨਾਈਜ਼ਰ" #: ../data/conduit.desktop.in.in.h:2 #: ../data/conduit-autostart.desktop.in.in.h:3 msgid "Synchronization for GNOME" msgstr "ਗਨੋਮ ਲਈ ਸੈਕਰੋਨਾਈਜ਼ੇਸ਼ਨ" #. Translators: Translate this in derived classes. #: ../data/conduit-autostart.desktop.in.in.h:1 #: ../conduit/modules/N800Module/N800Module.py:54 msgid "Conduit" msgstr "ਕੰਡੁਟ" #: ../data/conduit.glade.h:1 msgid "Default Synchronization Options" msgstr "ਡਿਫਾਲਟ ਸੈਕਰੋਨਾਈਜ਼ਰ ਚੋਣਾਂ" #: ../data/conduit.glade.h:2 msgid "General" msgstr "ਆਮ" #: ../data/conduit.glade.h:3 msgid "Always Up To Date" msgstr "ਹਮੇਸ਼ਾ ਅੱਪ ਟੂ ਡੇਟ" #: ../data/conduit.glade.h:4 msgid "Ask Me What to Do" msgstr "ਮੈਨੂੰ ਪੁੱਛੋ ਕਿ ਕੀ ਕਰਨ ਹੈ" #: ../data/conduit.glade.h:5 msgid "Ask me what to do" msgstr "ਮੈਨੂੰ ਪੁੱਛੋ ਕਿ ਕੀ ਕਰਨਾ ਹੈ" #: ../data/conduit.glade.h:6 msgid "Cancel Synchronization" msgstr "ਸੈਕਰੋਨਾਈਜ਼ੇਸ਼ਨ ਰੱਦ ਕਰੋ" #: ../data/conduit.glade.h:7 msgid "Cancel currently synchronizing groups" msgstr "ਮੌਜੂਦਾ ਸੈਕਰੋਨਾਈਜ਼ਿੰਗ ਗਰੁੱਪ ਰੱਦ ਕਰੋ" #: ../data/conduit.glade.h:8 msgid "Clear Canvas" msgstr "ਕੈਨਵਸ ਸਾਫ਼ ਕਰੋ" #: ../data/conduit.glade.h:9 msgid "Compare" msgstr "ਤੁਲਨਾ" #: ../data/conduit.glade.h:10 msgid "Conduit Properties" msgstr "ਕੰਡੁਟ ਵਿਸ਼ੇਸ਼ਤਾ" #: ../data/conduit.glade.h:11 msgid "Configuration" msgstr "ਸੰਰਚਨਾ" #: ../data/conduit.glade.h:12 msgid "Configure Item" msgstr "ਆਈਟਮ ਸੰਰਚਨਾ" #: ../data/conduit.glade.h:13 msgid "Configure the synchronization settings for this item" msgstr "ਇਸ ਆਈਟਮ ਲਈ ਸੈਕਰੋਨਾਈਜ਼ੇਸ਼ਨ ਸੈਟਿੰਗ ਸੰਰਚਨਾ" #: ../data/conduit.glade.h:14 msgid "Conflict Options" msgstr "ਅਪਵਾਦ ਚੋਣ" #: ../data/conduit.glade.h:15 msgid "Conflicts" msgstr "ਅਪਵਾਦ" #: ../data/conduit.glade.h:16 msgid "Contents" msgstr "ਸਮੱਗਰੀ" #: ../data/conduit.glade.h:17 msgid "Data Conversions" msgstr "ਡਾਟਾ ਪਰਿਵਰਤਨ" #: ../data/conduit.glade.h:18 msgid "Data Providers" msgstr "ਡਾਟਾ ਪਰੋਵਾਇਡਰ" #: ../data/conduit.glade.h:19 msgid "Delete Group" msgstr "ਗਰੁੱਪ ਹਟਾਓ" #: ../data/conduit.glade.h:20 msgid "Delete Item" msgstr "ਆਈਟਮ ਹਟਾਓ" #: ../data/conduit.glade.h:21 msgid "Delete Options" msgstr "ਚੋਣਾਂ ਹਟਾਓ" #: ../data/conduit.glade.h:22 msgid "Delete from the corresponding sink" msgstr "ਸਬੰਧਿਤ ਸਿੰਕ ਤੋਂ ਹਟਾਓ" #: ../data/conduit.glade.h:23 msgid "Delete the Corresponding Item" msgstr "ਸਬੰਧਿਤ ਆਈਟਮ ਹਟਾਓ" #: ../data/conduit.glade.h:24 msgid "Editor" msgstr "ਐਡੀਟਰ" #: ../data/conduit.glade.h:25 msgid "Minimize to notification area" msgstr "ਨੋਟੀਫਿਕੇਸ਼ਨ ਏਰੀਏ ਵਿੱਚ ਭੇਜੋ" #: ../data/conduit.glade.h:26 msgid "Refresh Group" msgstr "ਗਰੁੱਪ ਤਾਜ਼ਾ ਕਰੋ" #: ../data/conduit.glade.h:27 msgid "Refresh Item" msgstr "ਆਈਟਮ ਤਾਜ਼ਾ ਕਰੋ" #: ../data/conduit.glade.h:28 msgid "Replace the Older Item" msgstr "ਪੁਰਾਣੀ ਆਈਟਮ ਬਦਲੋ" #: ../data/conduit.glade.h:29 msgid "Replace the older item" msgstr "ਪੁਰਾਣੀ ਆਈਟਮ ਬਦਲੋ" #: ../data/conduit.glade.h:30 msgid "Resolve Conflicts" msgstr "ਅਪਵਾਦ ਹੱਲ਼ ਕਰੋ" #: ../data/conduit.glade.h:31 msgid "Save settings on exit" msgstr "ਸੈਟਿੰਗ ਬੰਦ ਕਰਨ ਸਮੇਂ ਸੰਭਾਲੋ" #: ../data/conduit.glade.h:32 msgid "Show status icon" msgstr "ਹਾਲਤ ਆਈਕਾਨ ਵੇਖੋ" #: ../data/conduit.glade.h:33 msgid "Skip" msgstr "ਛੱਡੋ" #: ../data/conduit.glade.h:34 msgid "Slow Sync" msgstr "ਹੌਲੀ ਸੈਕਰੋ" #: ../data/conduit.glade.h:35 msgid "Sync Options" msgstr "ਸੈਕਰੋ ਚੋਣਾਂ" #: ../data/conduit.glade.h:36 msgid "Synchronize All" msgstr "ਸਭ ਸੈਕਰੋਨਾਈਜ਼" #: ../data/conduit.glade.h:37 msgid "Synchronize Group" msgstr "ਗਰੁੱਪ ਸੈਕਰੋਨਾਈਜ਼" #: ../data/conduit.glade.h:38 msgid "Synchronize group" msgstr "ਗਰੁੱਪ ਸੈਕਰੋਨਾਈਜ਼" #: ../data/conduit.glade.h:39 msgid "Synchronizes all groups" msgstr "ਸਭ ਗਰੁੱਪ ਸੈਕਰੋਨਾਈਜ਼" #: ../data/conduit.glade.h:40 msgid "Title" msgstr "ਟਾਈਟਲ" #: ../data/conduit.glade.h:41 msgid "Two Way Sync" msgstr "ਦੋ ਪਾਸੀ ਸੈਕਰੋ" #: ../data/conduit.glade.h:42 msgid "Use built in Web browser" msgstr "ਵਿੱਚੇ ਉਪਲੱਬਧ ਵੈੱਬ ਬਰਾਊਜ਼ਰ ਵਰਤੋਂ" #: ../data/conduit.glade.h:43 msgid "When an item has been deleted:" msgstr "ਜਦੋਂ ਇੱਕ ਆਈਟਮ ਹਟਾਈ ਜਾਵੇ:" #: ../data/conduit.glade.h:44 msgid "When an item is deleted..." msgstr "ਜਦੋਂ ਇੱਕ ਆਈਟਮ ਹਟਾਈ ਜਾਵੇ..." #: ../data/conduit.glade.h:45 msgid "When there is a conflict..." msgstr "ਜਦੋਂ ਇੱਕ ਅਪਵਾਦ ਹੋਵੇ ਤਾਂ..." #: ../data/conduit.glade.h:46 msgid "When there is a two way conflict:" msgstr "ਜਦੋਂ ਦੋ ਪਾਸੀ ਅਪਵਾਦ ਹੋਵੇ:" #: ../data/conduit.glade.h:47 msgid "_Edit" msgstr "ਸੋਧ(_E)" #: ../data/conduit.glade.h:48 msgid "_File" msgstr "ਫਾਇਲ(_F)" #: ../data/conduit.glade.h:49 msgid "_Help" msgstr "ਮੱਦਦ(_H)" #: ../conduit/gtkui/Canvas.py:65 msgid "Drag a Data Provider here to continue" msgstr "ਜਾਰੀ ਰੱਖਣ ਵਾਸਤੇ ਇੱਕ ਡਾਟਾ ਪਰੋਵਾਇਡਰ ਇੱਥੇ ਦਿਓ" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:82 msgid "Source" msgstr "ਸਰੋਤ" #: ../conduit/gtkui/ConflictResolver.py:96 msgid "Resolution" msgstr "ਹੱਲ਼" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:101 msgid "Sink" msgstr "ਸਿੰਕ" #: ../conduit/gtkui/ConflictResolver.py:165 #: ../conduit/gtkui/ConflictResolver.py:166 #, python-format msgid "Conflicts (%s)" msgstr "ਅਪਵਾਦ (%s)" #. Build some liststores to display #: ../conduit/gtkui/UI.py:235 msgid "Convert from" msgstr "ਇਸ ਤੋਂ ਬਦਲੋ" #: ../conduit/gtkui/UI.py:236 msgid "into" msgstr "ਇਸ ਵਿੱਚ" #: ../conduit/gtkui/UI.py:291 msgid "Conversions Available" msgstr "ਪਰਿਵਰਤਨ ਉਪਲੱਬਧ" #: ../conduit/gtkui/UI.py:297 #: ../conduit/gtkui/Tree.py:349 #: ../conduit/modules/FileModule/FileConfiguration.py:104 msgid "Name" msgstr "ਨਾਂ" #: ../conduit/gtkui/UI.py:301 msgid "Loaded" msgstr "ਲੋਡ ਕੀਤਾ" #: ../conduit/gtkui/UI.py:399 #: ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "ਸੈਕਰੋਨਾਈਜ਼ੇਸ਼ਨ ਜਾਰੀ ਹੈ। ਕੀ ਤੁਸੀਂ ਰੱਦ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?" #: ../conduit/gtkui/UI.py:556 msgid "_Synchronize All" msgstr "ਸਭ ਸੈਕਰੋਨਾਈਜ਼(_S)" #: ../conduit/gtkui/UI.py:556 msgid "Synchronizes All Groups" msgstr "ਸਭ ਗਰੁੱਪ ਸੈਕਰੋਨਾਈਜ਼" #: ../conduit/gtkui/UI.py:557 msgid "_Cancel Synchronization" msgstr "ਸੈਕਰੋਨਾਈਜ਼ੇਸ਼ਨ ਰੱਦ ਕਰੋ(_C)" #: ../conduit/gtkui/UI.py:557 msgid "Cancels Currently Synchronizing Groups" msgstr "ਮੌਜੂਦਾ ਸੈਕਰੋਨਾਈਜ਼ਿੰਗ ਗਰੁੱਪ ਰੱਦ ਕਰੋ" #: ../conduit/gtkui/UI.py:558 msgid "_Quit" msgstr "ਬੰਦ ਕਰੋ(_Q)" #: ../conduit/gtkui/UI.py:558 msgid "Close Conduit" msgstr "ਕੰਡੁਟ ਬੰਦ ਕਰੋ" #: ../conduit/gtkui/UI.py:559 msgid "_About" msgstr "ਇਸ ਬਾਰੇ(_A)" #: ../conduit/gtkui/UI.py:559 msgid "About Conduit" msgstr "ਕੰਡੁਟ ਬਾਰੇ" #: ../conduit/gtkui/UI.py:599 msgid "Synchronization Error" msgstr "ਸੈਕਰੋਨਾਈਜ਼ੇਸ਼ਨ ਗਲਤੀ" #: ../conduit/gtkui/UI.py:602 msgid "Synchronization Complete" msgstr "ਸੈਕਰੋਨਾਈਜ਼ੇਸ਼ਨ ਪੂਰੀ ਹੋਈ" #: ../conduit/gtkui/UI.py:618 msgid "Synchronizing" msgstr "ਸੈਕਰੋਨਾਈਜ਼ਿੰਗ" #: ../conduit/gtkui/Tree.py:358 msgid "Description" msgstr "ਵੇਰਵਾ" #: ../conduit/dataproviders/DataProvider.py:19 msgid "Ready" msgstr "ਤਿਆਰ" #: ../conduit/dataproviders/DataProvider.py:20 msgid "New data to sync" msgstr "ਸੈਕਰੋ ਲਈ ਨਵਾਂ ਡਾਟਾ" #: ../conduit/dataproviders/DataProvider.py:21 msgid "Refreshing..." msgstr "ਤਾਜ਼ਾ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..." #: ../conduit/dataproviders/DataProvider.py:22 msgid "Refreshed OK" msgstr "ਤਾਜ਼ਾ ਕੀਤਾ ਠੀਕ ਹੈ" #: ../conduit/dataproviders/DataProvider.py:23 msgid "Error Refreshing" msgstr "ਤਾਜ਼ਾ ਕਰਨ ਗਲਤੀ" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Synchronizing..." msgstr "ਸੈਕਰੋਨਾਈਜ਼ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..." #: ../conduit/dataproviders/DataProvider.py:25 msgid "Synchronized OK" msgstr "ਸੈਕਰੋਨਾਈਜ਼ ਠੀਕ ਹੈ" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Synchronizing" msgstr "ਸੈਕਰੋਨਾਈਜ਼ ਗਲਤੀ ਹੈ" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronization Skipped" msgstr "ਸੈਕਰੋਨਾਈਜ਼ੇਸ਼ਨ ਛੱਡੀ ਗਈ" #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronization Cancelled" msgstr "ਸੈਕਰੋਨਾਈਜ਼ੇਸ਼ਨ ਰੱਦ ਕੀਤੀ ਗਈ ਹੈ" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Synchronization Conflict" msgstr "ਸੈਕਰੋਨਾਈਜ਼ੇਸ਼ਨ ਅਪਵਾਦ" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Not Configured Correctly" msgstr "ਠੀਕ ਤਰ੍ਹਾਂ ਸੰਰਚਿਤ ਨਹੀਂ" #: ../conduit/modules/BackpackModule/BackpackModule.py:55 msgid "Backpack Notes" msgstr "ਬੈਕਪੈਕ ਨੋਟਿਸ" #: ../conduit/modules/BackpackModule/BackpackModule.py:56 msgid "Store things in Backpack Notes" msgstr "ਬੈਕਪੈਕ ਨੋਟਿਸ ਵਿੱਚ ਸਟੋਰ ਚੀਜ਼ਾਂ" #: ../conduit/modules/BackpackModule/config.glade.h:1 #: ../conduit/modules/FlickrModule/config.glade.h:1 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:1 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:1 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:1 #: ../conduit/modules/SmugMugModule/config.glade.h:1 #: ../conduit/modules/ZotoModule/zoto.glade.h:1 msgid "Account Details" msgstr "ਅਕਾਊਂਟ ਵੇਰਵਾ" #: ../conduit/modules/BackpackModule/config.glade.h:2 msgid "Saved Note Settings" msgstr "ਸੰਭਾਲੀਆਂ ਨੋਟ ਸੈਟਿੰਗਾਂ" #: ../conduit/modules/BackpackModule/config.glade.h:3 msgid "API key:" msgstr "API ਕੀ:" #: ../conduit/modules/BackpackModule/config.glade.h:4 msgid "Backpack" msgstr "ਬੈਕਪੈਕ" #: ../conduit/modules/BackpackModule/config.glade.h:5 msgid "Save notes in page:" msgstr "ਨੋਟਿਸ ਪੇਜ਼ ਵਿੱਚ ਸੰਭਾਲੋ:" #: ../conduit/modules/BackpackModule/config.glade.h:6 #: ../conduit/modules/FlickrModule/config.glade.h:8 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:8 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:6 #: ../conduit/modules/SmugMugModule/config.glade.h:7 #: ../conduit/modules/ZotoModule/zoto.glade.h:5 msgid "Username:" msgstr "ਯੂਜ਼ਰ-ਨਾਂ:" #: ../conduit/modules/BansheeModule/BansheeModule.py:30 msgid "Banshee Playlists" msgstr "ਬਾਂਸ਼ੀ ਪਲੇਅਲਿਸਟ" #: ../conduit/modules/BansheeModule/BansheeModule.py:31 msgid "Sync your Banshee playlists" msgstr "ਆਪਣੀ ਬਾਂਸ਼ੀ ਪਲੇਅ-ਲਿਸਟ ਸੈਕਰੋ" #. column 1 is the tag name #: ../conduit/modules/BansheeModule/BansheeModule.py:137 #: ../conduit/modules/FspotModule/FspotModule.py:245 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:129 msgid "Tag Name" msgstr "ਟੈਗ ਨਾਂ" #: ../conduit/modules/BansheeModule/BansheeModule.py:145 #: ../conduit/modules/FspotModule/FspotModule.py:253 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:137 msgid "Enabled" msgstr "ਯੋਗ ਕੀਤਾ" #: ../conduit/modules/BansheeModule/config.glade.h:1 msgid "Return Playlists" msgstr "ਪਲੇਅਲਿਸਟ ਦਿਓ" #: ../conduit/modules/BansheeModule/config.glade.h:2 msgid "Banshee" msgstr "ਬਾਂਸ਼ੀ" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 #: ../conduit/modules/BoxDotNetModule/config.glade.h:1 msgid "Box.net" msgstr "Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 msgid "Sync your Box.net files" msgstr "ਆਪਣਾ Box.net ਫਾਇਲਾਂ ਸੈਕਰੋ ਕਰੋ" #: ../conduit/modules/BoxDotNetModule/config.glade.h:2 msgid "Folder:" msgstr "ਫੋਲਡਰ:" #: ../conduit/modules/BoxDotNetModule/config.glade.h:3 #: ../conduit/modules/FlickrModule/config.glade.h:4 msgid "Load" msgstr "ਲੋਡ" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:107 #, python-format msgid "Select %s:" msgstr "%s ਚੁਣੋ:" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:146 msgid "Evolution Contacts" msgstr "ਈਵੇਲੂਸ਼ਨ ਸੰਪਰਕ" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:147 msgid "Sync your contacts" msgstr "ਆਪਣੇ ਸੰਪਰਕ ਸੈਕਰੋ ਕਰੋ" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:198 msgid "Evolution Calendar" msgstr "ਈਵੇਲੂਸ਼ਨ ਕੈਲੰਡਰ" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:199 msgid "Sync your calendar" msgstr "ਆਪਣਾ ਕੈਲੰਡਰ ਸੈਕਰੋ ਕਰੋ" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:256 msgid "Evolution Tasks" msgstr "ਈਵੇਲੂਸ਼ਨ ਟਾਸਕ" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:257 msgid "Sync your tasks" msgstr "ਆਪਣੇ ਟਾਸਕ ਸੈਕਰੋ ਕਰੋ" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:313 msgid "Evolution Memos" msgstr "ਈਵੈਲੂਸ਼ਨ ਮੀਮੋ" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:314 msgid "Sync your memos" msgstr "ਆਪਣੇ ਮੀਮੋ ਸੈਕਰੋ ਕਰੋ" #: ../conduit/modules/EvolutionModule/config.glade.h:1 msgid "Addressbook:" msgstr "ਐਡਰੈੱਸ-ਬੁੱਕ:" #: ../conduit/modules/EvolutionModule/config.glade.h:2 msgid "Evolution" msgstr "ਈਵੈਲੂਸ਼ਨ" #: ../conduit/modules/FacebookModule/FacebookModule.py:37 msgid "Facebook" msgstr "ਫੇਸਬੁੱਕ" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 msgid "Sync your Facebook photos" msgstr "ਆਪਣੀਆਂ ਫੇਸ-ਬੁੱਕ ਫੋਟੋ ਸੈਕਰੋ ਕਰੋ" #: ../conduit/modules/FeedModule/FeedModule.py:30 #: ../conduit/modules/FeedModule/config.glade.h:9 msgid "RSS Feed" msgstr "RSS ਫੀਡ" #: ../conduit/modules/FeedModule/FeedModule.py:31 msgid "Sync data from RSS enclosures" msgstr "RSS ਸਰੋਤ ਤੋਂ ਡਾਟਾ ਸੈਕਰੋ ਕਰੋ" #: ../conduit/modules/FeedModule/config.glade.h:1 msgid "Enclosure Settings" msgstr "ਇੰਕਲੋਜ਼ਰ ਸੈਟਿੰਗ" #: ../conduit/modules/FeedModule/config.glade.h:2 msgid "Feed Details" msgstr "ਫੀਡ ਵੇਰਵਾ" #: ../conduit/modules/FeedModule/config.glade.h:3 msgid "Download Audio Files" msgstr "ਆਡੀਓ ਫਾਇਲਾਂ ਡਾਊਨਲੋਡ ਕਰੋ" #: ../conduit/modules/FeedModule/config.glade.h:4 msgid "Download Photos" msgstr "ਫੋਟੋ ਡਾਊਨਲੋਡ ਕਰੋ" #: ../conduit/modules/FeedModule/config.glade.h:5 msgid "Download Video Files" msgstr "ਵੀਡਿਓ ਫਾਇਲਾਂ ਡਾਊਨਲੋਡ ਕਰੋ" #: ../conduit/modules/FeedModule/config.glade.h:6 msgid "Feed Address:" msgstr "ਫੀਡ ਐਡਰੈੱਸ:" #: ../conduit/modules/FeedModule/config.glade.h:7 msgid "" "Limit the Number of\n" "Enclosures Downloaded to:" msgstr "" "ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਇੰਕਲੋਜਰ\n" "ਦੀ ਗਿਣਤੀ ਸੀਮਿਤ ਕਰੋ:" #: ../conduit/modules/FileModule/FileConfiguration.py:98 msgid "Icon" msgstr "ਆਈਕਾਨ" #: ../conduit/modules/FileModule/FileConfiguration.py:110 msgid "Items" msgstr "ਆਈਟਮਾਂ" #: ../conduit/modules/FileModule/FileConfiguration.py:136 #, python-format msgid "Contains %s files" msgstr "%s ਫਾਇਲਾਂ ਹਨ" #: ../conduit/modules/FileModule/FileConfiguration.py:226 msgid "Include file..." msgstr "ਫਾਇਲ ਸ਼ਾਮਲ ਹੈ..." #: ../conduit/modules/FileModule/FileConfiguration.py:236 msgid "All files" msgstr "ਸਭ ਫਾਇਲਾਂ" #: ../conduit/modules/FileModule/FileConfiguration.py:251 msgid "Include folder..." msgstr "ਫੋਲਡਰ ਸ਼ਾਮਲ..." #: ../conduit/modules/FileModule/FileConfiguration.py:296 msgid "Please Name All Folders" msgstr "ਸਭ ਫੋਲਡਰਾਂ ਦਾ ਨਾਂ ਦਿਓ ਜੀ" #: ../conduit/modules/FileModule/FileConfiguration.py:297 msgid "All folders require a descriptive name. To name a folder simply click on it" msgstr "ਸਭ ਫੋਲਡਰਂ ਲਈ ਸੰਖੇਪ ਵੇਰਵਾ ਚਾਹੀਦਾ ਹੈ। ਇੱਕ ਫੋਲਡਰ ਨੂੰ ਨਾਂ ਦੇਣ ਵਾਸਤੇ ਇਸ ਉੱਤੇ ਕੇਵਲ ਕਲਿੱਕ ਕਰੋ" #: ../conduit/modules/FileModule/FileConfiguration.py:341 msgid "Please Enter a Folder Name" msgstr "ਫੋਲਡਰ ਨਾਂ ਦਿਓ ਜੀ" #: ../conduit/modules/FileModule/FileConfiguration.py:342 msgid "All folders require a descriptive name. To name a folder enter its name where indicated" msgstr "ਸਭ ਫੋਲਡਰਾਂ ਲਈ ਇੱਕ ਸੰਖੇਪ ਨਾਂ ਚਾਹੀਦਾ ਹੈ। ਇੱਕ ਫੋਲਡਰ ਨੂੰ ਨਾਂ ਦੇਣ ਵਾਸਤੇ, ਜਿੱਥੇ ਵੇਖਾਇਆ ਗਿਆ ਹੈ, ਉੱਥੇ ਨਾਂ ਦਿਓ" #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "ਫਾਇਲਾਂ" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "ਕਈ ਫਾਇਲਾਂ ਸੈਕਰੋਨਾਈਜ਼ ਕਰਨ ਲਈ ਸਰੋਤ" #: ../conduit/modules/FileModule/FileModule.py:62 msgid "Folder" msgstr "ਫੋਲਡਰ" #: ../conduit/modules/FileModule/FileModule.py:63 msgid "Synchronize folders" msgstr "ਸੈਕਰੋਨਾਈਜ਼ ਫੋਲਡਰ" #: ../conduit/modules/FileModule/config.glade.h:1 msgid "Items to Synchronize" msgstr "ਸੈਕਰੋਨਾਈਜ਼ ਕਰਨ ਲਈ ਆਈਟਮਾਂ" #: ../conduit/modules/FileModule/config.glade.h:2 msgid "Add Directory" msgstr "ਡਾਇਰੈਕਟਰੀ ਸ਼ਾਮਲ" #: ../conduit/modules/FileModule/config.glade.h:3 msgid "Add File" msgstr "ਫਾਇਲ ਸ਼ਾਮਲ" #: ../conduit/modules/FileModule/config.glade.h:4 msgid "Advanced" msgstr "ਤਕਨੀਕੀ" #: ../conduit/modules/FileModule/config.glade.h:5 msgid "File Configuration" msgstr "ਫਾਇਲ ਸੰਰਚਨਾ" #: ../conduit/modules/FileModule/config.glade.h:6 msgid "Folder Configuration" msgstr "ਫੋਲਡਰ ਸੰਰਚਨਾ" #: ../conduit/modules/FileModule/config.glade.h:7 msgid "Folder Location:" msgstr "ਫੋਲਡਰ ਟਿਕਾਣਾ:" #: ../conduit/modules/FileModule/config.glade.h:8 msgid "Folder Name:" msgstr "ਫੋਲਡਰ ਨਾਂ:" #: ../conduit/modules/FileModule/config.glade.h:9 msgid "Follow Symbolic Links" msgstr "ਸਿਬੋਲਿਕ ਲਿੰਕ ਲਵੋ" #: ../conduit/modules/FileModule/config.glade.h:10 msgid "Ignore File Modification Times" msgstr "ਫਾਇਲ ਸੋਧਣ ਟਾਈਮ ਅਣਡਿੱਠਾ" #: ../conduit/modules/FileModule/config.glade.h:11 msgid "Include Hidden Files" msgstr "ਲੁਕਵੀਆਂ ਫਾਇਲਾਂ ਸਮੇਤ" #: ../conduit/modules/FileModule/config.glade.h:12 msgid "Select A Folder" msgstr "ਇੱਕ ਫੋਲਡਰ ਚੁਣੋ" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 #: ../conduit/modules/FlickrModule/config.glade.h:3 msgid "Flickr" msgstr "ਫਲਿੱਕਰ" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 msgid "Sync your Flickr.com photos" msgstr "ਆਪਣੀਆਂ flickr.com ਫੋਟੋ ਸੈਕਰੋ ਕਰੋ" #: ../conduit/modules/FlickrModule/config.glade.h:2 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:2 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:2 #: ../conduit/modules/SmugMugModule/config.glade.h:2 #: ../conduit/modules/ZotoModule/zoto.glade.h:2 msgid "Saved Photo Settings" msgstr "ਫੋਟੋ ਸੈਟਿੰਗ ਸੰਭਾਲੋ" #: ../conduit/modules/FlickrModule/config.glade.h:5 msgid "Photos are public" msgstr "ਫੋਟੋ ਪਬਲਿਕ ਹਨ" #: ../conduit/modules/FlickrModule/config.glade.h:6 msgid "Photoset Name:" msgstr "ਫੋਟੋ-ਸੈੱਟ ਨਾਂ:" #: ../conduit/modules/FlickrModule/config.glade.h:7 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:7 #: ../conduit/modules/SmugMugModule/config.glade.h:5 msgid "Resize Photos:" msgstr "ਫੋਟੋ ਮੁੜ-ਸਾਈਜ਼:" #: ../conduit/modules/FspotModule/FspotModule.py:25 #: ../conduit/modules/FspotModule/config.glade.h:3 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 msgid "Sync your F-Spot photos" msgstr "ਆਪਣੀਆਂ F-Spot ਫੋਟੋ ਸੈਕਰੋ ਕਰੋ" #: ../conduit/modules/FspotModule/FspotModule.py:126 msgid "F-Spot DBus interface is operating in read only mode" msgstr "F-Spot ਡੀਬੱਸ ਇੰਟਰਫੇਸ ਕੇਵਲ ਪੜ੍ਹਨ ਮੋਡ 'ਚ ਹੀ ਚਲਾਇਆ ਜਾ ਰਿਹਾ ਹੈ" #: ../conduit/modules/FspotModule/config.glade.h:1 msgid "Return Photos Tagged With" msgstr "ਫੋਟੋ ਟੈਗ ਦਿਓ" #: ../conduit/modules/FspotModule/config.glade.h:2 msgid "Create Tags: " msgstr "ਟੈਗ ਬਣਾਓ:" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "GConf Settings" msgstr "GConf ਸੈਟਿੰਗ" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Sync your desktop preferences" msgstr "ਆਪਣੀ ਡੈਸਕਟਾਪ ਪਸੰਦ ਸੈਕਰੋ ਕਰੋ" #: ../conduit/modules/GoogleModule/GoogleModule.py:367 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:4 msgid "Google Calendar" msgstr "ਗੂਗਲ ਕੈਲੰਡਰ" #: ../conduit/modules/GoogleModule/GoogleModule.py:368 msgid "Sync your Google Calendar" msgstr "ਆਪਣਾ ਗੂਗਲ ਕੈਲੰਡਰ ਸੈਕਰੋ ਕਰੋ" #: ../conduit/modules/GoogleModule/GoogleModule.py:553 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:6 msgid "Picasa" msgstr "ਪਿਕਾਸਾ" #: ../conduit/modules/GoogleModule/GoogleModule.py:554 msgid "Sync your Google Picasa photos" msgstr "ਆਪਣੀਆਂ ਗੂਗਲ ਪਿਕਾਸਾ ਫੋਟੋ ਸੈਕਰੋ ਕਰੋ" #: ../conduit/modules/GoogleModule/GoogleModule.py:771 msgid "Google Contacts" msgstr "ਗੂਗਲ ਸੰਪਰਕ" #: ../conduit/modules/GoogleModule/GoogleModule.py:772 msgid "Sync your Gmail contacts" msgstr "ਆਪਣੀ ਜੀਮੇਲ ਸੰਪਰਕ ਸੈਕਰੋ ਕਰੋ" #: ../conduit/modules/GoogleModule/GoogleModule.py:1024 msgid "Google Documents" msgstr "ਗੂਗਲ ਡੌਕੂਮੈਂਟ" #: ../conduit/modules/GoogleModule/GoogleModule.py:1025 msgid "Sync your Google Documents" msgstr "ਆਪਣੇ ਗੂਗਲ ਡੌਕੂਮੈਂਟ ਸੈਕਰੋ ਕਰੋ" #: ../conduit/modules/GoogleModule/GoogleModule.py:1240 msgid "YouTube" msgstr "ਯੂ-ਟਿਊਬ" #: ../conduit/modules/GoogleModule/GoogleModule.py:1241 msgid "Sync data from YouTube" msgstr "ਯੂ-ਟਿਊਬ ਤੋਂ ਡਾਟਾ ਸੈਕਰੋ ਕਰੋ" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:2 msgid "Calendar:" msgstr "ਕੈਲੰਡਰ:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:3 msgid "Email:" msgstr "ਈਮੇਲ:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:5 msgid "Load Calendars" msgstr "ਕੈਲੰਡਰ ਲੋਡ ਕਰੋ" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:6 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:5 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:4 #: ../conduit/modules/SmugMugModule/config.glade.h:4 #: ../conduit/modules/ZotoModule/zoto.glade.h:4 msgid "Password:" msgstr "ਪਾਸਵਰਡਸ" #: ../conduit/modules/GoogleModule/picasa-config.glade.h:3 #: ../conduit/modules/iPodModule/config.glade.h:1 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:3 #: ../conduit/modules/SmugMugModule/config.glade.h:3 #: ../conduit/modules/ZotoModule/zoto.glade.h:3 msgid "Album:" msgstr "ਐਲਬਮ:" #: ../conduit/modules/GoogleModule/picasa-config.glade.h:4 msgid "Login" msgstr "ਲਾਗਇਨ" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:1 msgid "Donwload Videos" msgstr "ਵੀਡਿਓ ਡਾਊਨਲੋਡ ਕਰੋ" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:2 msgid "By user" msgstr "ਯੂਜ਼ਰ ਵਲੋਂ" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:3 msgid "Favorites of" msgstr "ਪਸੰਦ" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:4 msgid "Max retrieved videos (0 is unlimited):" msgstr "ਵੱਧੋ-ਵੱਧ ਲਈ ਵੀਡਿਓ (ਬੇਅੰਤ ਲਈ 0):" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:5 msgid "Most viewed" msgstr "ਅਕਸਰ ਖੋਲ੍ਹੀਆਂ" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:6 msgid "Top rated" msgstr "ਟੌਪ ਰੇਟ" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:7 msgid "Uploaded by" msgstr "ਅੱਪਲੋਡ ਕੀਤੀਆਂ" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:8 msgid "User: " msgstr "ਯੂਜ਼ਰ:" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:9 msgid "YouTube Source" msgstr "ਯੂ-ਟਿਊਬ ਸਰੋਤ" #: ../conduit/modules/iPodModule/config.glade.h:2 msgid "iPod Photos" msgstr "iPod ਫੋਟੋ" #. Translators: Format string used to describe the acceptable formats the #. device accepts. The first arg is replaced with DEFAULT_FOLDER and the second #. arg is a comma seperated list of encodings #: ../conduit/modules/N800Module/N800Module.py:58 #, python-format msgid "%s Format (%s)" msgstr "%s ਫਾਰਮੈਟ (%s)" #. Signifies that a conversion should not take place #: ../conduit/modules/N800Module/N800Module.py:60 msgid "unchanged" msgstr "ਅਣ-ਬਦਲੀਆਂ" #: ../conduit/modules/N800Module/N800Module.py:119 msgid "N800 Files" msgstr "N800 ਫਾਇਲਾਂ" #: ../conduit/modules/N800Module/N800Module.py:120 msgid "Synchronizes files/folders to a N800 device" msgstr "N800 ਜੰਤਰ ਨਾਲ ਫਾਇਲਾਂ/ਫੋਲਡਰ ਸੈਕਰੋ ਕਰੋ" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:125 msgid "Backups" msgstr "ਬੈਕਅੱਪ" #: ../conduit/modules/N800Module/N800Module.py:140 msgid "N800 Music" msgstr "N800 ਸੰਗੀਤ" #: ../conduit/modules/N800Module/N800Module.py:141 msgid "Synchronizes music to a N800 device" msgstr "ਇੱਕ N800 ਜੰਤਰ ਨਾਲ ਸੰਗੀਤ ਸੈਕਰੋਨਾਈਜ਼ ਕਰੋ" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:147 msgid "Music" msgstr "ਸੰਗੀਤ" #: ../conduit/modules/N800Module/N800Module.py:164 msgid "N800 Videos" msgstr "N800 ਵੀਡਿਓ" #: ../conduit/modules/N800Module/N800Module.py:165 #: ../conduit/modules/N800Module/N800Module.py:189 msgid "Synchronizes video to a N800 device" msgstr "N800 ਜੰਤਰ ਨਾਲ ਵੀਡਿਓ ਸੈਕਰੋਨਾਈਜ਼ ਕਰੋ" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:171 msgid "Video" msgstr "ਵੀਡਿਓ" #: ../conduit/modules/N800Module/N800Module.py:188 msgid "N800 Photos" msgstr "N800 ਫੋਟੋ" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:195 msgid "Photo" msgstr "ਫੋਟੋ" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "ਨੈੱਟਵਰਕ" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "ਨੈੱਟਵਰਕ ਰਾਹੀਂ ਸੈਕਰੋਨਾਈਜ਼ੇਸ਼ਨ ਯੋਗ" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:37 msgid "Rhythmbox Music" msgstr "ਰੀਥਮਬਾਕਸ ਸੰਗੀਤ" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:38 msgid "Sync songs from your Rhythmbox playlists" msgstr "ਆਪਣੀ ਰੀਥਮਬਾਕਸ ਪਲੇਅਲਿਸਟ ਤੋਂ ਗਾਣੇ ਸੈਕਰੋ ਕਰੋ" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:57 msgid "Unknown" msgstr "ਅਣਜਾਣ" #: ../conduit/modules/RhythmboxModule/config.glade.h:1 msgid "Synchronize the Following Playlists" msgstr "ਅੱਗੇ ਦਿੱਤੇ ਪਲੇਅਲਿਸਟ ਸੈਕਰੋਨਾਈਜ਼ ਕਰੋ" #: ../conduit/modules/RhythmboxModule/config.glade.h:2 msgid "Rhythmbox Playlists" msgstr "ਰੀਥਮਬਾਕਸ ਪਲੇਅਲਿਸਟ" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:5 msgid "Shutterfly" msgstr "ਸ਼ਟਰਫਲਾਈ" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 msgid "Sync your Shutterfly photos" msgstr "ਆਪਣੀਆਂ ਸ਼ਟਰਫਲਾਈ ਫੋਟੋ ਸੈਕਰੋ ਕਰੋ" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "%d-%m-%Y %H:%M:%S" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 #: ../conduit/modules/SmugMugModule/config.glade.h:6 msgid "SmugMug" msgstr "SmugMug" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 msgid "Sync your SmugMug.com photos" msgstr "ਆਪਣੀ SmugMug.com ਫੋਟੋ ਸੈਕਰੋ ਕਰੋ" #: ../conduit/modules/ZotoModule/ZotoModule.py:121 #: ../conduit/modules/ZotoModule/zoto.glade.h:6 msgid "Zoto" msgstr "ਜੂਟੂ" #: ../conduit/modules/ZotoModule/ZotoModule.py:122 msgid "Sync your Zoto photos" msgstr "ਆਪਣੀਆਂ ਜੂਟੂ ਫੋਟੋ ਸੈਕਰੋ ਕਰੋ" conduit-0.3.17/po/es.po0000644000175000017500000011143611322711443011561 00000000000000# translation of conduit.HEAD.po to Español # Copyright (C) 2008 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Gabriel Felipe Cornejo Salas , 2008. # Jorge González , 2007, 2008, 2009, 2010. msgid "" msgstr "" "Project-Id-Version: conduit.HEAD\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=conduit&component=documentation and translation\n" "POT-Creation-Date: 2010-01-08 23:55+0000\n" "PO-Revision-Date: 2010-01-09 09:06+0100\n" "Last-Translator: Jorge González \n" "Language-Team: Español \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" #: ../data/conduit.desktop.in.in.h:1 msgid "Conduit Synchronizer" msgstr "Sincronizador Conduit" #: ../data/conduit.desktop.in.in.h:2 msgid "Synchronization for GNOME" msgstr "Sincronización para GNOME" #: ../conduit/Knowledge.py:8 msgid "What Do You Want to Synchronize?" msgstr "¿Qué quiere sincronizar?" #: ../conduit/Knowledge.py:9 msgid "Drag and Drop a Data Provider on the Canvas" msgstr "Arrastre y suelte un proveedor de datos en el marco" #: ../conduit/Knowledge.py:11 msgid "Synchronization Group Created" msgstr "Grupo de sincronización creado" #: ../conduit/Knowledge.py:12 msgid "Add Another Data Provider to the Group to Synchronize it" msgstr "Añadir otro proveedor de datos al grupo para sincronizarlo" #: ../conduit/Knowledge.py:14 msgid "You Are Now Ready to Synchronize" msgstr "Ahora está preparado para sincronizar" #: ../conduit/Knowledge.py:15 msgid "Right Click on Group for Options" msgstr "Pulse con el botón derecho en el grupo para ver las opciones" #: ../conduit/Knowledge.py:24 msgid "Synchronize Two Folders" msgstr "Sincronizar dos carpetas" #: ../conduit/Knowledge.py:27 msgid "Backup Folder to Box.net" msgstr "Respaldar una carpeta en Box.net" #: ../conduit/Knowledge.py:30 msgid "Synchronize Tagged F-Spot Photos to Flickr" msgstr "Sincronizar fotos de F-Spot etiquetadas en Flickr" #: ../conduit/Knowledge.py:33 #| msgid "Synchronize Tagged F-Spot Photos to Flickr" msgid "Synchronize Photos to Flickr" msgstr "Sincronizar fotos con Flickr" #: ../conduit/Knowledge.py:36 msgid "Upload Photos to Facebook" msgstr "Cargar fotos en Facebook" #: ../conduit/Knowledge.py:39 #| msgid "Synchronize data from RSS enclosures" msgid "Synchronize Desktop Wallpaper from a RSS Feed" msgstr "Sincronizar el fondo del escritorio desde un proveedor RSS" #: ../conduit/Main.py:59 msgid "Conduit is a synchronization application." msgstr "Conduit es una aplicación de sincronización." #: ../conduit/Main.py:63 #, python-format msgid "Launch without GUI. [default: %default]" msgstr "Lanzar sin IGU. [predeterminado: %default]" #: ../conduit/Main.py:67 #, python-format msgid "Save dataprovider configuration to FILE. [default: %default]" msgstr "" "Guardar la configuración del proveedor de datos a un archivo. " "[predeterminado: %default]" #: ../conduit/Main.py:71 #, python-format msgid "Iconify on startup. [default: %default]" msgstr "Iconizar al iniciar. [predeterminado: %default]" #: ../conduit/Main.py:75 #, python-format msgid "Run with the specified UI. [default: %default]" msgstr "Ejecutar con la IU especificada. [predeterminado: %default]" #: ../conduit/Main.py:79 msgid "Only load modules in the named files. [default: load all modules]" msgstr "" "Sólo cargar módulos en los archivos nombrados. [predeterminado: cargar todos " "los módulos]" #: ../conduit/Main.py:83 msgid "Do not load modules in the named files. [default: load all modules]" msgstr "" "No cargar los módulos en los archivos nombrados. [predeterminado: cargar " "todos los módulos]" #: ../conduit/Main.py:87 msgid "" "Explicitly set internal Conduit settings (keys) to the given values for this " "session. [default: do not set]" msgstr "" "Establecer los ajustes internos de Conduit (claves) específicamente a los " "valores dados para esta sesión. [predeterminado: no establecerlos]" #: ../conduit/Main.py:91 #, python-format msgid "" "Enable loading of unfinished or unsupported dataproviders. [default: %" "default]" msgstr "" "Activar la carga de proveedores de datos sin terminar o no soportados. " "[predeterminado: %default]" #: ../conduit/Main.py:95 #, python-format msgid "Generate more debugging information. [default: %default]" msgstr "Generar más información de depuración. [predeterminado: %default]" #: ../conduit/Main.py:99 #, python-format msgid "Generate less debugging information. [default: %default]" msgstr "Generar menos información de depuración. [predeterminado: %default]" #: ../conduit/Main.py:103 #, python-format msgid "Generate no debugging information. [default: %default]" msgstr "No generar información de depuración. [predeterminado: %default]" #: ../conduit/dataproviders/DataProvider.py:22 msgid "Ready" msgstr "Preparado" #: ../conduit/dataproviders/DataProvider.py:23 msgid "New data to sync" msgstr "Nuevos datos para sincronizar" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Refreshing..." msgstr "Refrescando…" #: ../conduit/dataproviders/DataProvider.py:25 msgid "Refreshed OK" msgstr "Actualización correcta" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Refreshing" msgstr "Error al refrescar" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronizing..." msgstr "Sincronizando…" #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronized OK" msgstr "Sincronización correcta" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Error Synchronizing" msgstr "Error al sincronizar" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Synchronization Skipped" msgstr "Se evitó la sincronización" #: ../conduit/dataproviders/DataProvider.py:31 msgid "Synchronization Cancelled" msgstr "Sincronización cancelada" #: ../conduit/dataproviders/DataProvider.py:32 msgid "Synchronization Conflict" msgstr "Conflicto en la sincronización" #: ../conduit/dataproviders/DataProvider.py:33 msgid "Not Configured" msgstr "Sin configurar" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "640x480" msgstr "640x480" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "800x600" msgstr "800x600" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "1024x768" msgstr "1024x768" #. Signifies that a conversion should not take place #: ../conduit/dataproviders/Image.py:35 #: ../conduit/modules/N800Module/N800Module.py:57 msgid "None" msgstr "Ninguna" #. Default Categories for the DataProviders #: ../conduit/dataproviders/__init__.py:6 msgid "Files and Folders" msgstr "Archivos y carpetas" #: ../conduit/dataproviders/__init__.py:7 #: ../conduit/modules/iPodModule/iPodModule.py:179 msgid "Notes" msgstr "Notas" #: ../conduit/dataproviders/__init__.py:8 #: ../conduit/modules/iPodModule/iPodModule.py:367 msgid "Photos" msgstr "Fotos" #: ../conduit/dataproviders/__init__.py:9 msgid "Office" msgstr "Oficina" #: ../conduit/dataproviders/__init__.py:10 msgid "Settings" msgstr "Ajustes" #: ../conduit/dataproviders/__init__.py:11 msgid "Miscellaneous" msgstr "Miscelánea" #: ../conduit/dataproviders/__init__.py:12 msgid "Media" msgstr "Multimedia" #: ../conduit/dataproviders/__init__.py:13 msgid "Bookmarks" msgstr "Marcadores" #: ../conduit/dataproviders/__init__.py:14 msgid "Test" msgstr "Prueba" #: ../conduit/gtkui/Canvas.py:152 msgid "Drag a Data Provider here to continue" msgstr "Suelte aquí el proveedor de datos para continuar" #: ../conduit/gtkui/Canvas.py:217 msgid "Show me" msgstr "Mostrarme" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:91 msgid "Source" msgstr "Fuente" #: ../conduit/gtkui/ConflictResolver.py:105 msgid "Resolution" msgstr "Resolución" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:110 msgid "Sink" msgstr "Destino" #: ../conduit/gtkui/ConflictResolver.py:150 #: ../conduit/gtkui/ConflictResolver.py:151 #, python-format msgid "Conflicts (%s)" msgstr "Conflictos (%s)" #. name, #url #: ../conduit/gtkui/UI.py:33 msgid "Introduction" msgstr "Introducción" #: ../conduit/gtkui/UI.py:34 msgid "Writing a Data Provider" msgstr "Escribir un proveedor de datos" #: ../conduit/gtkui/UI.py:35 msgid "API Documentation" msgstr "Documentación de la API" #: ../conduit/gtkui/UI.py:36 msgid "Test Results" msgstr "Resultados de la prueba" #: ../conduit/gtkui/UI.py:52 msgid "Examples" msgstr "Ejemplos" #. Build some liststores to display #: ../conduit/gtkui/UI.py:139 msgid "Convert from" msgstr "Convertir de" #: ../conduit/gtkui/UI.py:140 msgid "into" msgstr "en" #: ../conduit/gtkui/UI.py:190 msgid "Relationship Database" msgstr "Base de datos relacional" #: ../conduit/gtkui/UI.py:194 msgid "Conversions Available" msgstr "Conversiones disponibles" #: ../conduit/gtkui/UI.py:200 ../conduit/gtkui/Tree.py:348 #: ../conduit/modules/FileModule/FileConfiguration.py:117 msgid "Name" msgstr "Nombre" #: ../conduit/gtkui/UI.py:204 msgid "Loaded" msgstr "Cargado" #: ../conduit/gtkui/UI.py:329 #, python-format msgid " - %s (Development Version)" msgstr " - %s (versión de desarrollo)" #: ../conduit/gtkui/UI.py:331 msgid " - Running Uninstalled" msgstr " - Ejecutando desinstalados" #: ../conduit/gtkui/UI.py:375 msgid "Developers" msgstr "Desarrolladores" #: ../conduit/gtkui/UI.py:539 ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "Sincronización en progreso. ¿Quiere cancelarla?" #: ../conduit/gtkui/UI.py:711 msgid "_Synchronize All" msgstr "_Sincronizar todo" #: ../conduit/gtkui/UI.py:711 msgid "Synchronizes All Groups" msgstr "Sincronizar todo los grupos" #: ../conduit/gtkui/UI.py:712 msgid "_Cancel Synchronization" msgstr "_Cancelar la sincronización" #: ../conduit/gtkui/UI.py:712 msgid "Cancels Currently Synchronizing Groups" msgstr "Cancela la sincronización actual de grupos" #: ../conduit/gtkui/UI.py:713 msgid "_Quit" msgstr "_Salir" #: ../conduit/gtkui/UI.py:713 msgid "Close Conduit" msgstr "Cerrar Conduit" #: ../conduit/gtkui/UI.py:753 msgid "Synchronization Error" msgstr "Error de sincronización" #: ../conduit/gtkui/UI.py:756 msgid "Synchronization Complete" msgstr "Sincronización completada" #: ../conduit/gtkui/UI.py:764 msgid "Synchronizing" msgstr "Sincronizando" #: ../conduit/gtkui/Tree.py:357 msgid "Description" msgstr "Descripción" #: ../conduit/gtkui/ConfigItems.py:733 #, python-format msgid "Total: %d" msgstr "Total: %d" #: ../conduit/gtkui/WindowConfigurator.py:14 msgid "Configure" msgstr "Configurar" #: ../conduit/modules/BackpackModule/BackpackModule.py:58 msgid "Backpack Notes" msgstr "Notas Backpack" #: ../conduit/modules/BackpackModule/BackpackModule.py:59 msgid "Store things in Backpack Notes" msgstr "Almacene cosas en las notas Backpack" #: ../conduit/modules/BackpackModule/BackpackModule.py:105 #: ../conduit/modules/FlickrModule/FlickrModule.py:307 #: ../conduit/modules/ZotoModule/ZotoModule.py:243 msgid "Account details" msgstr "Detalles de la cuenta" #: ../conduit/modules/BackpackModule/BackpackModule.py:106 msgid "Login" msgstr "Identificación" #: ../conduit/modules/BackpackModule/BackpackModule.py:109 msgid "API key" msgstr "Clave de la API" #: ../conduit/modules/BackpackModule/BackpackModule.py:112 msgid "Saved notes" msgstr "Notas guardadas" #: ../conduit/modules/BackpackModule/BackpackModule.py:113 msgid "Save notes in page" msgstr "Guardar las notas en la página" #: ../conduit/modules/BansheeModule/BansheeModule.py:52 msgid "Banshee Playlists" msgstr "Listas de reproducción de Banshee" #: ../conduit/modules/BansheeModule/BansheeModule.py:53 msgid "Synchronize your Banshee playlists" msgstr "Sincronizar sus listas de reproducción de Banshee" #: ../conduit/modules/BansheeModule/BansheeModule.py:187 #: ../conduit/modules/BansheeModule/BansheeModule.py:188 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:116 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:117 msgid "Playlists" msgstr "Listas de reproducción" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 msgid "Box.net" msgstr "Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 msgid "Synchronize your Box.net files" msgstr "Sincronizar sus archivos Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:290 #: ../conduit/modules/FileModule/FileModule.py:82 msgid "Folder" msgstr "Carpeta" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:291 msgid "Folder name" msgstr "Nombre de la carpeta" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:295 msgid "Load folders" msgstr "Cargar carpetas" #: ../conduit/modules/ConverterModule.py:91 msgid "Note-" msgstr "Nota-" #: ../conduit/modules/DesktopWallpaperModule.py:38 msgid "Wallpaper" msgstr "Fondo de pantalla" #: ../conduit/modules/DesktopWallpaperModule.py:39 msgid "Changes your Desktop Wallpaper" msgstr "Cambia su fondo del escritorio" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:107 #, python-format msgid "Select %s" msgstr "Seleccionar %s" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:127 msgid "Evolution Contacts" msgstr "Contactos de Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:128 msgid "Synchronize your contacts" msgstr "Sincronizar sus contactos" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:178 msgid "Evolution Calendar" msgstr "Calendario de Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:179 msgid "Synchronize your calendar" msgstr "Sincronizar su calendario" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:240 msgid "Evolution Tasks" msgstr "Tareas de Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:241 msgid "Synchronize your tasks" msgstr "Sincronizar sus tareas" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:297 msgid "Evolution Memos" msgstr "Notas de Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:298 msgid "Synchronize your memos" msgstr "Sincronizar sus notas" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 msgid "Facebook" msgstr "Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:39 msgid "Synchronize your Facebook photos" msgstr "Sincronice sus fotos en Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:124 #: ../conduit/modules/FlickrModule/FlickrModule.py:282 msgid "Loading album list..." msgstr "Cargando la lista de álbumes..." #: ../conduit/modules/FacebookModule/FacebookModule.py:128 msgid "Failed to connect" msgstr "Falló al conectar" #: ../conduit/modules/FacebookModule/FacebookModule.py:131 msgid "Logged in" msgstr "Sesión iniciada" #: ../conduit/modules/FacebookModule/FacebookModule.py:133 msgid "Failed to login" msgstr "Falló al iniciar sesión" #: ../conduit/modules/FacebookModule/FacebookModule.py:145 #: ../conduit/modules/FspotModule/FspotModule.py:243 msgid "Status" msgstr "Estado" #: ../conduit/modules/FacebookModule/FacebookModule.py:150 #: ../conduit/modules/iPodModule/iPodModule.py:461 #: ../conduit/modules/ZotoModule/ZotoModule.py:252 msgid "Album" msgstr "Álbum" #: ../conduit/modules/FacebookModule/FacebookModule.py:151 msgid "Album name" msgstr "Nombre del álbum" #: ../conduit/modules/FacebookModule/FacebookModule.py:156 msgid "Load albums" msgstr "Cargar álbumes" #: ../conduit/modules/FeedModule/FeedModule.py:58 msgid "RSS Feed" msgstr "Fuente RSS" #: ../conduit/modules/FeedModule/FeedModule.py:59 msgid "Synchronize data from RSS enclosures" msgstr "Sincronice datos desde fuentes RSS" #. FIXME: Add Randomize #: ../conduit/modules/FeedModule/FeedModule.py:114 msgid "Feed details" msgstr "Detalles de la fuente" #: ../conduit/modules/FeedModule/FeedModule.py:115 msgid "Feed address" msgstr "Dirección de la fuente" #: ../conduit/modules/FeedModule/FeedModule.py:118 msgid "Enclosure settings" msgstr "Configuración de adjuntos" #: ../conduit/modules/FeedModule/FeedModule.py:119 msgid "Limit downloaded enclosures" msgstr "Limitar los adjuntos descargados" #: ../conduit/modules/FeedModule/FeedModule.py:125 msgid "Limit to" msgstr "Limitar a" #: ../conduit/modules/FeedModule/FeedModule.py:129 msgid "Randomize enclosures" msgstr "Adjuntos aleatorios" #: ../conduit/modules/FeedModule/FeedModule.py:133 msgid "Download types" msgstr "Tipos de descargas" #: ../conduit/modules/FeedModule/FeedModule.py:134 msgid "Download audio files" msgstr "Descargar archivos de sonido" #: ../conduit/modules/FeedModule/FeedModule.py:135 msgid "Download video files" msgstr "Descargar archivos de vídeo" #: ../conduit/modules/FeedModule/FeedModule.py:136 msgid "Download photo files" msgstr "Descargar archivos de fotos" #: ../conduit/modules/FileModule/FileConfiguration.py:111 msgid "Icon" msgstr "Icono" #: ../conduit/modules/FileModule/FileConfiguration.py:123 #: ../conduit/modules/GConfModule/GConfModule.py:138 msgid "Items" msgstr "Elementos" #: ../conduit/modules/FileModule/FileConfiguration.py:149 #, python-format msgid "Contains %s files" msgstr "Contiene %s archivos" #: ../conduit/modules/FileModule/FileConfiguration.py:248 msgid "Include file..." msgstr "Incluir archivo…" #: ../conduit/modules/FileModule/FileConfiguration.py:258 msgid "All files" msgstr "Todos los archivos" #: ../conduit/modules/FileModule/FileConfiguration.py:271 msgid "Include folder..." msgstr "Incluir carpeta…" #: ../conduit/modules/FileModule/FileConfiguration.py:314 msgid "Please Name All Folders" msgstr "De nombre a todas las carpetas" #: ../conduit/modules/FileModule/FileConfiguration.py:315 msgid "" "All folders require a descriptive name. To name a folder simply click on it" msgstr "" "Todas las carpetas requieren un nombre descriptivo. Para dar nombre a una " "carpeta, simplemente pulse sobre ella." #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "Archivos" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "Fuente de sincronización para archivos múltiples" #: ../conduit/modules/FileModule/FileModule.py:83 msgid "Synchronize folders" msgstr "Sincronizar carpetas" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:40 msgid "Firefox 3 Bookmarks" msgstr "Marcadores de Firefox 3" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:41 msgid "Syncronize your Firefox 3 Bookmarks" msgstr "Sincronizar sus Marcadores de Firefox 3" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:100 msgid "Firefox Profile" msgstr "Perfil de Firefox" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 msgid "Flickr" msgstr "Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 msgid "Synchronize your Flickr.com photos" msgstr "Sincronizar sus fotos en Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:287 msgid "Failed to connect." msgstr "Falló al conectar." #: ../conduit/modules/FlickrModule/FlickrModule.py:290 msgid "Album names loaded." msgstr "Nombres de álbumes cargados." #: ../conduit/modules/FlickrModule/FlickrModule.py:292 msgid "Failed to login." msgstr "Falló al iniciar sesión." #: ../conduit/modules/FlickrModule/FlickrModule.py:303 msgid "Logging in, please wait..." msgstr "Iniciando sesión, espere..." #: ../conduit/modules/FlickrModule/FlickrModule.py:308 #: ../conduit/modules/GoogleBookmarksModule.py:67 #: ../conduit/modules/ZotoModule/ZotoModule.py:244 msgid "Username" msgstr "Usuario" #: ../conduit/modules/FlickrModule/FlickrModule.py:319 msgid "Authenticate" msgstr "Autenticar" #: ../conduit/modules/FlickrModule/FlickrModule.py:323 #: ../conduit/modules/ZotoModule/ZotoModule.py:251 msgid "Saved photo settings" msgstr "Ajustes para las fotos guardadas" #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "Resize photos" msgstr "Redimensionar fotos" #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "Do not resize" msgstr "No redimensionar" #: ../conduit/modules/FlickrModule/FlickrModule.py:332 msgid "Photos are public" msgstr "Las fotos son públicas" #: ../conduit/modules/FspotModule/FspotModule.py:25 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 msgid "Synchronize your F-Spot photos" msgstr "Sincronizar sus fotos en F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:152 msgid "F-Spot DBus interface is operating in read-only mode" msgstr "La interfaz DBus de F-Spot está funcionando en modo de sólo lectura" #: ../conduit/modules/FspotModule/FspotModule.py:218 msgid "F-Spot is running" msgstr "F-Spot se está ejecutando" #: ../conduit/modules/FspotModule/FspotModule.py:219 msgid "Please start F-Spot or activate the D-Bus Extension" msgstr "Inicie F-Spot para activar la extensión D-Bus" #: ../conduit/modules/FspotModule/FspotModule.py:244 msgid "Start F-Spot" msgstr "Iniciar F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:248 #: ../conduit/modules/FspotModule/FspotModule.py:249 msgid "Tags" msgstr "Etiquetas" #: ../conduit/modules/FspotModule/FspotModule.py:262 msgid "Add tags" msgstr "Añadir etiquetas" #: ../conduit/modules/FspotModule/FspotModule.py:263 msgid "Tag name" msgstr "Nombre de la etiqueta" #: ../conduit/modules/FspotModule/FspotModule.py:266 msgid "Add tag" msgstr "Añadir etiqueta" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "Application Settings" msgstr "Configuración de aplicaciones" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Synchronize your application settings" msgstr "Sincronizar los ajustes de sus aplicaciones" #: ../conduit/modules/GConfModule/GConfModule.py:31 msgid "Metacity" msgstr "Metacity" #: ../conduit/modules/GConfModule/GConfModule.py:32 msgid "Nautilus" msgstr "Nautilus" #: ../conduit/modules/GConfModule/GConfModule.py:33 msgid "Preferred Applications" msgstr "Aplicaciones preferidas" #: ../conduit/modules/GConfModule/GConfModule.py:34 msgid "Desktop Interface" msgstr "Interfaz del escritorio" #: ../conduit/modules/GConfModule/GConfModule.py:35 msgid "Gnome Terminal" msgstr "Terminal de GNOME" #: ../conduit/modules/GConfModule/GConfModule.py:137 msgid "Applications to Synchronize" msgstr "Aplicaciones para sincronizar" #: ../conduit/modules/GoogleBookmarksModule.py:19 msgid "Google Bookmarks" msgstr "Marcadores de Google" #: ../conduit/modules/GoogleBookmarksModule.py:20 msgid "Sync your Google Bookmarks" msgstr "Sincronizar sus marcadores de Google" #: ../conduit/modules/GoogleBookmarksModule.py:66 msgid "Login Details" msgstr "Detalles de la sesión" #: ../conduit/modules/GoogleBookmarksModule.py:70 #: ../conduit/modules/ZotoModule/ZotoModule.py:247 msgid "Password" msgstr "Contraseña" #: ../conduit/modules/GoogleModule/GoogleModule.py:399 msgid "Google Calendar" msgstr "Google Calendar" #: ../conduit/modules/GoogleModule/GoogleModule.py:400 msgid "Synchronize your Google Calendar" msgstr "Sincronizar su Calendario de Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:582 msgid "Picasa" msgstr "Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:583 msgid "Synchronize your Google Picasa photos" msgstr "Sincronizar sus fotos en Google Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:745 msgid "Google Contacts" msgstr "Contactos de Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:746 msgid "Synchronize your Google Mail contacts" msgstr "Sincronizar sus contactos de Google Mail" #: ../conduit/modules/GoogleModule/GoogleModule.py:1076 msgid "Google Documents" msgstr "Documentos de Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:1077 msgid "Synchronize your Google Documents" msgstr "Sincronizar sus documentos de Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:1322 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:69 msgid "Unknown" msgstr "Desconocido" #: ../conduit/modules/GoogleModule/GoogleModule.py:1323 msgid "miscellaneous" msgstr "miscelánea" #: ../conduit/modules/GoogleModule/GoogleModule.py:1324 msgid "No description." msgstr "Sin descripción." #: ../conduit/modules/GoogleModule/GoogleModule.py:1333 msgid "YouTube" msgstr "YouTube" #: ../conduit/modules/GoogleModule/GoogleModule.py:1334 msgid "Synchronize data from YouTube" msgstr "Sincronizar datos con YouTube" #: ../conduit/modules/iPodModule/iPodModule.py:180 msgid "Synchronize your iPod notes" msgstr "Sincronizar sus notas del iPod" #: ../conduit/modules/iPodModule/iPodModule.py:295 #: ../conduit/modules/SynceModule.py:311 msgid "Contacts" msgstr "Contactos" #: ../conduit/modules/iPodModule/iPodModule.py:296 msgid "Synchronize your iPod contacts" msgstr "Sincronizar sus contactos del iPod" #: ../conduit/modules/iPodModule/iPodModule.py:331 #: ../conduit/modules/SynceModule.py:449 msgid "Calendar" msgstr "Calendario" #: ../conduit/modules/iPodModule/iPodModule.py:332 msgid "Synchronize your iPod calendar" msgstr "Sincronizar su calendario del iPod" #: ../conduit/modules/iPodModule/iPodModule.py:368 msgid "Synchronize your iPod photos" msgstr "Sincronizar sus fotos del iPod" #: ../conduit/modules/iPodModule/iPodModule.py:465 msgid "Delete" msgstr "Borrar" #: ../conduit/modules/iPodModule/iPodModule.py:695 #: ../conduit/modules/iPodModule/iPodModule.py:812 #: ../conduit/modules/N800Module/N800Module.py:77 msgid "Encoding" msgstr "Codificación" #: ../conduit/modules/iPodModule/iPodModule.py:811 msgid "Conversion options" msgstr "Opciones de conversión" #: ../conduit/modules/iPodModule/iPodModule.py:816 msgid "Keep converted files" msgstr "Mantener archivos convertidos" #: ../conduit/modules/iPodModule/iPodModule.py:846 msgid "iPod Music" msgstr "Música del iPod" #: ../conduit/modules/iPodModule/iPodModule.py:847 msgid "Synchronize your iPod music" msgstr "Sincronizar su música del iPod" #: ../conduit/modules/iPodModule/iPodModule.py:882 msgid "iPod Video" msgstr "Vídeo del iPod" #: ../conduit/modules/iPodModule/iPodModule.py:883 msgid "Synchronize your iPod videos" msgstr "Sincronizar sus vídeos del iPod" #: ../conduit/modules/iPodModule/iPodModule.py:907 msgid "Movie" msgstr "Película" #: ../conduit/modules/iPodModule/iPodModule.py:908 msgid "Music Video" msgstr "Vídeo musical" #: ../conduit/modules/iPodModule/iPodModule.py:909 msgid "TV Show" msgstr "Programa de televisión" #: ../conduit/modules/iPodModule/iPodModule.py:911 msgid "Video kind" msgstr "Tipo de vídeo" #. Translators: Translate this in derived classes. #: ../conduit/modules/N800Module/N800Module.py:55 msgid "Conduit" msgstr "Conduit" #: ../conduit/modules/N800Module/N800Module.py:105 msgid "N800 Files" msgstr "Archivos en la N800" #: ../conduit/modules/N800Module/N800Module.py:106 msgid "Synchronizes files/folders to a N800 device" msgstr "Sincroniza archivos/carpetas con un dispositivo N800" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:111 msgid "Backups" msgstr "Respaldos" #: ../conduit/modules/N800Module/N800Module.py:126 msgid "N800 Music" msgstr "Músca en la N800" #: ../conduit/modules/N800Module/N800Module.py:127 msgid "Synchronizes music to a N800 device" msgstr "Sincroniza música con un dispositivo N800" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:133 msgid "Music" msgstr "Música" #: ../conduit/modules/N800Module/N800Module.py:150 msgid "N800 Videos" msgstr "Vídeos de la N800" #: ../conduit/modules/N800Module/N800Module.py:151 msgid "Synchronizes video to a N800 device" msgstr "Sincroniza vídeo con un dispositivo N800" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:157 msgid "Video" msgstr "Vídeo" #: ../conduit/modules/N800Module/N800Module.py:174 msgid "N800 Photos" msgstr "Fotos de la N800" #: ../conduit/modules/N800Module/N800Module.py:175 msgid "Synchronizes photos to an N800 device" msgstr "Sincroniza fotos con un dispositivo N800" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:181 msgid "Photo" msgstr "Foto" #: ../conduit/modules/NautilusBookmarksModule.py:19 msgid "Nautilus Bookmarks" msgstr "Marcadores de Nautilus" #: ../conduit/modules/NautilusBookmarksModule.py:20 msgid "Sync your Nautilus Bookmarks" msgstr "Sincronizar sus marcadores de Nautilus" #: ../conduit/modules/NautilusBookmarksModule.py:145 msgid "Sync bookmarks to local places/files" msgstr "Sincronizar sus marcadores en lugares o archivos locales" #: ../conduit/modules/NautilusBookmarksModule.py:148 msgid "Sync bookmarks to remote places/files" msgstr "Sincronizar sus marcadores en lugares o archivos remotos" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "Red" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "Activar sincronización a través de red" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:44 msgid "Rhythmbox Music" msgstr "Música de Rhythmbox" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:45 msgid "Synchronize songs from your Rhythmbox playlists" msgstr "Sincronizr las canciones de sus listas de reproducción de Rhythmbox" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 msgid "Shutterfly" msgstr "Shutterfly" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 msgid "Synchronize your Shutterfly photos" msgstr "Sincronizar sus fotos en Shutterfly" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "%d-%m-%Y %H:%M:%S" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 msgid "SmugMug" msgstr "SmugMug" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 msgid "Synchronize your SmugMug.com photos" msgstr "Sincronizar sus fotos en SmugMug" #: ../conduit/modules/SynceModule.py:139 msgid "Create Partnership" msgstr "Crear socio" #: ../conduit/modules/SynceModule.py:312 msgid "Windows Mobile Contacts" msgstr "Contactos de Windows Mobile" #: ../conduit/modules/SynceModule.py:450 msgid "Windows Mobile Calendar" msgstr "Calendario de Windows Mobile" #: ../conduit/modules/SynceModule.py:459 msgid "Tasks" msgstr "Tareas" #: ../conduit/modules/SynceModule.py:460 msgid "Windows Mobile Tasks" msgstr "Tareas de Windows Mobile" #: ../conduit/modules/ZotoModule/ZotoModule.py:154 msgid "Zoto" msgstr "Zoto" #: ../conduit/modules/ZotoModule/ZotoModule.py:155 msgid "Synchronize your Zoto photos" msgstr "Sincronizar sus fotos en Zoto" #~ msgid "Default Synchronization Options" #~ msgstr "Opciones de sincronización predeterminadas" #~ msgid "General" #~ msgstr "General" #~ msgid "Always Up-To-Date" #~ msgstr "Siempre actualizado" #~ msgid "Ask Me What to Do" #~ msgstr "Preguntarme qué hacer" #~ msgid "Ask me what to do" #~ msgstr "Preguntarme qué hacer" #~ msgid "Cancel Synchronization" #~ msgstr "Cancelar la sincronización" #~ msgid "Cancel currently-synchronizing groups" #~ msgstr "Cancelar la sincronización actual de grupos" #~ msgid "Clear Canvas" #~ msgstr "Limpiar el marco" #~ msgid "Compare" #~ msgstr "Comparar" #~ msgid "Conduit Preferences" #~ msgstr "Preferencias de Conduit" #~ msgid "Configuration" #~ msgstr "Configuración" #~ msgid "Configure Item" #~ msgstr "Configurar elemento" #~ msgid "Configure the synchronization settings for this item" #~ msgstr "Configurar los ajustes de sincronización para este elemento" #~ msgid "Conflict Options" #~ msgstr "Opciones en conflictos" #~ msgid "Conflicts" #~ msgstr "Conflictos" #~ msgid "Contents" #~ msgstr "Índice" #~ msgid "Data Conversions" #~ msgstr "Conversiones de datos" #~ msgid "Data Providers" #~ msgstr "Proveedores de datos" #~ msgid "Delete Group" #~ msgstr "Borrar un grupo" #~ msgid "Delete Item" #~ msgstr "Borrar elemento" #~ msgid "Delete Options" #~ msgstr "Opciones de borrado" #~ msgid "Delete from the corresponding sink" #~ msgstr "Borrar el destino correspondiente" #~ msgid "Delete the Corresponding Item" #~ msgstr "Borrar el elemento correspondiente" #~ msgid "Editor" #~ msgstr "Editor" #~ msgid "Minimize to notification area" #~ msgstr "Minimizar al área de notificación" #~ msgid "Refresh Group" #~ msgstr "Refrescar grupo" #~ msgid "Refresh Item" #~ msgstr "Refrescar elemento" #~ msgid "Replace the Older Item" #~ msgstr "Reemplazar el elemento antiguo" #~ msgid "Replace the older item" #~ msgstr "Reemplazar el elemento antiguo" #~ msgid "Resolve Conflicts" #~ msgstr "Resolver conflictos" #~ msgid "Save settings on exit" #~ msgstr "Guardar los ajustes al salir" #~ msgid "Show Hints" #~ msgstr "Mostrar consejos" #~ msgid "Show status icon" #~ msgstr "Mostrar el icono de estado" #~ msgid "Skip" #~ msgstr "Saltar" #~ msgid "Slow Synchronization" #~ msgstr "Sincronización lenta" #~ msgid "Start Conduit at login" #~ msgstr "Iniciar Conduit al iniciar la sesión" #~ msgid "Synchronization Options" #~ msgstr "Opciones de sincronización" #~ msgid "Synchronize All" #~ msgstr "Sincronizar todo" #~ msgid "Synchronize Group" #~ msgstr "Sincronizar grupo" #~ msgid "Synchronize group" #~ msgstr "Sincronizar grupo" #~ msgid "Synchronizes all groups" #~ msgstr "Sincronizar todos los grupos" #~ msgid "Title" #~ msgstr "Título" #~ msgid "Two-Way Synchronization" #~ msgstr "Sincronización de dos vías" #~ msgid "When an item has been deleted:" #~ msgstr "Cuando se ha borrado un elemento" #~ msgid "When an item is deleted..." #~ msgstr "Cuando se borra un elemento..." #~ msgid "When there is a conflict..." #~ msgstr "Cuando hay un conflicto..." #~ msgid "When there is a two-way conflict:" #~ msgstr "Cuando hay un conflicto de dos vías:" #~ msgid "_Edit" #~ msgstr "_Editar" #~ msgid "_File" #~ msgstr "_Archivo" #~ msgid "_Help" #~ msgstr "Ay_uda" #~ msgid "Account Details" #~ msgstr "Detalles de la cuenta" #~ msgid "Calendar:" #~ msgstr "Calendario:" #~ msgid "Email:" #~ msgstr "Correo-e:" #~ msgid "Load Calendars" #~ msgstr "Cargar calendarios" #~ msgid "Password:" #~ msgstr "Contraseña:" #~ msgid "Items to Synchronize" #~ msgstr "Elementos para sincronizar" #~ msgid "Add Directory" #~ msgstr "Añadir directorio" #~ msgid "Add File" #~ msgstr "Añadir archivo" #~ msgid "Advanced" #~ msgstr "Avanzada" #~ msgid "File Configuration" #~ msgstr "Configuración de archivo" #~ msgid "Folder Configuration" #~ msgstr "Configuración de carpeta" #~ msgid "Folder Location:" #~ msgstr "Ubicación de la carpeta:" #~ msgid "Follow Symbolic Links" #~ msgstr "Seguir los enlaces simbólicos" #~ msgid "Ignore File Modification Times" #~ msgstr "Ignorar los tiempos de modificación de archivo" #~ msgid "Include Hidden Files" #~ msgstr "Incluir archivos ocultos" #~ msgid "Select A Folder" #~ msgstr "Seleccione una carpeta" #~ msgid "Downloaded Document Format" #~ msgstr "Formato del documento descargado" #~ msgid "Presentations" #~ msgstr "Presentaciones" #~ msgid "Spreadsheets" #~ msgstr "Hojas de cálculo" #~ msgid "Download Videos" #~ msgstr "Descargar vídeos" #~ msgid "Favorites of above user" #~ msgstr "Favoritos del usuario de encima" #~ msgid "Max retrieved videos (0 is unlimited):" #~ msgstr "Máximo número de videos recuperados (0 es ilimitado):" #~ msgid "Top rated" #~ msgstr "Mejor puntuado" #~ msgid "Uploaded by above user" #~ msgstr "Subido por el usuario de encima" #~ msgid "YouTube Source" #~ msgstr "Fuente YouTube" #~ msgid "Saved Note Settings" #~ msgstr "Configuración de notas guardadas" #~ msgid "Backpack" #~ msgstr "Backpack" #~ msgid "Enabled" #~ msgstr "Activado" #~ msgid "Return Playlists" #~ msgstr "Devolver listas de reproducción" #~ msgid "Banshee" #~ msgstr "Banshee" #~ msgid "Addressbook:" #~ msgstr "Libreta de direcciones:" #~ msgid "Evolution" #~ msgstr "Evolution" #~ msgid "Load" #~ msgstr "Cargar" #~ msgid "" #~ "Limit the Number of\n" #~ "Enclosures Downloaded to:" #~ msgstr "" #~ "Limite el número de\n" #~ "adjuntos descargados a:" #~ msgid "Photoset Name:" #~ msgstr "Nombre del álbum:" #~ msgid "Encoding" #~ msgstr "Codificación" #~ msgid "iPod Photos" #~ msgstr "Fotos del iPod" #~ msgid "%s Format (%s)" #~ msgstr "%s formato (%s)" #~ msgid "unchanged" #~ msgstr "sin cambiar" #~ msgid "Firefox" #~ msgstr "Firefox" #~ msgid "Folder:" #~ msgstr "Carpeta:" #~ msgid "Return Photos Tagged With" #~ msgstr "Devolver fotos etiquetadas con" #~ msgid "Create Tags: " #~ msgstr "Crear etiquetas: " #~ msgid "Synchronize the Following Playlists" #~ msgstr "Sincronizar las siguientes listas de reproducción" #~ msgid "Rhythmbox Playlists" #~ msgstr "Listas de reproducción de Rhythmbox" #~ msgid "Synchronize your desktop preferences" #~ msgstr "Sincronizar sus preferencias del escritorio" #~ msgid "Slow Sync" #~ msgstr "Sincronización lenta" #~ msgid "Sync Options" #~ msgstr "Opciones de sincronización" #~ msgid "Two Way Sync" #~ msgstr "Sincronización de dos vías" #~ msgid "Use built in Web browser" #~ msgstr "Usar el navegador web integrado" #~ msgid "_About" #~ msgstr "_Acerca de" #~ msgid "About Conduit" #~ msgstr "Acerca de Conduit" conduit-0.3.17/po/pl.po0000644000175000017500000006732411172176633011604 00000000000000# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # 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 # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # translation of conduit.HEAD.pl.po to Polish # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Joanna Mazgaj , 2008. msgid "" msgstr "" "Project-Id-Version: conduit.HEAD.pl\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-08-09 15:05+0200\n" "PO-Revision-Date: 2008-08-13 23:09+0100\n" "Last-Translator: Joanna Mazgaj \n" "Language-Team: Aviary.pl \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==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: ../data/conduit.desktop.in.in.h:1 #: ../data/conduit-autostart.desktop.in.in.h:2 msgid "Conduit Synchronizer" msgstr "Program do synchronizacji Conduit" #: ../data/conduit.desktop.in.in.h:2 #: ../data/conduit-autostart.desktop.in.in.h:3 msgid "Synchronization for GNOME" msgstr "Program do synchronizacji dla środowiska GNOME" #. Translators: Translate this in derived classes. #: ../data/conduit-autostart.desktop.in.in.h:1 #: ../conduit/modules/N800Module/N800Module.py:54 msgid "Conduit" msgstr "Conduit" #: ../data/conduit.glade.h:1 msgid "Default Synchronization Options" msgstr "Domyślne opcje synchronizacji" #: ../data/conduit.glade.h:2 msgid "General" msgstr "Ogólne" #: ../data/conduit.glade.h:3 msgid "Always Up To Date" msgstr "Zawsze aktualne" #: ../data/conduit.glade.h:4 msgid "Ask Me What to Do" msgstr "Pytaj co robić" #: ../data/conduit.glade.h:5 msgid "Ask me what to do" msgstr "Pytaj co robić" #: ../data/conduit.glade.h:6 msgid "Cancel Synchronization" msgstr "Anuluj synchronizację" #: ../data/conduit.glade.h:7 msgid "Cancel currently synchronizing groups" msgstr "Przerwij synchronizację grup" #: ../data/conduit.glade.h:8 msgid "Clear Canvas" msgstr "Wyczyść " #: ../data/conduit.glade.h:9 msgid "Compare" msgstr "Porównaj" #: ../data/conduit.glade.h:10 msgid "Conduit Properties" msgstr "Właściwości programu Conduit" #: ../data/conduit.glade.h:11 msgid "Configuration" msgstr "Konfiguracja" #: ../data/conduit.glade.h:12 msgid "Configure Item" msgstr "Konfiguracja elementu" #: ../data/conduit.glade.h:13 msgid "Configure the synchronization settings for this item" msgstr "Konfiguracja ustawień synchronizacji tego elementu" #: ../data/conduit.glade.h:14 msgid "Conflict Options" msgstr "Opcje konfliktu" #: ../data/conduit.glade.h:15 msgid "Conflicts" msgstr "Konflikty" #: ../data/conduit.glade.h:16 msgid "Contents" msgstr "Zawartość" #: ../data/conduit.glade.h:17 msgid "Data Conversions" msgstr "Konwersje danych" #: ../data/conduit.glade.h:18 msgid "Data Providers" msgstr "Dostawcy usług" #: ../data/conduit.glade.h:19 msgid "Delete Group" msgstr "Usuń grupę" #: ../data/conduit.glade.h:20 msgid "Delete Item" msgstr "Usuń element" #: ../data/conduit.glade.h:21 msgid "Delete Options" msgstr "Opcje usuwania" #: ../data/conduit.glade.h:22 msgid "Delete from the corresponding sink" msgstr "Usuń z odpowiadającego ujścia" #: ../data/conduit.glade.h:23 msgid "Delete the Corresponding Item" msgstr "Usuń analogiczny element" #: ../data/conduit.glade.h:24 msgid "Editor" msgstr "Edytor" #: ../data/conduit.glade.h:25 msgid "Minimize to notification area" msgstr "Minimalizowanie do obszaru powiadamiania" #: ../data/conduit.glade.h:26 msgid "Refresh Group" msgstr "Odśwież grupę" #: ../data/conduit.glade.h:27 msgid "Refresh Item" msgstr "Odśwież element" #: ../data/conduit.glade.h:28 msgid "Replace the Older Item" msgstr "Zastąp starszy element" #: ../data/conduit.glade.h:29 msgid "Replace the older item" msgstr "Zastępuje starszy element" #: ../data/conduit.glade.h:30 msgid "Resolve Conflicts" msgstr "Rozwiązywanie konfliktów" #: ../data/conduit.glade.h:31 msgid "Save settings on exit" msgstr "Zapisywanie ustawień podczas wyłączania" #: ../data/conduit.glade.h:32 msgid "Show Hints" msgstr "Wyświetlanie podpowiedzi" #: ../data/conduit.glade.h:33 msgid "Show status icon" msgstr "Wyświetlanie ikony stanu" #: ../data/conduit.glade.h:34 msgid "Skip" msgstr "Pomiń" #: ../data/conduit.glade.h:35 msgid "Slow Sync" msgstr "Wolna synchronizacja" #: ../data/conduit.glade.h:36 msgid "Sync Options" msgstr "Opcje synchronizacji" #: ../data/conduit.glade.h:37 msgid "Synchronize All" msgstr "Synchronizuj wszystko" #: ../data/conduit.glade.h:38 msgid "Synchronize Group" msgstr "Synchronizuj grupę" #: ../data/conduit.glade.h:39 msgid "Synchronize group" msgstr "Synchronizuje grupę" #: ../data/conduit.glade.h:40 msgid "Synchronizes all groups" msgstr "Synchronizuje wszyskie grupy" #: ../data/conduit.glade.h:41 msgid "Title" msgstr "Tytuł" #: ../data/conduit.glade.h:42 msgid "Two Way Sync" msgstr "Obustronna synchronizacja" #: ../data/conduit.glade.h:43 msgid "When an item has been deleted:" msgstr "W przypadku usunięcia elementu:" #: ../data/conduit.glade.h:44 msgid "When an item is deleted..." msgstr "W przypadku usunięcia elementu..." #: ../data/conduit.glade.h:45 msgid "When there is a conflict..." msgstr "Kiedy występuje konflikt..." #: ../data/conduit.glade.h:46 msgid "When there is a two way conflict:" msgstr "Kiedy występuje dwustronny konflikt:" #: ../data/conduit.glade.h:47 msgid "_Edit" msgstr "_Edycja" #: ../data/conduit.glade.h:48 msgid "_File" msgstr "_Plik" #: ../data/conduit.glade.h:49 msgid "_Help" msgstr "Pomo_c" #: ../conduit/gtkui/Canvas.py:149 msgid "Drag a Data Provider here to continue" msgstr "Należy przeciągnąć na ten obszar dostawcę usługi, aby kontynuować" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:91 msgid "Source" msgstr "Źródło" #: ../conduit/gtkui/ConflictResolver.py:105 msgid "Resolution" msgstr "Rozwiązanie" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:110 msgid "Sink" msgstr "Ujście" #: ../conduit/gtkui/ConflictResolver.py:150 #: ../conduit/gtkui/ConflictResolver.py:151 #, python-format msgid "Conflicts (%s)" msgstr "Konflikty (%s)" #. Build some liststores to display #: ../conduit/gtkui/UI.py:281 msgid "Convert from" msgstr "Konwertuj z" #: ../conduit/gtkui/UI.py:282 msgid "into" msgstr "na" #: ../conduit/gtkui/UI.py:333 msgid "Relationship Database" msgstr "Baza danych powiązań" #: ../conduit/gtkui/UI.py:337 msgid "Conversions Available" msgstr "Możliwe konwersje" #: ../conduit/gtkui/UI.py:343 #: ../conduit/gtkui/Tree.py:349 #: ../conduit/modules/FileModule/FileConfiguration.py:105 msgid "Name" msgstr "Nazwa" #: ../conduit/gtkui/UI.py:347 msgid "Loaded" msgstr "Wczytano" #: ../conduit/gtkui/UI.py:459 #: ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "Trwa synchronizacja. Na pewno anulować?" #: ../conduit/gtkui/UI.py:626 msgid "_Synchronize All" msgstr "_Synchronizuj wszystko" #: ../conduit/gtkui/UI.py:626 msgid "Synchronizes All Groups" msgstr "Synchronizuje wszyskie grupy" #: ../conduit/gtkui/UI.py:627 msgid "_Cancel Synchronization" msgstr "_Anuluj synchronizację" #: ../conduit/gtkui/UI.py:627 msgid "Cancels Currently Synchronizing Groups" msgstr "Przerywa synchronizację grup" #: ../conduit/gtkui/UI.py:628 msgid "_Quit" msgstr "Za_kończ" #: ../conduit/gtkui/UI.py:628 msgid "Close Conduit" msgstr "Zamyka program Conduit" #: ../conduit/gtkui/UI.py:629 msgid "_About" msgstr "_O programie" #: ../conduit/gtkui/UI.py:629 msgid "About Conduit" msgstr "O programie Conduit" #: ../conduit/gtkui/UI.py:669 msgid "Synchronization Error" msgstr "Błąd podczas synchronizacji" #: ../conduit/gtkui/UI.py:672 msgid "Synchronization Complete" msgstr "Synchronizacja zakończona" #: ../conduit/gtkui/UI.py:688 msgid "Synchronizing" msgstr "Synchronizacja" #: ../conduit/gtkui/Tree.py:358 msgid "Description" msgstr "Opis" #: ../conduit/dataproviders/DataProvider.py:19 msgid "Ready" msgstr "Gotowe" #: ../conduit/dataproviders/DataProvider.py:20 msgid "New data to sync" msgstr "Nowe dane do synchronizacji" #: ../conduit/dataproviders/DataProvider.py:21 msgid "Refreshing..." msgstr "Odświeżanie..." #: ../conduit/dataproviders/DataProvider.py:22 msgid "Refreshed OK" msgstr "Odświeżanie zakończone" #: ../conduit/dataproviders/DataProvider.py:23 msgid "Error Refreshing" msgstr "Bład podczas odświeżania" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Synchronizing..." msgstr "Trwa synchronizacja..." #: ../conduit/dataproviders/DataProvider.py:25 msgid "Synchronized OK" msgstr "Zsynchronizowano" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Synchronizing" msgstr "Błąd podczas synchronizacji" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronization Skipped" msgstr "Pominięto synchronizację" #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronization Cancelled" msgstr "Anulowano synchronizację" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Synchronization Conflict" msgstr "Konflikt podczas synchronizacji" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Not Configured Correctly" msgstr "Niepoprawna konfiguracja" #: ../conduit/modules/BackpackModule/BackpackModule.py:56 msgid "Backpack Notes" msgstr "Backpack Notes" #: ../conduit/modules/BackpackModule/BackpackModule.py:57 msgid "Store things in Backpack Notes" msgstr "Przechowywanie rzeczy w programie Backpack Notes" #: ../conduit/modules/BackpackModule/config.glade.h:1 #: ../conduit/modules/FlickrModule/config.glade.h:1 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:1 #: ../conduit/modules/GoogleModule/documents-config.glade.h:1 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:1 #: ../conduit/modules/GoogleModule/youtube-config.glade.h:1 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:1 #: ../conduit/modules/SmugMugModule/config.glade.h:1 #: ../conduit/modules/ZotoModule/zoto.glade.h:1 msgid "Account Details" msgstr "Dane konta" #: ../conduit/modules/BackpackModule/config.glade.h:2 msgid "Saved Note Settings" msgstr "Zapisane ustawienia notatek" #: ../conduit/modules/BackpackModule/config.glade.h:3 msgid "API key:" msgstr "Klucz API:" #: ../conduit/modules/BackpackModule/config.glade.h:4 msgid "Backpack" msgstr "Backpack" #: ../conduit/modules/BackpackModule/config.glade.h:5 msgid "Save notes in page:" msgstr "Zapisywanie notatek na stronie:" #: ../conduit/modules/BackpackModule/config.glade.h:6 #: ../conduit/modules/FlickrModule/config.glade.h:8 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:8 #: ../conduit/modules/GoogleModule/youtube-config.glade.h:9 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:6 #: ../conduit/modules/SmugMugModule/config.glade.h:7 #: ../conduit/modules/ZotoModule/zoto.glade.h:5 msgid "Username:" msgstr "Nazwa użytkownika:" #: ../conduit/modules/BansheeModule/BansheeModule.py:30 msgid "Banshee Playlists" msgstr "Listy odtwarzania Banshee" #: ../conduit/modules/BansheeModule/BansheeModule.py:31 msgid "Sync your Banshee playlists" msgstr "Synchronizacja list odtwarzania programu Banshee" #. column 1 is the tag name #: ../conduit/modules/BansheeModule/BansheeModule.py:138 #: ../conduit/modules/FspotModule/FspotModule.py:246 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:129 msgid "Tag Name" msgstr "Etykieta" #: ../conduit/modules/BansheeModule/BansheeModule.py:146 #: ../conduit/modules/FspotModule/FspotModule.py:254 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:137 msgid "Enabled" msgstr "Włączona" #: ../conduit/modules/BansheeModule/config.glade.h:1 msgid "Return Playlists" msgstr "Znalezione listy odtwarzania" #: ../conduit/modules/BansheeModule/config.glade.h:2 msgid "Banshee" msgstr "Banshee" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 #: ../conduit/modules/BoxDotNetModule/config.glade.h:1 msgid "Box.net" msgstr "Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 msgid "Sync your Box.net files" msgstr "Synchronizacja plików z serwisem Box.net" #: ../conduit/modules/BoxDotNetModule/config.glade.h:2 msgid "Folder:" msgstr "Katalog:" #: ../conduit/modules/BoxDotNetModule/config.glade.h:3 #: ../conduit/modules/FacebookModule/config.glade.h:3 #: ../conduit/modules/FlickrModule/config.glade.h:4 msgid "Load" msgstr "Wczytywanie" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:108 #, python-format msgid "Select %s:" msgstr "Wybór %s:" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:147 msgid "Evolution Contacts" msgstr "Kontakty Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:148 msgid "Sync your contacts" msgstr "Synchronizacja kontaktów" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:198 msgid "Evolution Calendar" msgstr "Kalendarz Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:199 msgid "Sync your calendar" msgstr "Synchronizacja kalendarza" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:256 msgid "Evolution Tasks" msgstr "Zadania Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:257 msgid "Sync your tasks" msgstr "Synchronizacja zadań" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:313 msgid "Evolution Memos" msgstr "Notatki Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:314 msgid "Sync your memos" msgstr "Synchronizacja notatek" #: ../conduit/modules/EvolutionModule/config.glade.h:1 msgid "Addressbook:" msgstr "Książka adresowa:" #: ../conduit/modules/EvolutionModule/config.glade.h:2 msgid "Evolution" msgstr "Evolution" #: ../conduit/modules/FacebookModule/FacebookModule.py:37 #: ../conduit/modules/FacebookModule/config.glade.h:2 msgid "Facebook" msgstr "Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 msgid "Sync your Facebook photos" msgstr "Synchronizacja zdjęć z serwisem Facebook" #: ../conduit/modules/FacebookModule/config.glade.h:1 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:3 #: ../conduit/modules/iPodModule/config.glade.h:1 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:3 #: ../conduit/modules/SmugMugModule/config.glade.h:3 #: ../conduit/modules/ZotoModule/zoto.glade.h:3 msgid "Album:" msgstr "Album:" #: ../conduit/modules/FeedModule/FeedModule.py:57 #: ../conduit/modules/FeedModule/config.glade.h:9 msgid "RSS Feed" msgstr "Kanał RSS" #: ../conduit/modules/FeedModule/FeedModule.py:58 msgid "Sync data from RSS enclosures" msgstr "Synchronizacja danych z załącznikami RSS" #: ../conduit/modules/FeedModule/config.glade.h:1 msgid "Enclosure Settings" msgstr "Ustawienia załączników" #: ../conduit/modules/FeedModule/config.glade.h:2 msgid "Feed Details" msgstr "Szczegóły kanału" #: ../conduit/modules/FeedModule/config.glade.h:3 msgid "Download Audio Files" msgstr "Pobieranie plików dźwiękowych" #: ../conduit/modules/FeedModule/config.glade.h:4 msgid "Download Photos" msgstr "Pobieranie zdjęć" #: ../conduit/modules/FeedModule/config.glade.h:5 msgid "Download Video Files" msgstr "Pobieranie plików wideo" #: ../conduit/modules/FeedModule/config.glade.h:6 msgid "Feed Address:" msgstr "Adres kanału:" #: ../conduit/modules/FeedModule/config.glade.h:7 msgid "" "Limit the Number of\n" "Enclosures Downloaded to:" msgstr "" "Ograniczenie liczby \n" "pobieranych załączników do:" #: ../conduit/modules/FileModule/FileConfiguration.py:99 msgid "Icon" msgstr "Ikona" #: ../conduit/modules/FileModule/FileConfiguration.py:111 msgid "Items" msgstr "Elementy" #: ../conduit/modules/FileModule/FileConfiguration.py:137 #, python-format msgid "Contains %s files" msgstr "Zawiera %s plików" #: ../conduit/modules/FileModule/FileConfiguration.py:228 msgid "Include file..." msgstr "Dołącz plik..." #: ../conduit/modules/FileModule/FileConfiguration.py:238 msgid "All files" msgstr "Wszystkie pliki" #: ../conduit/modules/FileModule/FileConfiguration.py:253 msgid "Include folder..." msgstr "Dołącz katalog..." #: ../conduit/modules/FileModule/FileConfiguration.py:298 msgid "Please Name All Folders" msgstr "Proszę nadać nazwę wszystkim katalogom" #: ../conduit/modules/FileModule/FileConfiguration.py:299 msgid "All folders require a descriptive name. To name a folder simply click on it" msgstr "Każdy katalog wymaga opisowej nazwy. Aby ją nadać, wystarczy na niego kliknąć" #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "Pliki" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "Żródło do synchronizacji wielu plików" #: ../conduit/modules/FileModule/FileModule.py:63 msgid "Folder" msgstr "Katalog" #: ../conduit/modules/FileModule/FileModule.py:64 msgid "Synchronize folders" msgstr "Synchronizacja katalogów" #: ../conduit/modules/FileModule/config.glade.h:1 msgid "Items to Synchronize" msgstr "Elementy do synchronizacji" #: ../conduit/modules/FileModule/config.glade.h:2 msgid "Add Directory" msgstr "Dodaj katalog" #: ../conduit/modules/FileModule/config.glade.h:3 msgid "Add File" msgstr "Dodaj plik" #: ../conduit/modules/FileModule/config.glade.h:4 msgid "Advanced" msgstr "Zaawansowane" #: ../conduit/modules/FileModule/config.glade.h:5 msgid "File Configuration" msgstr "Konfiguracja pliku" #: ../conduit/modules/FileModule/config.glade.h:6 msgid "Folder Configuration" msgstr "Konfiguracja katalogu" #: ../conduit/modules/FileModule/config.glade.h:7 msgid "Folder Location:" msgstr "Położenie katalogu:" #: ../conduit/modules/FileModule/config.glade.h:8 msgid "Follow Symbolic Links" msgstr "Śledzenie powiązań symbolicznych" #: ../conduit/modules/FileModule/config.glade.h:9 msgid "Ignore File Modification Times" msgstr "Ignorowanie czasu modyfikacji pliku" #: ../conduit/modules/FileModule/config.glade.h:10 msgid "Include Hidden Files" msgstr "Również pliki ukryte" #: ../conduit/modules/FileModule/config.glade.h:11 msgid "Select A Folder" msgstr "Wybór katalogu" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 #: ../conduit/modules/FlickrModule/config.glade.h:3 msgid "Flickr" msgstr "Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 msgid "Sync your Flickr.com photos" msgstr "Synchronizacja zdjęć z serwisem Flickr.com" #: ../conduit/modules/FlickrModule/config.glade.h:2 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:2 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:2 #: ../conduit/modules/SmugMugModule/config.glade.h:2 #: ../conduit/modules/ZotoModule/zoto.glade.h:2 msgid "Saved Photo Settings" msgstr "Zapisane ustawienia zdjęć" #: ../conduit/modules/FlickrModule/config.glade.h:5 msgid "Photos are public" msgstr "Zdjęcia są publiczne" #: ../conduit/modules/FlickrModule/config.glade.h:6 msgid "Photoset Name:" msgstr "Nazwa kolekcji zdjęć:" #: ../conduit/modules/FlickrModule/config.glade.h:7 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:7 #: ../conduit/modules/SmugMugModule/config.glade.h:5 msgid "Resize Photos:" msgstr "Zmień rozmiar zdjęć:" #: ../conduit/modules/FspotModule/FspotModule.py:25 #: ../conduit/modules/FspotModule/config.glade.h:3 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 msgid "Sync your F-Spot photos" msgstr "Synchronizacja zdjęć z programem F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:127 msgid "F-Spot DBus interface is operating in read only mode" msgstr "Interfejs DBus programu F-Spot działa w trybie \"tylko do odczytu\"" #: ../conduit/modules/FspotModule/config.glade.h:1 msgid "Return Photos Tagged With" msgstr "Wyświetlanie zdjęcia z etykietami" #: ../conduit/modules/FspotModule/config.glade.h:2 msgid "Create Tags: " msgstr "Utwórz etykiety:" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "GConf Settings" msgstr "Ustawienia GConf" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Sync your desktop preferences" msgstr "Synchronizacja ustawień środowiska" #: ../conduit/modules/GoogleModule/GoogleModule.py:369 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:4 msgid "Google Calendar" msgstr "Kalendarz Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:370 msgid "Sync your Google Calendar" msgstr "Synchronizacja kalendarza Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:555 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:6 msgid "Picasa" msgstr "Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:556 msgid "Sync your Google Picasa photos" msgstr "Synchronizacja zdjęć z serwisem Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:795 msgid "Google Contacts" msgstr "Kontakty Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:796 msgid "Sync your Gmail contacts" msgstr "Synchronizacja kontaktów Gmail" #: ../conduit/modules/GoogleModule/GoogleModule.py:1052 #: ../conduit/modules/GoogleModule/documents-config.glade.h:5 msgid "Google Documents" msgstr "Dokumenty Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:1053 msgid "Sync your Google Documents" msgstr "Synchronizacja dokumentów Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:1333 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:57 msgid "Unknown" msgstr "Nieznany" #: ../conduit/modules/GoogleModule/GoogleModule.py:1334 msgid "miscellaneous" msgstr "różne" #: ../conduit/modules/GoogleModule/GoogleModule.py:1335 msgid "No description." msgstr "Brak opisu." #: ../conduit/modules/GoogleModule/GoogleModule.py:1344 msgid "YouTube" msgstr "YouTube" #: ../conduit/modules/GoogleModule/GoogleModule.py:1345 msgid "Sync data from YouTube" msgstr "Synchronizowanie danych z serwisem YouTube" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:2 msgid "Calendar:" msgstr "Kalendarz:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:3 #: ../conduit/modules/GoogleModule/documents-config.glade.h:4 msgid "Email:" msgstr "E-mail:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:5 msgid "Load Calendars" msgstr "Wczytanie kalendarzy" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:6 #: ../conduit/modules/GoogleModule/documents-config.glade.h:6 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:5 #: ../conduit/modules/GoogleModule/youtube-config.glade.h:6 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:4 #: ../conduit/modules/SmugMugModule/config.glade.h:4 #: ../conduit/modules/ZotoModule/zoto.glade.h:4 msgid "Password:" msgstr "Hasło:" #: ../conduit/modules/GoogleModule/documents-config.glade.h:2 msgid "Downloaded Document Format" msgstr "Format ściągniętego dokumentu" #: ../conduit/modules/GoogleModule/documents-config.glade.h:3 msgid "Documents" msgstr "Dokumenty" #: ../conduit/modules/GoogleModule/documents-config.glade.h:7 msgid "Presentations" msgstr "Prezentacje" #: ../conduit/modules/GoogleModule/documents-config.glade.h:8 msgid "Spreadsheets" msgstr "Arkusze" #: ../conduit/modules/GoogleModule/picasa-config.glade.h:4 msgid "Login" msgstr "Login" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:2 msgid "Download Videos" msgstr "Ściąganie filmów" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:3 msgid "Favorites of above user" msgstr "Ulubione tego użytkownika" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:4 msgid "Max retrieved videos (0 is unlimited):" msgstr "Maksymalna ilość filmów (0 oznacza brak limitu)\"" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:5 msgid "Most viewed" msgstr "Najczęściej oglądane" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:7 msgid "Top rated" msgstr "Najwyżej ocenione" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:8 msgid "Uploaded by above user" msgstr "Wysłane przez tego użytkownika" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:10 msgid "YouTube Source" msgstr "Żródło YouTube" #: ../conduit/modules/iPodModule/config.glade.h:2 msgid "iPod Photos" msgstr "Zdjęcia iPod" #. Translators: Format string used to describe the acceptable formats the #. device accepts. The first arg is replaced with DEFAULT_FOLDER and the second #. arg is a comma seperated list of encodings #: ../conduit/modules/N800Module/N800Module.py:58 #, python-format msgid "%s Format (%s)" msgstr "Formaty %s (%s)" #. Signifies that a conversion should not take place #: ../conduit/modules/N800Module/N800Module.py:60 msgid "unchanged" msgstr "niezmienione" #: ../conduit/modules/N800Module/N800Module.py:121 msgid "N800 Files" msgstr "Pliki N800" #: ../conduit/modules/N800Module/N800Module.py:122 msgid "Synchronizes files/folders to a N800 device" msgstr "Synchronizacja plików/katalogów z urządzeniam N800" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:127 msgid "Backups" msgstr "Kopie zapasowe" #: ../conduit/modules/N800Module/N800Module.py:142 msgid "N800 Music" msgstr "Muzyka N800" #: ../conduit/modules/N800Module/N800Module.py:143 msgid "Synchronizes music to a N800 device" msgstr "Synchronizacja muzyki z urządzeniem N800" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:149 msgid "Music" msgstr "Muzyka" #: ../conduit/modules/N800Module/N800Module.py:166 msgid "N800 Videos" msgstr "Filmy wideo N800" #: ../conduit/modules/N800Module/N800Module.py:167 #: ../conduit/modules/N800Module/N800Module.py:191 msgid "Synchronizes video to a N800 device" msgstr "Synchronizacja plików wideo z urządzeniem N800" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:173 msgid "Video" msgstr "Wideo" #: ../conduit/modules/N800Module/N800Module.py:190 msgid "N800 Photos" msgstr "Zdjęcia N800" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:197 msgid "Photo" msgstr "Zdjęcie" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "Sieć" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "Synchronizacja przez sieć" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:37 msgid "Rhythmbox Music" msgstr "Odtwarzacz muzyki Rhythmbox" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:38 msgid "Sync songs from your Rhythmbox playlists" msgstr "Synchronizacja utworów z listami odtwarzania programu Rhythmbox" #: ../conduit/modules/RhythmboxModule/config.glade.h:1 msgid "Synchronize the Following Playlists" msgstr "Synchronizacja następujących list odtwarzania" #: ../conduit/modules/RhythmboxModule/config.glade.h:2 msgid "Rhythmbox Playlists" msgstr "Listy odtwarzania programu Rhythmbox" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:5 msgid "Shutterfly" msgstr "Shutterfly" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 msgid "Sync your Shutterfly photos" msgstr "Synchronizacja zdjęć z serwisem Shutterfly" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "%R-%m-%d %G:%M:%S" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 #: ../conduit/modules/SmugMugModule/config.glade.h:6 msgid "SmugMug" msgstr "SmugMug" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 msgid "Sync your SmugMug.com photos" msgstr "Synchronizacja zdjęć z serwisem SmugMug.com" #: ../conduit/modules/ZotoModule/ZotoModule.py:154 #: ../conduit/modules/ZotoModule/zoto.glade.h:6 msgid "Zoto" msgstr "Zoto" #: ../conduit/modules/ZotoModule/ZotoModule.py:155 msgid "Sync your Zoto photos" msgstr "Synchronizacja zdjęć z serwisem Zoto" #~ msgid "Use built in Web browser" #~ msgstr "Korzystanie z wbudowanej przeglądarki" conduit-0.3.17/po/sv.po0000644000175000017500000010510511322711443011576 00000000000000# Swedish translation for conduit. # Copyright (C) 2007-2010 Free Software Foundation, Inc. # This file is distributed under the same license as the conduit package. # Daniel Nylander , 2007, 2008, 2009, 2010. # msgid "" msgstr "" "Project-Id-Version: conduit\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-01-10 12:12+0100\n" "PO-Revision-Date: 2010-01-10 12:13+0100\n" "Last-Translator: Daniel Nylander \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../data/conduit.desktop.in.in.h:1 msgid "Conduit Synchronizer" msgstr "Synkroniseraren Conduit" #: ../data/conduit.desktop.in.in.h:2 msgid "Synchronization for GNOME" msgstr "Synkronisering för GNOME" #: ../conduit/Knowledge.py:8 msgid "What Do You Want to Synchronize?" msgstr "Vad vill du synkronisera?" #: ../conduit/Knowledge.py:9 msgid "Drag and Drop a Data Provider on the Canvas" msgstr "Dra och släpp en dataleverantör på arbetsytan" #: ../conduit/Knowledge.py:11 msgid "Synchronization Group Created" msgstr "Synkroniseringsgrupp skapad" #: ../conduit/Knowledge.py:12 msgid "Add Another Data Provider to the Group to Synchronize it" msgstr "Lägg till ytterligare en dataleverantör till gruppen för att synkronisera den" #: ../conduit/Knowledge.py:14 msgid "You Are Now Ready to Synchronize" msgstr "Du är nu redo att synkronisera" #: ../conduit/Knowledge.py:15 msgid "Right Click on Group for Options" msgstr "Högerklicka på en grupp för alternativ" #: ../conduit/Knowledge.py:24 msgid "Synchronize Two Folders" msgstr "Synkronisera två mappar" #: ../conduit/Knowledge.py:27 msgid "Backup Folder to Box.net" msgstr "Säkerhetskopiera mapp till Box.net" #: ../conduit/Knowledge.py:30 msgid "Synchronize Tagged F-Spot Photos to Flickr" msgstr "Synkronisera taggade F-Spot-foton till Flickr" #: ../conduit/Knowledge.py:33 msgid "Synchronize Photos to Flickr" msgstr "Synkronisera foton till Flickr" #: ../conduit/Knowledge.py:36 msgid "Upload Photos to Facebook" msgstr "Skicka upp foton till Facebook" #: ../conduit/Knowledge.py:39 msgid "Synchronize Desktop Wallpaper from a RSS Feed" msgstr "Synkronisera skrivbordsbakgrund från en RSS-kanal" #: ../conduit/Main.py:59 msgid "Conduit is a synchronization application." msgstr "Conduit är ett synkroniseringsprogram." #: ../conduit/Main.py:63 #, python-format msgid "Launch without GUI. [default: %default]" msgstr "Starta utan grafiskt gränssnitt. [standard: %default]" #: ../conduit/Main.py:67 #, python-format msgid "Save dataprovider configuration to FILE. [default: %default]" msgstr "Spara konfiguration för dataleverantör till FIL. [standard: %default]" #: ../conduit/Main.py:71 #, python-format msgid "Iconify on startup. [default: %default]" msgstr "Ikonifiera vid uppstart. [standard: %default]" #: ../conduit/Main.py:75 #, python-format msgid "Run with the specified UI. [default: %default]" msgstr "Kör med angivet användargränssnitt. [standard: %default]" #: ../conduit/Main.py:79 msgid "Only load modules in the named files. [default: load all modules]" msgstr "Läs endast in moduler i namngivna filer. [standard: läs in alla moduler]" #: ../conduit/Main.py:83 msgid "Do not load modules in the named files. [default: load all modules]" msgstr "Läs inte in moduler i namngivna filer. [standard: läs in alla moduler]" #: ../conduit/Main.py:87 msgid "Explicitly set internal Conduit settings (keys) to the given values for this session. [default: do not set]" msgstr "Ställ uttryckligen in interna Conduit-inställningar (nycklar) till angivna värden för denna session. [standard: ställ inte in]" #: ../conduit/Main.py:91 #, python-format msgid "Enable loading of unfinished or unsupported dataproviders. [default: %default]" msgstr "Aktivera inläsning av ofärdiga dataleverantörer eller de som inte stöds. [standard: %default]" #: ../conduit/Main.py:95 #, python-format msgid "Generate more debugging information. [default: %default]" msgstr "Generera mer felsökningsinformation. [standard: %default]" #: ../conduit/Main.py:99 #, python-format msgid "Generate less debugging information. [default: %default]" msgstr "Generera mindre felsökningsinformation. [standard: %default]" #: ../conduit/Main.py:103 #, python-format msgid "Generate no debugging information. [default: %default]" msgstr "Generera ingen felsökningsinformation. [standard: %default]" #: ../conduit/dataproviders/DataProvider.py:22 msgid "Ready" msgstr "Redo" #: ../conduit/dataproviders/DataProvider.py:23 msgid "New data to sync" msgstr "Nytt data att synkronisera" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Refreshing..." msgstr "Uppdaterar..." #: ../conduit/dataproviders/DataProvider.py:25 msgid "Refreshed OK" msgstr "Uppdatering OK" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Refreshing" msgstr "Fel vid uppdatering" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronizing..." msgstr "Synkroniserar..." #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronized OK" msgstr "Synkronisering OK" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Error Synchronizing" msgstr "Fel vid synkronisering" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Synchronization Skipped" msgstr "Synkroniseringen hoppades över" #: ../conduit/dataproviders/DataProvider.py:31 msgid "Synchronization Cancelled" msgstr "Synkroniseringen avbröts" #: ../conduit/dataproviders/DataProvider.py:32 msgid "Synchronization Conflict" msgstr "Konflikt i synkronisering" #: ../conduit/dataproviders/DataProvider.py:33 msgid "Not Configured" msgstr "Inte konfigurerad" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "640x480" msgstr "640x480" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "800x600" msgstr "800x600" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "1024x768" msgstr "1024x768" #. Signifies that a conversion should not take place #: ../conduit/dataproviders/Image.py:35 #: ../conduit/modules/N800Module/N800Module.py:57 msgid "None" msgstr "Ingen" #. Default Categories for the DataProviders #: ../conduit/dataproviders/__init__.py:6 msgid "Files and Folders" msgstr "Filer och mappar" #: ../conduit/dataproviders/__init__.py:7 #: ../conduit/modules/iPodModule/iPodModule.py:179 msgid "Notes" msgstr "Anteckningar" #: ../conduit/dataproviders/__init__.py:8 #: ../conduit/modules/iPodModule/iPodModule.py:367 msgid "Photos" msgstr "Foton" #: ../conduit/dataproviders/__init__.py:9 msgid "Office" msgstr "Kontor" #: ../conduit/dataproviders/__init__.py:10 msgid "Settings" msgstr "Inställningar" #: ../conduit/dataproviders/__init__.py:11 msgid "Miscellaneous" msgstr "Diverse" #: ../conduit/dataproviders/__init__.py:12 msgid "Media" msgstr "Media" #: ../conduit/dataproviders/__init__.py:13 msgid "Bookmarks" msgstr "Bokmärken" #: ../conduit/dataproviders/__init__.py:14 msgid "Test" msgstr "Testa" #: ../conduit/gtkui/Canvas.py:152 msgid "Drag a Data Provider here to continue" msgstr "Dra en dataleverantör hit för att fortsätta" #: ../conduit/gtkui/Canvas.py:217 msgid "Show me" msgstr "Visa mig" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:91 msgid "Source" msgstr "Källa" #: ../conduit/gtkui/ConflictResolver.py:105 msgid "Resolution" msgstr "Upplösning" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:110 msgid "Sink" msgstr "Sink" #: ../conduit/gtkui/ConflictResolver.py:150 #: ../conduit/gtkui/ConflictResolver.py:151 #, python-format msgid "Conflicts (%s)" msgstr "Konflikter (%s)" #. name, #url #: ../conduit/gtkui/UI.py:33 msgid "Introduction" msgstr "Introduktion" #: ../conduit/gtkui/UI.py:34 msgid "Writing a Data Provider" msgstr "Skriver en dataleverantörer" #: ../conduit/gtkui/UI.py:35 msgid "API Documentation" msgstr "API-dokumentation" #: ../conduit/gtkui/UI.py:36 msgid "Test Results" msgstr "Testresultat" #: ../conduit/gtkui/UI.py:52 msgid "Examples" msgstr "Exempel" #. Build some liststores to display #: ../conduit/gtkui/UI.py:139 msgid "Convert from" msgstr "Konvertera från" #: ../conduit/gtkui/UI.py:140 msgid "into" msgstr "till" #: ../conduit/gtkui/UI.py:190 msgid "Relationship Database" msgstr "Relationsdatabas" #: ../conduit/gtkui/UI.py:194 msgid "Conversions Available" msgstr "Konversioner tillgängliga" #: ../conduit/gtkui/UI.py:200 #: ../conduit/gtkui/Tree.py:348 #: ../conduit/modules/FileModule/FileConfiguration.py:117 msgid "Name" msgstr "Namn" # FIXME. Kolla denna #: ../conduit/gtkui/UI.py:204 msgid "Loaded" msgstr "Inläst" #: ../conduit/gtkui/UI.py:329 #, python-format msgid " - %s (Development Version)" msgstr " - %s (utvecklingsversion)" #: ../conduit/gtkui/UI.py:331 msgid " - Running Uninstalled" msgstr " - Kör oinstallerat" #: ../conduit/gtkui/UI.py:375 msgid "Developers" msgstr "Utvecklare" #: ../conduit/gtkui/UI.py:539 #: ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "Synkronisering pågår. Vill du avbryta den?" #: ../conduit/gtkui/UI.py:711 msgid "_Synchronize All" msgstr "_Synkronisera allt" #: ../conduit/gtkui/UI.py:711 msgid "Synchronizes All Groups" msgstr "Synkroniserar alla grupper" #: ../conduit/gtkui/UI.py:712 msgid "_Cancel Synchronization" msgstr "_Avbryt synkronisering" #: ../conduit/gtkui/UI.py:712 msgid "Cancels Currently Synchronizing Groups" msgstr "Avbryter aktuella synkroniseringsgrupper" #: ../conduit/gtkui/UI.py:713 msgid "_Quit" msgstr "_Avsluta" #: ../conduit/gtkui/UI.py:713 msgid "Close Conduit" msgstr "Stäng Conduit" #: ../conduit/gtkui/UI.py:753 msgid "Synchronization Error" msgstr "Fel vid synkronisering" #: ../conduit/gtkui/UI.py:756 msgid "Synchronization Complete" msgstr "Synkronisering färdigställd" #: ../conduit/gtkui/UI.py:764 msgid "Synchronizing" msgstr "Synkronisering" #: ../conduit/gtkui/Tree.py:357 msgid "Description" msgstr "Beskrivning" #: ../conduit/gtkui/ConfigItems.py:733 #, python-format msgid "Total: %d" msgstr "Totalt: %d" #: ../conduit/gtkui/WindowConfigurator.py:14 msgid "Configure" msgstr "Konfigurera" #: ../conduit/modules/BackpackModule/BackpackModule.py:58 msgid "Backpack Notes" msgstr "Backpack-anteckningar" #: ../conduit/modules/BackpackModule/BackpackModule.py:59 msgid "Store things in Backpack Notes" msgstr "Lagra saker i Backpack-anteckningar" #: ../conduit/modules/BackpackModule/BackpackModule.py:105 #: ../conduit/modules/FlickrModule/FlickrModule.py:307 #: ../conduit/modules/ZotoModule/ZotoModule.py:243 msgid "Account details" msgstr "Kontodetaljer" #: ../conduit/modules/BackpackModule/BackpackModule.py:106 msgid "Login" msgstr "Inloggning" #: ../conduit/modules/BackpackModule/BackpackModule.py:109 msgid "API key" msgstr "API-nyckel" #: ../conduit/modules/BackpackModule/BackpackModule.py:112 msgid "Saved notes" msgstr "Sparade anteckningar" #: ../conduit/modules/BackpackModule/BackpackModule.py:113 msgid "Save notes in page" msgstr "Spara anteckningar i sida" #: ../conduit/modules/BansheeModule/BansheeModule.py:52 msgid "Banshee Playlists" msgstr "Banshee-spellistor" #: ../conduit/modules/BansheeModule/BansheeModule.py:53 msgid "Synchronize your Banshee playlists" msgstr "Synkronisera dina Banshee-spellistor" #: ../conduit/modules/BansheeModule/BansheeModule.py:187 #: ../conduit/modules/BansheeModule/BansheeModule.py:188 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:116 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:117 msgid "Playlists" msgstr "Spellistor" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 msgid "Box.net" msgstr "Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 msgid "Synchronize your Box.net files" msgstr "Synkronisera dina Box.net-filer" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:290 #: ../conduit/modules/FileModule/FileModule.py:82 msgid "Folder" msgstr "Mapp" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:291 msgid "Folder name" msgstr "Mappnamn" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:295 msgid "Load folders" msgstr "Läs in mappar" #: ../conduit/modules/ConverterModule.py:91 msgid "Note-" msgstr "Anteckning-" #: ../conduit/modules/DesktopWallpaperModule.py:38 msgid "Wallpaper" msgstr "Skrivbordsbakgrund" #: ../conduit/modules/DesktopWallpaperModule.py:39 msgid "Changes your Desktop Wallpaper" msgstr "Byter din skrivbordsbakgrund" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:107 #, python-format msgid "Select %s" msgstr "Välj %s" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:127 msgid "Evolution Contacts" msgstr "Evolution-kontakter" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:128 msgid "Synchronize your contacts" msgstr "Synkronisera dina kontakter" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:178 msgid "Evolution Calendar" msgstr "Evolution-kalender" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:179 msgid "Synchronize your calendar" msgstr "Synkronisera din kalender" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:240 msgid "Evolution Tasks" msgstr "Evolution-uppgifter" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:241 msgid "Synchronize your tasks" msgstr "Synkronisera dina uppgifter" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:297 msgid "Evolution Memos" msgstr "Evolution-memon" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:298 msgid "Synchronize your memos" msgstr "Synkronisera dina memon" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 msgid "Facebook" msgstr "Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:39 msgid "Synchronize your Facebook photos" msgstr "Synkronisera dina Facebook-foton" #: ../conduit/modules/FacebookModule/FacebookModule.py:124 #: ../conduit/modules/FlickrModule/FlickrModule.py:282 msgid "Loading album list..." msgstr "Läser in albumlista..." #: ../conduit/modules/FacebookModule/FacebookModule.py:128 msgid "Failed to connect" msgstr "Misslyckades med att ansluta" #: ../conduit/modules/FacebookModule/FacebookModule.py:131 msgid "Logged in" msgstr "Inloggad" #: ../conduit/modules/FacebookModule/FacebookModule.py:133 msgid "Failed to login" msgstr "Misslyckades med att logga in" #: ../conduit/modules/FacebookModule/FacebookModule.py:145 #: ../conduit/modules/FspotModule/FspotModule.py:243 msgid "Status" msgstr "Status" #: ../conduit/modules/FacebookModule/FacebookModule.py:150 #: ../conduit/modules/iPodModule/iPodModule.py:461 #: ../conduit/modules/ZotoModule/ZotoModule.py:252 msgid "Album" msgstr "Album" #: ../conduit/modules/FacebookModule/FacebookModule.py:151 msgid "Album name" msgstr "Albumnamn" #: ../conduit/modules/FacebookModule/FacebookModule.py:156 msgid "Load albums" msgstr "Läs in album" #: ../conduit/modules/FeedModule/FeedModule.py:58 msgid "RSS Feed" msgstr "RSS-kanal" #: ../conduit/modules/FeedModule/FeedModule.py:59 msgid "Synchronize data from RSS enclosures" msgstr "Synkronisera data från RSS-bilagor" #. FIXME: Add Randomize #: ../conduit/modules/FeedModule/FeedModule.py:114 msgid "Feed details" msgstr "Kanaldetaljer" #: ../conduit/modules/FeedModule/FeedModule.py:115 msgid "Feed address" msgstr "Kanaladress" #: ../conduit/modules/FeedModule/FeedModule.py:118 msgid "Enclosure settings" msgstr "Inställningar för bilagor" #: ../conduit/modules/FeedModule/FeedModule.py:119 msgid "Limit downloaded enclosures" msgstr "Begränsa hämtade bilagor" #: ../conduit/modules/FeedModule/FeedModule.py:125 msgid "Limit to" msgstr "Begränsa till" #: ../conduit/modules/FeedModule/FeedModule.py:129 msgid "Randomize enclosures" msgstr "Slumpa bilagor" #: ../conduit/modules/FeedModule/FeedModule.py:133 msgid "Download types" msgstr "Hämtningstyper" #: ../conduit/modules/FeedModule/FeedModule.py:134 msgid "Download audio files" msgstr "Hämta ljudfiler" #: ../conduit/modules/FeedModule/FeedModule.py:135 msgid "Download video files" msgstr "Hämta videofiler" #: ../conduit/modules/FeedModule/FeedModule.py:136 msgid "Download photo files" msgstr "Hämta fotofiler" #: ../conduit/modules/FileModule/FileConfiguration.py:111 msgid "Icon" msgstr "Ikon" #: ../conduit/modules/FileModule/FileConfiguration.py:123 #: ../conduit/modules/GConfModule/GConfModule.py:138 msgid "Items" msgstr "Objekt" #: ../conduit/modules/FileModule/FileConfiguration.py:149 #, python-format msgid "Contains %s files" msgstr "Innehåller %s filer" #: ../conduit/modules/FileModule/FileConfiguration.py:248 msgid "Include file..." msgstr "Inkludera fil..." #: ../conduit/modules/FileModule/FileConfiguration.py:258 msgid "All files" msgstr "Alla filer" #: ../conduit/modules/FileModule/FileConfiguration.py:271 msgid "Include folder..." msgstr "Inkludera mapp..." #: ../conduit/modules/FileModule/FileConfiguration.py:314 msgid "Please Name All Folders" msgstr "Namnge alla mappar" #: ../conduit/modules/FileModule/FileConfiguration.py:315 msgid "All folders require a descriptive name. To name a folder simply click on it" msgstr "Alla mappar kräver ett beskrivande namn. Klicka på en mapp för att namnge den" #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "Filer" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "Källa för synkronisering av flera filer" #: ../conduit/modules/FileModule/FileModule.py:83 msgid "Synchronize folders" msgstr "Synkronisera mappar" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:40 msgid "Firefox 3 Bookmarks" msgstr "Firefox 3-bokmärken" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:41 msgid "Syncronize your Firefox 3 Bookmarks" msgstr "Synkronisera dina Firefox 3-bokmärken" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:100 msgid "Firefox Profile" msgstr "Firefox-profil" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 msgid "Flickr" msgstr "Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 msgid "Synchronize your Flickr.com photos" msgstr "Synkronisera dina Flickr.com-foton" #: ../conduit/modules/FlickrModule/FlickrModule.py:287 msgid "Failed to connect." msgstr "Misslyckades med att ansluta." #: ../conduit/modules/FlickrModule/FlickrModule.py:290 msgid "Album names loaded." msgstr "Albumnamn inlästa." #: ../conduit/modules/FlickrModule/FlickrModule.py:292 msgid "Failed to login." msgstr "Misslyckades med att logga in." #: ../conduit/modules/FlickrModule/FlickrModule.py:303 msgid "Logging in, please wait..." msgstr "Loggar in, vänta..." #: ../conduit/modules/FlickrModule/FlickrModule.py:308 #: ../conduit/modules/GoogleBookmarksModule.py:67 #: ../conduit/modules/ZotoModule/ZotoModule.py:244 msgid "Username" msgstr "Användarnamn" #: ../conduit/modules/FlickrModule/FlickrModule.py:319 msgid "Authenticate" msgstr "Autentisera" #: ../conduit/modules/FlickrModule/FlickrModule.py:323 #: ../conduit/modules/ZotoModule/ZotoModule.py:251 msgid "Saved photo settings" msgstr "Inställningar för sparat foto" #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "Resize photos" msgstr "Ändra storlek på foton" #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "Do not resize" msgstr "Ändra inte storlek" #: ../conduit/modules/FlickrModule/FlickrModule.py:332 msgid "Photos are public" msgstr "Foton är publika" #: ../conduit/modules/FspotModule/FspotModule.py:25 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 msgid "Synchronize your F-Spot photos" msgstr "Synkronisera dina F-Spot-foton" #: ../conduit/modules/FspotModule/FspotModule.py:152 msgid "F-Spot DBus interface is operating in read-only mode" msgstr "F-Spots DBus-gränssnitt kör i skrivskyddat läge" #: ../conduit/modules/FspotModule/FspotModule.py:218 msgid "F-Spot is running" msgstr "F-Spot är igång" #: ../conduit/modules/FspotModule/FspotModule.py:219 msgid "Please start F-Spot or activate the D-Bus Extension" msgstr "Starta F-Spot eller aktivera D-Bus-utökningen" #: ../conduit/modules/FspotModule/FspotModule.py:244 msgid "Start F-Spot" msgstr "Starta F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:248 #: ../conduit/modules/FspotModule/FspotModule.py:249 msgid "Tags" msgstr "Taggar" #: ../conduit/modules/FspotModule/FspotModule.py:262 msgid "Add tags" msgstr "Lägg till taggar" #: ../conduit/modules/FspotModule/FspotModule.py:263 msgid "Tag name" msgstr "Taggnamn" #: ../conduit/modules/FspotModule/FspotModule.py:266 msgid "Add tag" msgstr "Lägg till tagg" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "Application Settings" msgstr "Programinställningar" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Synchronize your application settings" msgstr "Synkronisera dina programinställningar" #: ../conduit/modules/GConfModule/GConfModule.py:31 msgid "Metacity" msgstr "Metacity" #: ../conduit/modules/GConfModule/GConfModule.py:32 msgid "Nautilus" msgstr "Nautilus" #: ../conduit/modules/GConfModule/GConfModule.py:33 msgid "Preferred Applications" msgstr "Föredragna program" #: ../conduit/modules/GConfModule/GConfModule.py:34 msgid "Desktop Interface" msgstr "Skrivbordsgränssnitt" #: ../conduit/modules/GConfModule/GConfModule.py:35 msgid "Gnome Terminal" msgstr "Gnome-terminal" #: ../conduit/modules/GConfModule/GConfModule.py:137 msgid "Applications to Synchronize" msgstr "Program att synkronisera" #: ../conduit/modules/GoogleBookmarksModule.py:19 msgid "Google Bookmarks" msgstr "Google-bokmärken" #: ../conduit/modules/GoogleBookmarksModule.py:20 msgid "Sync your Google Bookmarks" msgstr "Synkronisera dina Google-bokmärken" #: ../conduit/modules/GoogleBookmarksModule.py:66 msgid "Login Details" msgstr "Inloggningsdetaljer" #: ../conduit/modules/GoogleBookmarksModule.py:70 #: ../conduit/modules/ZotoModule/ZotoModule.py:247 msgid "Password" msgstr "Lösenord" #: ../conduit/modules/GoogleModule/GoogleModule.py:399 msgid "Google Calendar" msgstr "Google Kalender" #: ../conduit/modules/GoogleModule/GoogleModule.py:400 msgid "Synchronize your Google Calendar" msgstr "Synkronisera din Google Kalender" #: ../conduit/modules/GoogleModule/GoogleModule.py:582 msgid "Picasa" msgstr "Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:583 msgid "Synchronize your Google Picasa photos" msgstr "Synkronisera dina Google Picasa-foton" #: ../conduit/modules/GoogleModule/GoogleModule.py:745 msgid "Google Contacts" msgstr "Google-kontakter" #: ../conduit/modules/GoogleModule/GoogleModule.py:746 msgid "Synchronize your Google Mail contacts" msgstr "Synkronisera dina Google Mail-kontakter" #: ../conduit/modules/GoogleModule/GoogleModule.py:1076 msgid "Google Documents" msgstr "Google Dokument" #: ../conduit/modules/GoogleModule/GoogleModule.py:1077 msgid "Synchronize your Google Documents" msgstr "Synkronisera dina Google Dokument" #: ../conduit/modules/GoogleModule/GoogleModule.py:1322 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:69 msgid "Unknown" msgstr "Okänt" #: ../conduit/modules/GoogleModule/GoogleModule.py:1323 msgid "miscellaneous" msgstr "diverse" #: ../conduit/modules/GoogleModule/GoogleModule.py:1324 msgid "No description." msgstr "Ingen beskrivning." #: ../conduit/modules/GoogleModule/GoogleModule.py:1333 msgid "YouTube" msgstr "YouTube" #: ../conduit/modules/GoogleModule/GoogleModule.py:1334 msgid "Synchronize data from YouTube" msgstr "Synkronisera data från YouTube" #: ../conduit/modules/iPodModule/iPodModule.py:180 msgid "Synchronize your iPod notes" msgstr "Synkronisera dina iPod-anteckningar" #: ../conduit/modules/iPodModule/iPodModule.py:295 #: ../conduit/modules/SynceModule.py:311 msgid "Contacts" msgstr "Kontakter" #: ../conduit/modules/iPodModule/iPodModule.py:296 msgid "Synchronize your iPod contacts" msgstr "Synkronisera dina iPod-kontakter" #: ../conduit/modules/iPodModule/iPodModule.py:331 #: ../conduit/modules/SynceModule.py:449 msgid "Calendar" msgstr "Kalender" #: ../conduit/modules/iPodModule/iPodModule.py:332 msgid "Synchronize your iPod calendar" msgstr "Synkronisera din iPod-kalender" #: ../conduit/modules/iPodModule/iPodModule.py:368 msgid "Synchronize your iPod photos" msgstr "Synkronisera dina iPod-foton" #: ../conduit/modules/iPodModule/iPodModule.py:465 msgid "Delete" msgstr "Ta bort" #: ../conduit/modules/iPodModule/iPodModule.py:695 #: ../conduit/modules/iPodModule/iPodModule.py:812 #: ../conduit/modules/N800Module/N800Module.py:77 msgid "Encoding" msgstr "Kodning" #: ../conduit/modules/iPodModule/iPodModule.py:811 msgid "Conversion options" msgstr "Alternativ för konvertering" #: ../conduit/modules/iPodModule/iPodModule.py:816 msgid "Keep converted files" msgstr "Behåll konverterade filer" #: ../conduit/modules/iPodModule/iPodModule.py:846 msgid "iPod Music" msgstr "iPod-musik" #: ../conduit/modules/iPodModule/iPodModule.py:847 msgid "Synchronize your iPod music" msgstr "Synkronisera din iPod-musik" #: ../conduit/modules/iPodModule/iPodModule.py:882 msgid "iPod Video" msgstr "iPod-video" #: ../conduit/modules/iPodModule/iPodModule.py:883 msgid "Synchronize your iPod videos" msgstr "Synkronisera dina iPod-videor" #: ../conduit/modules/iPodModule/iPodModule.py:907 msgid "Movie" msgstr "Film" #: ../conduit/modules/iPodModule/iPodModule.py:908 msgid "Music Video" msgstr "Musikvideo" #: ../conduit/modules/iPodModule/iPodModule.py:909 msgid "TV Show" msgstr "TV-program" #: ../conduit/modules/iPodModule/iPodModule.py:911 msgid "Video kind" msgstr "Videotyp" #. Translators: Translate this in derived classes. #: ../conduit/modules/N800Module/N800Module.py:55 msgid "Conduit" msgstr "Conduit" #: ../conduit/modules/N800Module/N800Module.py:105 msgid "N800 Files" msgstr "N800-filer" #: ../conduit/modules/N800Module/N800Module.py:106 msgid "Synchronizes files/folders to a N800 device" msgstr "Synkronisera filer/mappar till en N800-enhet" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:111 msgid "Backups" msgstr "Säkerhetskopior" #: ../conduit/modules/N800Module/N800Module.py:126 msgid "N800 Music" msgstr "N800 Musik" #: ../conduit/modules/N800Module/N800Module.py:127 msgid "Synchronizes music to a N800 device" msgstr "Synkroniserar musik till en N800-enhet" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:133 msgid "Music" msgstr "Musik" #: ../conduit/modules/N800Module/N800Module.py:150 msgid "N800 Videos" msgstr "N800-videor" #: ../conduit/modules/N800Module/N800Module.py:151 msgid "Synchronizes video to a N800 device" msgstr "Synkroniserar videor till en N800-enhet" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:157 msgid "Video" msgstr "Video" #: ../conduit/modules/N800Module/N800Module.py:174 msgid "N800 Photos" msgstr "N800 Foton" #: ../conduit/modules/N800Module/N800Module.py:175 msgid "Synchronizes photos to an N800 device" msgstr "Synkroniserar bilder till en N800-enhet" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:181 msgid "Photo" msgstr "Foto" #: ../conduit/modules/NautilusBookmarksModule.py:19 msgid "Nautilus Bookmarks" msgstr "Nautilus-bokmärken" #: ../conduit/modules/NautilusBookmarksModule.py:20 msgid "Sync your Nautilus Bookmarks" msgstr "Synkronisera dina Nautilus-bokmärken" #: ../conduit/modules/NautilusBookmarksModule.py:145 msgid "Sync bookmarks to local places/files" msgstr "Synkronisera bokmärken till lokala platser/filer" #: ../conduit/modules/NautilusBookmarksModule.py:148 msgid "Sync bookmarks to remote places/files" msgstr "Synkronisera bokmärken till fjärrplatser/-filer" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "Nätverk" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "Aktivera synkronisering via nätverk" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:44 msgid "Rhythmbox Music" msgstr "Rhythmbox-musik" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:45 msgid "Synchronize songs from your Rhythmbox playlists" msgstr "Synkronisera låtar från dina Rhythmbox-spellistor" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 msgid "Shutterfly" msgstr "Shutterfly" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 msgid "Synchronize your Shutterfly photos" msgstr "Synkronisera dina Shutterfly-foton" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "%Y-%m-%d %H.%M.%S" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 msgid "SmugMug" msgstr "SmugMug" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 msgid "Synchronize your SmugMug.com photos" msgstr "Synkronisera dina SmugMug.com-foton" #: ../conduit/modules/SynceModule.py:139 msgid "Create Partnership" msgstr "Skapa partnerskap" #: ../conduit/modules/SynceModule.py:312 msgid "Windows Mobile Contacts" msgstr "Windows Mobile-kontakter" #: ../conduit/modules/SynceModule.py:450 msgid "Windows Mobile Calendar" msgstr "Windows Mobile-kalender" #: ../conduit/modules/SynceModule.py:459 msgid "Tasks" msgstr "Uppgifter" #: ../conduit/modules/SynceModule.py:460 msgid "Windows Mobile Tasks" msgstr "Windows Mobile-uppgifter" #: ../conduit/modules/ZotoModule/ZotoModule.py:154 msgid "Zoto" msgstr "Zoto" #: ../conduit/modules/ZotoModule/ZotoModule.py:155 msgid "Synchronize your Zoto photos" msgstr "Synkronisera dina Zoto-foton" #~ msgid "Default Synchronization Options" #~ msgstr "Standardalternativ för synkronisering" #~ msgid "General" #~ msgstr "Allmänt" #~ msgid "Always Up-To-Date" #~ msgstr "Alltid uppdaterad" #~ msgid "Ask Me What to Do" #~ msgstr "Fråga mig vad som ska göras" #~ msgid "Ask me what to do" #~ msgstr "Fråga mig vad som ska göras" #~ msgid "Cancel Synchronization" #~ msgstr "Avbryt synkronisering" #~ msgid "Cancel currently-synchronizing groups" #~ msgstr "Avbryt aktuella synkroniseringsgrupper" #~ msgid "Clear Canvas" #~ msgstr "Töm" #~ msgid "Compare" #~ msgstr "Jämför" #~ msgid "Conduit Preferences" #~ msgstr "Inställningar för Conduit" #~ msgid "Configuration" #~ msgstr "Konfiguration" #~ msgid "Configure Item" #~ msgstr "Konfigurera objekt" #~ msgid "Configure the synchronization settings for this item" #~ msgstr "Konfigurera synkroniseringsinställningar för det här objektet" #~ msgid "Conflict Options" #~ msgstr "Alternativ för konflikter" #~ msgid "Conflicts" #~ msgstr "Konflikter" #~ msgid "Contents" #~ msgstr "Innehåll" #~ msgid "Data Conversions" #~ msgstr "Datakonverteringar" #~ msgid "Data Providers" #~ msgstr "Dataleverantörer" #~ msgid "Delete Group" #~ msgstr "Ta bort grupp" #~ msgid "Delete Item" #~ msgstr "Ta bort objekt" #~ msgid "Delete Options" #~ msgstr "Alternativ för borttagning" #~ msgid "Delete from the corresponding sink" #~ msgstr "Ta bort från motsvarande sink" #~ msgid "Delete the Corresponding Item" #~ msgstr "Ta bort motsvarande objekt" #~ msgid "Editor" #~ msgstr "Redigerare" #~ msgid "Minimize to notification area" #~ msgstr "Minimera till notifieringsyta" #~ msgid "Refresh Group" #~ msgstr "Uppdatera grupp" #~ msgid "Refresh Item" #~ msgstr "Uppdatera objekt" #~ msgid "Replace the Older Item" #~ msgstr "Ersätt det äldre objektet" #~ msgid "Replace the older item" #~ msgstr "Ersätt det äldre objektet" #~ msgid "Resolve Conflicts" #~ msgstr "Lös konflikter" #~ msgid "Save settings on exit" #~ msgstr "Spara inställningar vid avslut" #~ msgid "Show Hints" #~ msgstr "Visa tips" #~ msgid "Show status icon" #~ msgstr "Visa statusikon" #~ msgid "Skip" #~ msgstr "Hoppa över" #~ msgid "Slow Synchronization" #~ msgstr "Långsam synkronisering" #~ msgid "Start Conduit at login" #~ msgstr "Starta Conduit vid inloggning" #~ msgid "Synchronization Options" #~ msgstr "Alternativ för synkronisering" #~ msgid "Synchronize All" #~ msgstr "Synkronisera allt" #~ msgid "Synchronize Group" #~ msgstr "Synkronisera grupp" #~ msgid "Synchronize group" #~ msgstr "Synkronisera grupp" #~ msgid "Synchronizes all groups" #~ msgstr "Synkroniserar alla grupper" #~ msgid "Title" #~ msgstr "Titel" #~ msgid "Two-Way Synchronization" #~ msgstr "Tvåvägssynkronisering" #~ msgid "When an item has been deleted:" #~ msgstr "När ett objekt har tagits bort:" #~ msgid "When an item is deleted..." #~ msgstr "När ett objekt tas bort..." #~ msgid "When there is a conflict..." #~ msgstr "När en konflikt inträffar..." #~ msgid "When there is a two-way conflict:" #~ msgstr "När en tvåvägskonflikt inträffar:" #~ msgid "_Edit" #~ msgstr "R_edigera" #~ msgid "_File" #~ msgstr "_Arkiv" #~ msgid "_Help" #~ msgstr "_Hjälp" #~ msgid "Account Details" #~ msgstr "Kontodetaljer" #~ msgid "Calendar:" #~ msgstr "Kalender:" #~ msgid "Email:" #~ msgstr "E-post:" #~ msgid "Load Calendars" #~ msgstr "Läs in kalendrar" #~ msgid "Password:" #~ msgstr "Lösenord:" #~ msgid "Downloaded Document Format" #~ msgstr "Hämtade dokumentformat" #~ msgid "Presentations" #~ msgstr "Presentationer" #~ msgid "Spreadsheets" #~ msgstr "Kalkylblad" #~ msgid "Favorites of above user" #~ msgstr "Favoriter för ovanstående användare" #~ msgid "Max retrieved videos (0 is unlimited):" #~ msgstr "Maximalt hämtade videor (0 är obegränsat):" #~ msgid "Top rated" #~ msgstr "Högst betygsatta" #~ msgid "Uploaded by above user" #~ msgstr "Uppskickad av ovanstående användare" #~ msgid "YouTube Source" #~ msgstr "YouTube-källa" #~ msgid "Items to Synchronize" #~ msgstr "Objekt att synkronisera" #~ msgid "Add Directory" #~ msgstr "Lägg till katalog" #~ msgid "Add File" #~ msgstr "Lägg till fil" #~ msgid "Advanced" #~ msgstr "Avancerat" #~ msgid "File Configuration" #~ msgstr "Filkonfiguration" #~ msgid "Folder Configuration" #~ msgstr "Mappkonfiguration" #~ msgid "Folder Location:" #~ msgstr "Mapplats:" #~ msgid "Follow Symbolic Links" #~ msgstr "Följ symboliska länkar" #~ msgid "Ignore File Modification Times" #~ msgstr "Ignorera filändringstider" #~ msgid "Include Hidden Files" #~ msgstr "Inkludera dolda filer" #~ msgid "Select A Folder" #~ msgstr "Välj en mapp" #~ msgid "Connection Settings" #~ msgstr "Anslutningsinställningar" #~ msgid "Storage Location" #~ msgstr "Lagringsplats" #~ msgid "AWS Access Key:" #~ msgstr "Åtkomstnyckel för AWS:" #~ msgid "AWS Secret Access Key:" #~ msgstr "Hemlig åtkomstnyckel för AWS:" #~ msgid "Amazon S3" #~ msgstr "Amazon S3" #~ msgid "Bucket name:" #~ msgstr "Bucket-namn:" #~ msgid "Use SSL:" #~ msgstr "Använd SSL:" #~ msgid "" #~ "Yes\n" #~ "No" #~ msgstr "" #~ "Ja\n" #~ "Nej" #~ msgid "Saved Note Settings" #~ msgstr "Inställningar för sparad anteckning" #~ msgid "Backpack" #~ msgstr "Backpack" #~ msgid "Enabled" #~ msgstr "Aktiverad" #~ msgid "Return Playlists" #~ msgstr "Returnera spellistor" #~ msgid "Banshee" #~ msgstr "Banshee" conduit-0.3.17/po/it.po0000644000175000017500000010445111321403566011570 00000000000000# Italian translation of Conduit. # Copyright (C) 2007 Free Software Foundation, Inc. # This file is distributed under the same license as the Conduit package. # Gianvito Cavasoli , 2007, 2008, 2009. # # msgid "" msgstr "" "Project-Id-Version: Conduit 0.3.x\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=conduit&component=documentation and translation\n" "POT-Creation-Date: 2009-09-21 00:14+0000\n" "PO-Revision-Date: 2009-10-05 14:01+0200\n" "Last-Translator: Gianvito Cavasoli \n" "Language-Team: Italian \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" #: ../data/conduit.desktop.in.in.h:1 msgid "Conduit Synchronizer" msgstr "Sincronizzatore Conduit" #: ../data/conduit.desktop.in.in.h:2 msgid "Synchronization for GNOME" msgstr "Sincronizzazione per GNOME" #: ../data/conduit.glade.h:1 msgid "Default Synchronization Options" msgstr "Opzioni di sincronizzazione predefinite" #: ../data/conduit.glade.h:2 msgid "General" msgstr "Generale" #: ../data/conduit.glade.h:3 msgid "Always Up-To-Date" msgstr "Sempre aggiornato" #: ../data/conduit.glade.h:4 msgid "Ask Me What to Do" msgstr "Chiedi cosa fare" #: ../data/conduit.glade.h:5 msgid "Ask me what to do" msgstr "Chiedere cosa fare" #: ../data/conduit.glade.h:6 msgid "Cancel Synchronization" msgstr "Annulla sincronizzazione" #: ../data/conduit.glade.h:7 msgid "Cancel currently-synchronizing groups" msgstr "Annulla i gruppi attualmente in sincronizzazione" #: ../data/conduit.glade.h:8 msgid "Clear Canvas" msgstr "Svuota riquadro" #: ../data/conduit.glade.h:9 msgid "Compare" msgstr "Compara" #: ../data/conduit.glade.h:10 msgid "Conduit Preferences" msgstr "Preferenze di Conduit" #: ../data/conduit.glade.h:11 msgid "Configuration" msgstr "Configurazione" #: ../data/conduit.glade.h:12 msgid "Configure Item" msgstr "Configura elemento" #: ../data/conduit.glade.h:13 msgid "Configure the synchronization settings for this item" msgstr "Configura le impostazioni di sincronizzazione per questo oggetto" #: ../data/conduit.glade.h:14 msgid "Conflict Options" msgstr "Opzioni dei conflitti" #: ../data/conduit.glade.h:15 msgid "Conflicts" msgstr "Conflitti" #: ../data/conduit.glade.h:16 msgid "Contents" msgstr "Sommario" #: ../data/conduit.glade.h:17 msgid "Data Conversions" msgstr "Conversione dati" #: ../data/conduit.glade.h:18 msgid "Data Providers" msgstr "Sorgenti dati" #: ../data/conduit.glade.h:19 msgid "Delete Group" msgstr "Elimina gruppo" #: ../data/conduit.glade.h:20 msgid "Delete Item" msgstr "Elimina elemento" #: ../data/conduit.glade.h:21 msgid "Delete Options" msgstr "Opzioni di eliminazione" #: ../data/conduit.glade.h:22 msgid "Delete from the corresponding sink" msgstr "Eliminare dalla sincronizzazione corrispondente" #: ../data/conduit.glade.h:23 msgid "Delete the Corresponding Item" msgstr "Elimina l'oggetto corrispondente" #: ../data/conduit.glade.h:24 msgid "Editor" msgstr "Editor" #: ../data/conduit.glade.h:25 msgid "Minimize to notification area" msgstr "Minimizzare nell'area di notifica" #: ../data/conduit.glade.h:26 msgid "Refresh Group" msgstr "Aggiorna gruppo" #: ../data/conduit.glade.h:27 msgid "Refresh Item" msgstr "Aggiorna elemento" #: ../data/conduit.glade.h:28 msgid "Replace the Older Item" msgstr "Rimpiazza l'elemento più vecchio" #: ../data/conduit.glade.h:29 msgid "Replace the older item" msgstr "Rimpiazzare l'elemento più vecchio" #: ../data/conduit.glade.h:30 msgid "Resolve Conflicts" msgstr "Risolvere conflitti" #: ../data/conduit.glade.h:31 msgid "Save settings on exit" msgstr "Salvare impostazioni all'uscita" #: ../data/conduit.glade.h:32 msgid "Show Hints" msgstr "Mostrare suggerimenti" #: ../data/conduit.glade.h:33 msgid "Show status icon" msgstr "Mostrare icona di stato" #: ../data/conduit.glade.h:34 msgid "Skip" msgstr "Ignora" #: ../data/conduit.glade.h:35 msgid "Slow Synchronization" msgstr "Sincronizzazione lenta" #: ../data/conduit.glade.h:36 msgid "Start Conduit at login" msgstr "Avviare l'applicazione all'accesso" #: ../data/conduit.glade.h:37 msgid "Synchronization Options" msgstr "Opzioni di sincronizzazione" #: ../data/conduit.glade.h:38 msgid "Synchronize All" msgstr "Sincronizza tutto" #: ../data/conduit.glade.h:39 msgid "Synchronize Group" msgstr "Sincronizza gruppo" #: ../data/conduit.glade.h:40 msgid "Synchronize group" msgstr "Sincronizza il gruppo" #: ../data/conduit.glade.h:41 msgid "Synchronizes all groups" msgstr "Sincronizza tutti i gruppi" #: ../data/conduit.glade.h:42 msgid "Title" msgstr "Titolo" #: ../data/conduit.glade.h:43 msgid "Two-Way Synchronization" msgstr "Sincronizzazione a due vie" #: ../data/conduit.glade.h:44 msgid "When an item has been deleted:" msgstr "Quando un oggetto è stato eliminato:" #: ../data/conduit.glade.h:45 msgid "When an item is deleted..." msgstr "Quando un oggetto viene eliminato..." #: ../data/conduit.glade.h:46 msgid "When there is a conflict..." msgstr "Quando si riscontra un conflitto..." #: ../data/conduit.glade.h:47 msgid "When there is a two-way conflict:" msgstr "Quando si riscontra un conflitto a due vie:" #: ../data/conduit.glade.h:48 msgid "_Edit" msgstr "_Modifica" #: ../data/conduit.glade.h:49 msgid "_File" msgstr "_File" #: ../data/conduit.glade.h:50 msgid "_Help" msgstr "A_iuto" #: ../conduit/Knowledge.py:8 msgid "What Do You Want to Synchronize?" msgstr "Cosa sincronizzare?" #: ../conduit/Knowledge.py:9 msgid "Drag and Drop a Data Provider on the Canvas" msgstr "Trascinare e rilasciare una sorgente dati nel riquadro" #: ../conduit/Knowledge.py:11 msgid "Synchronization Group Created" msgstr "Gruppo di sincronizzazione creato" #: ../conduit/Knowledge.py:12 msgid "Add Another Data Provider to the Group to Synchronize it" msgstr "Aggiungere al gruppo un'altra sorgente dati per sincronizzarlo" #: ../conduit/Knowledge.py:14 msgid "You Are Now Ready to Synchronize" msgstr "Pronto per la sincronizzazione" #: ../conduit/Knowledge.py:15 msgid "Right Click on Group for Options" msgstr "Fare clic col pulsante destro sul gruppo per le opzioni" #. source,sinc #comment #. twoway #: ../conduit/Knowledge.py:22 msgid "Synchronize Two Folders" msgstr "Sincronizzare due cartelle" #: ../conduit/Knowledge.py:24 msgid "Backup Folder to Box.net" msgstr "Backup della cartella su Box.net" #: ../conduit/Knowledge.py:26 msgid "Synchronize Tagged F-Spot Photos to Flickr" msgstr "Sincronizzare le foto etichettate di F-Spot su Flickr" #: ../conduit/Main.py:59 msgid "Conduit is a synchronization application." msgstr "Conduit è un'applicazione di sincronizzazione." #: ../conduit/Main.py:63 #, python-format msgid "Launch without GUI. [default: %default]" msgstr "Lancia senza l'interfaccia grafica [predefinito: %default]" #: ../conduit/Main.py:67 #, python-format msgid "Save dataprovider configuration to FILE. [default: %default]" msgstr "" "Salva la configurazione della sorgente dati in FILE [predefinito: %default]" #: ../conduit/Main.py:71 #, python-format msgid "Iconify on startup. [default: %default]" msgstr "Avvia ridotto a icona [predefinito: %default]" #: ../conduit/Main.py:75 #, python-format msgid "Run with the specified UI. [default: %default]" msgstr "Avvia con l'interfaccia specificata [predefinito:%default]" #: ../conduit/Main.py:79 msgid "Only load modules in the named files. [default: load all modules]" msgstr "" "Carica solo i moduli nei file nominati [predefinito: carica tutti i moduli]" #: ../conduit/Main.py:83 msgid "Do not load modules in the named files. [default: load all modules]" msgstr "" "Non carica i moduli nei file nominati [predefinito: carica tutti i moduli]" #: ../conduit/Main.py:87 msgid "" "Explicitly set internal Conduit settings (keys) to the given values for this " "session. [default: do not set]" msgstr "" "Esplicitamente regola impostazioni interne (key) dell'applicazione ai valori " "dati per questa sessione [predefinito: non impostato]" #: ../conduit/Main.py:91 #, python-format msgid "" "Enable loading of unfinished or unsupported dataproviders. [default: %" "default]" msgstr "" "Abilita il caricamento delle sorgenti dati incompiute o non supportate " "[predefinito: %default]" #: ../conduit/Main.py:95 #, python-format msgid "Generate more debugging information. [default: %default]" msgstr "Genera maggiori informazioni di debug [predefinito: %default]" #: ../conduit/Main.py:99 #, python-format msgid "Generate less debugging information. [default: %default]" msgstr "Genera minori informazioni di debug [predefinito: %default]" #: ../conduit/Main.py:103 #, python-format msgid "Generate no debugging information. [default: %default]" msgstr "Non genera informazioni di debug [predefinito: %default]" #: ../conduit/dataproviders/DataProvider.py:22 msgid "Ready" msgstr "Pronto" #: ../conduit/dataproviders/DataProvider.py:23 msgid "New data to sync" msgstr "Nuovi dati da sincronizzare" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Refreshing..." msgstr "Aggiornamento..." #: ../conduit/dataproviders/DataProvider.py:25 msgid "Refreshed OK" msgstr "Aggiornamento eseguito" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Refreshing" msgstr "Errore di aggiornamento" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronizing..." msgstr "Sincronizzazione..." #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronized OK" msgstr "Sincronizzazione eseguita" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Error Synchronizing" msgstr "Errore di sincronizzazione" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Synchronization Skipped" msgstr "Sincronizzazione ignorata" #: ../conduit/dataproviders/DataProvider.py:31 msgid "Synchronization Cancelled" msgstr "Sincronizzazione annullata" #: ../conduit/dataproviders/DataProvider.py:32 msgid "Synchronization Conflict" msgstr "Conflitto di sincronizzazione" #: ../conduit/dataproviders/DataProvider.py:33 msgid "Not Configured" msgstr "Non configurata" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "640x480" msgstr "640×480" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "800x600" msgstr "800×600" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "1024x768" msgstr "1024×768" #. Signifies that a conversion should not take place #: ../conduit/dataproviders/Image.py:35 #: ../conduit/modules/N800Module/N800Module.py:57 msgid "None" msgstr "Nulla da fare" #. Default Categories for the DataProviders #: ../conduit/dataproviders/__init__.py:6 msgid "Files and Folders" msgstr "File e cartelle" #: ../conduit/dataproviders/__init__.py:7 #: ../conduit/modules/iPodModule/iPodModule.py:179 msgid "Notes" msgstr "Note" #: ../conduit/dataproviders/__init__.py:8 #: ../conduit/modules/iPodModule/iPodModule.py:367 msgid "Photos" msgstr "Foto" #: ../conduit/dataproviders/__init__.py:9 msgid "Office" msgstr "Ufficio" #: ../conduit/dataproviders/__init__.py:10 msgid "Settings" msgstr "Impostazioni" #: ../conduit/dataproviders/__init__.py:11 msgid "Miscellaneous" msgstr "Varie" #: ../conduit/dataproviders/__init__.py:12 msgid "Media" msgstr "Multimediale" #: ../conduit/dataproviders/__init__.py:13 msgid "Bookmarks" msgstr "Segnalibri" #: ../conduit/dataproviders/__init__.py:14 msgid "Test" msgstr "Test" #: ../conduit/gtkui/Canvas.py:152 msgid "Drag a Data Provider here to continue" msgstr "Trascinare e rilasciare qui una sorgente dati per continuare" #: ../conduit/gtkui/Canvas.py:217 msgid "Show me" msgstr "Mostra" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:91 msgid "Source" msgstr "Sorgente" #: ../conduit/gtkui/ConflictResolver.py:105 msgid "Resolution" msgstr "Risoluzione" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:110 msgid "Sink" msgstr "Sincronia" #: ../conduit/gtkui/ConflictResolver.py:150 #: ../conduit/gtkui/ConflictResolver.py:151 #, python-format msgid "Conflicts (%s)" msgstr "Conflitti (%s)" #. name, #url #: ../conduit/gtkui/UI.py:33 msgid "Introduction" msgstr "Introduzione" #: ../conduit/gtkui/UI.py:34 msgid "Writing a Data Provider" msgstr "Creare una sorgente dati" #: ../conduit/gtkui/UI.py:35 msgid "API Documentation" msgstr "Documentazione delle API" #: ../conduit/gtkui/UI.py:36 msgid "Test Results" msgstr "Risultati test" #: ../conduit/gtkui/UI.py:129 #, python-format msgid " - %s (Development Version)" msgstr " - %s (Versione di sviluppo)" #: ../conduit/gtkui/UI.py:131 msgid " - Running Uninstalled" msgstr " - In esecuzione non installato" #: ../conduit/gtkui/UI.py:165 msgid "Examples" msgstr "Esempi" #: ../conduit/gtkui/UI.py:177 msgid "Developers" msgstr "Sviluppatori" #. Build some liststores to display #: ../conduit/gtkui/UI.py:318 msgid "Convert from" msgstr "Converti da" #: ../conduit/gtkui/UI.py:319 msgid "into" msgstr "in" #: ../conduit/gtkui/UI.py:370 msgid "Relationship Database" msgstr "Database relazionale" #: ../conduit/gtkui/UI.py:374 msgid "Conversions Available" msgstr "Convertitori disponibili" #: ../conduit/gtkui/UI.py:380 ../conduit/gtkui/Tree.py:348 #: ../conduit/modules/FileModule/FileConfiguration.py:117 msgid "Name" msgstr "Nome" #: ../conduit/gtkui/UI.py:384 msgid "Loaded" msgstr "Caricato" #: ../conduit/gtkui/UI.py:512 ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "Sincronizzazione in corso. Annullare?" #: ../conduit/gtkui/UI.py:684 msgid "_Synchronize All" msgstr "Sincroniz_za tutto" #: ../conduit/gtkui/UI.py:684 msgid "Synchronizes All Groups" msgstr "Sincronizza tutti i gruppi" #: ../conduit/gtkui/UI.py:685 msgid "_Cancel Synchronization" msgstr "_Annulla sincronizzazione" #: ../conduit/gtkui/UI.py:685 msgid "Cancels Currently Synchronizing Groups" msgstr "Annulla i gruppi attualmente in sincronizzazione" #: ../conduit/gtkui/UI.py:686 msgid "_Quit" msgstr "_Esci" #: ../conduit/gtkui/UI.py:686 msgid "Close Conduit" msgstr "Chiude l'applicazione" #: ../conduit/gtkui/UI.py:726 msgid "Synchronization Error" msgstr "Errore di sincronizzazione" #: ../conduit/gtkui/UI.py:729 msgid "Synchronization Complete" msgstr "Sincronizzazione completa" #: ../conduit/gtkui/UI.py:745 msgid "Synchronizing" msgstr "Sincronizzazione" #: ../conduit/gtkui/Tree.py:357 msgid "Description" msgstr "Descrizione" #: ../conduit/gtkui/ConfigItems.py:734 #, python-format msgid "Total: %d" msgstr "Totale: %d" #: ../conduit/gtkui/WindowConfigurator.py:14 msgid "Configure" msgstr "Configura" #: ../conduit/modules/BackpackModule/BackpackModule.py:58 msgid "Backpack Notes" msgstr "Backpack Notes" #: ../conduit/modules/BackpackModule/BackpackModule.py:59 msgid "Store things in Backpack Notes" msgstr "Salva oggetti su Backpack Notes" #: ../conduit/modules/BackpackModule/BackpackModule.py:105 #: ../conduit/modules/FlickrModule/FlickrModule.py:307 #: ../conduit/modules/ZotoModule/ZotoModule.py:243 msgid "Account details" msgstr "Dettagli account" #: ../conduit/modules/BackpackModule/BackpackModule.py:106 msgid "Login" msgstr "Accesso" #: ../conduit/modules/BackpackModule/BackpackModule.py:109 msgid "API key" msgstr "Chiave API" #: ../conduit/modules/BackpackModule/BackpackModule.py:112 msgid "Saved notes" msgstr "Note salvate" #: ../conduit/modules/BackpackModule/BackpackModule.py:113 msgid "Save notes in page" msgstr "Salva note nella pagina" #: ../conduit/modules/BansheeModule/BansheeModule.py:52 msgid "Banshee Playlists" msgstr "Scalette di Banshee" #: ../conduit/modules/BansheeModule/BansheeModule.py:53 msgid "Synchronize your Banshee playlists" msgstr "Sincronizza le scalette di Banshee" #: ../conduit/modules/BansheeModule/BansheeModule.py:187 #: ../conduit/modules/BansheeModule/BansheeModule.py:188 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:116 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:117 msgid "Playlists" msgstr "Scalette" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 msgid "Box.net" msgstr "Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 msgid "Synchronize your Box.net files" msgstr "Sincronizza file su Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:290 #: ../conduit/modules/FileModule/FileModule.py:82 msgid "Folder" msgstr "Cartella" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:291 msgid "Folder name" msgstr "Nome cartella" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:295 msgid "Load folders" msgstr "Carica cartelle" #: ../conduit/modules/ConverterModule.py:91 msgid "Note-" msgstr "Note-" #: ../conduit/modules/DesktopWallpaperModule.py:38 msgid "Wallpaper" msgstr "Sfondo" #: ../conduit/modules/DesktopWallpaperModule.py:39 msgid "Changes your Desktop Wallpaper" msgstr "Cambia lo sfondo della scrivania" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:107 #, python-format msgid "Select %s" msgstr "Seleziona %s" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:127 msgid "Evolution Contacts" msgstr "Contatti di Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:128 msgid "Synchronize your contacts" msgstr "Sincronizza i contatti" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:178 msgid "Evolution Calendar" msgstr "Calendario di Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:179 msgid "Synchronize your calendar" msgstr "Sincronizza il calendario" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:240 msgid "Evolution Tasks" msgstr "Attività di Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:241 msgid "Synchronize your tasks" msgstr "Sincronizza le attività" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:297 msgid "Evolution Memos" msgstr "Memo di Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:298 msgid "Synchronize your memos" msgstr "Sincronizza i memo" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 msgid "Facebook" msgstr "Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:39 msgid "Synchronize your Facebook photos" msgstr "Sincronizza le foto di Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:124 #: ../conduit/modules/FlickrModule/FlickrModule.py:282 msgid "Loading album list..." msgstr "Caricamento elenco album..." #: ../conduit/modules/FacebookModule/FacebookModule.py:128 msgid "Failed to connect" msgstr "Connessione non riuscita" #: ../conduit/modules/FacebookModule/FacebookModule.py:131 msgid "Logged in" msgstr "Accesso eseguito" #: ../conduit/modules/FacebookModule/FacebookModule.py:133 msgid "Failed to login" msgstr "Accesso non riuscito" #: ../conduit/modules/FacebookModule/FacebookModule.py:145 #: ../conduit/modules/FspotModule/FspotModule.py:243 msgid "Status" msgstr "Stato" #: ../conduit/modules/FacebookModule/FacebookModule.py:150 #: ../conduit/modules/iPodModule/iPodModule.py:461 #: ../conduit/modules/ZotoModule/ZotoModule.py:252 msgid "Album" msgstr "Album" #: ../conduit/modules/FacebookModule/FacebookModule.py:151 msgid "Album name" msgstr "Nome album" #: ../conduit/modules/FacebookModule/FacebookModule.py:156 msgid "Load albums" msgstr "Carica album" #: ../conduit/modules/FeedModule/FeedModule.py:58 msgid "RSS Feed" msgstr "Notiziario RSS" #: ../conduit/modules/FeedModule/FeedModule.py:59 msgid "Synchronize data from RSS enclosures" msgstr "Sincronizza i dati da allegati RSS" #. FIXME: Add Randomize #: ../conduit/modules/FeedModule/FeedModule.py:114 msgid "Feed details" msgstr "Dettagli notiziario" #: ../conduit/modules/FeedModule/FeedModule.py:115 msgid "Feed address" msgstr "Indirizzo notiziario" #: ../conduit/modules/FeedModule/FeedModule.py:118 msgid "Enclosure settings" msgstr "Impostazioni allegati" #: ../conduit/modules/FeedModule/FeedModule.py:119 msgid "Limit downloaded enclosures" msgstr "Limitare scaricamento allegati" #: ../conduit/modules/FeedModule/FeedModule.py:125 msgid "Limit to" msgstr "Limitare a" #: ../conduit/modules/FeedModule/FeedModule.py:129 msgid "Randomize enclosures" msgstr "Ordine casuale degli allegati" #: ../conduit/modules/FeedModule/FeedModule.py:133 msgid "Download types" msgstr "Scaricare i tipi" #: ../conduit/modules/FeedModule/FeedModule.py:134 msgid "Download audio files" msgstr "Scaricare i file audio" #: ../conduit/modules/FeedModule/FeedModule.py:135 msgid "Download video files" msgstr "Scaricare i file video" #: ../conduit/modules/FeedModule/FeedModule.py:136 msgid "Download photo files" msgstr "Scaricare i file di foto" #: ../conduit/modules/FileModule/FileConfiguration.py:111 msgid "Icon" msgstr "Icona" #: ../conduit/modules/FileModule/FileConfiguration.py:123 #: ../conduit/modules/GConfModule/GConfModule.py:138 msgid "Items" msgstr "Elementi" #: ../conduit/modules/FileModule/FileConfiguration.py:149 #, python-format msgid "Contains %s files" msgstr "Contiene %s file" #: ../conduit/modules/FileModule/FileConfiguration.py:248 msgid "Include file..." msgstr "Includi file..." #: ../conduit/modules/FileModule/FileConfiguration.py:258 msgid "All files" msgstr "Tutti i file" #: ../conduit/modules/FileModule/FileConfiguration.py:271 msgid "Include folder..." msgstr "Includi cartella..." #: ../conduit/modules/FileModule/FileConfiguration.py:314 msgid "Please Name All Folders" msgstr "Dare un nome a tutte le cartelle" #: ../conduit/modules/FileModule/FileConfiguration.py:315 msgid "" "All folders require a descriptive name. To name a folder simply click on it" msgstr "" "Tutte le cartelle richiedono un nome descrittivo. Per rinominare una " "cartella fare clic su di essa." #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "File" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "Sorgente per la sincronizzazione di file multipli" #: ../conduit/modules/FileModule/FileModule.py:83 msgid "Synchronize folders" msgstr "Sincronizza cartelle" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:40 msgid "Firefox 3 Bookmarks" msgstr "Segnalibri di Firefox 3" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:41 msgid "Syncronize your Firefox 3 Bookmarks" msgstr "Sincronizza i segnalibri di Firefox 3" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:100 msgid "Firefox Profile" msgstr "Profilo Firefox" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 msgid "Flickr" msgstr "Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 msgid "Synchronize your Flickr.com photos" msgstr "Sincronizza le foto di Flickr.com" #: ../conduit/modules/FlickrModule/FlickrModule.py:287 msgid "Failed to connect." msgstr "Connessione non riuscita." #: ../conduit/modules/FlickrModule/FlickrModule.py:290 msgid "Album names loaded." msgstr "Nomi degli album caricati." #: ../conduit/modules/FlickrModule/FlickrModule.py:292 msgid "Failed to login." msgstr "Accesso non riuscito." #: ../conduit/modules/FlickrModule/FlickrModule.py:303 msgid "Logging in, please wait..." msgstr "Accesso, attendere..." #: ../conduit/modules/FlickrModule/FlickrModule.py:308 #: ../conduit/modules/GoogleBookmarksModule.py:67 #: ../conduit/modules/ZotoModule/ZotoModule.py:244 msgid "Username" msgstr "Nome utente" #: ../conduit/modules/FlickrModule/FlickrModule.py:319 msgid "Authenticate" msgstr "Autentica" #: ../conduit/modules/FlickrModule/FlickrModule.py:323 #: ../conduit/modules/ZotoModule/ZotoModule.py:251 msgid "Saved photo settings" msgstr "Impostazioni foto salvate" #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "Resize photos" msgstr "Ridimensiona foto" #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "Do not resize" msgstr "Non ridimensionare" #: ../conduit/modules/FlickrModule/FlickrModule.py:332 msgid "Photos are public" msgstr "Rendere le foto pubbliche" #: ../conduit/modules/FspotModule/FspotModule.py:25 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 msgid "Synchronize your F-Spot photos" msgstr "Sincronizza le foto di F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:152 msgid "F-Spot DBus interface is operating in read-only mode" msgstr "L'interfaccia DBus di F-Spot è in esecuzione in modalità solo lettura" #: ../conduit/modules/FspotModule/FspotModule.py:218 msgid "F-Spot is running" msgstr "F-Spot è in esecuzione" #: ../conduit/modules/FspotModule/FspotModule.py:219 msgid "Please start F-Spot or activate the D-Bus Extension" msgstr "Avviare F-Spot o attivare l'estensione D-Bus" #: ../conduit/modules/FspotModule/FspotModule.py:244 msgid "Start F-Spot" msgstr "Avvia F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:248 #: ../conduit/modules/FspotModule/FspotModule.py:249 msgid "Tags" msgstr "Etichette" #: ../conduit/modules/FspotModule/FspotModule.py:262 msgid "Add tags" msgstr "Aggiungi etichette" #: ../conduit/modules/FspotModule/FspotModule.py:263 msgid "Tag name" msgstr "Nome etichetta" #: ../conduit/modules/FspotModule/FspotModule.py:266 msgid "Add tag" msgstr "Aggiungi etichetta" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "Application Settings" msgstr "Impostazioni applicazioni" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Synchronize your application settings" msgstr "Sincronizza le impostazioni delle applicazioni" #: ../conduit/modules/GConfModule/GConfModule.py:31 msgid "Metacity" msgstr "Metacity" #: ../conduit/modules/GConfModule/GConfModule.py:32 msgid "Nautilus" msgstr "Nautilus" #: ../conduit/modules/GConfModule/GConfModule.py:33 msgid "Preferred Applications" msgstr "Applicazioni preferite" #: ../conduit/modules/GConfModule/GConfModule.py:34 msgid "Desktop Interface" msgstr "Aspetto del desktop" #: ../conduit/modules/GConfModule/GConfModule.py:35 msgid "Gnome Terminal" msgstr "Terminale di GNOME" #: ../conduit/modules/GConfModule/GConfModule.py:137 msgid "Applications to Synchronize" msgstr "Applicazioni da sincronizzare" #: ../conduit/modules/GoogleBookmarksModule.py:19 msgid "Google Bookmarks" msgstr "Segnalibri Google" #: ../conduit/modules/GoogleBookmarksModule.py:20 msgid "Sync your Google Bookmarks" msgstr "Sincronizza Segnalibri Google" #: ../conduit/modules/GoogleBookmarksModule.py:66 msgid "Login Details" msgstr "Dettagli di accesso" #: ../conduit/modules/GoogleBookmarksModule.py:70 #: ../conduit/modules/ZotoModule/ZotoModule.py:247 msgid "Password" msgstr "Password" #: ../conduit/modules/GoogleModule/GoogleModule.py:399 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:4 msgid "Google Calendar" msgstr "Google Calendar" #: ../conduit/modules/GoogleModule/GoogleModule.py:400 msgid "Synchronize your Google Calendar" msgstr "Sincronizza Google Calendar" #: ../conduit/modules/GoogleModule/GoogleModule.py:582 msgid "Picasa" msgstr "Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:583 msgid "Synchronize your Google Picasa photos" msgstr "Sincronizza le foto di Google Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:745 msgid "Google Contacts" msgstr "Contatti Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:746 msgid "Synchronize your Google Mail contacts" msgstr "Sincronizza Contatti Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:1076 msgid "Google Documents" msgstr "Documenti Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:1077 msgid "Synchronize your Google Documents" msgstr "Sincronizza Documenti Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:1322 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:69 msgid "Unknown" msgstr "Sconosciuto" #: ../conduit/modules/GoogleModule/GoogleModule.py:1323 msgid "miscellaneous" msgstr "varie" #: ../conduit/modules/GoogleModule/GoogleModule.py:1324 msgid "No description." msgstr "Nessuna descrizione." #: ../conduit/modules/GoogleModule/GoogleModule.py:1333 msgid "YouTube" msgstr "YouTube" #: ../conduit/modules/GoogleModule/GoogleModule.py:1334 msgid "Synchronize data from YouTube" msgstr "Sincronizza i dati da YouTube" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:1 msgid "Account Details" msgstr "Dettagli account" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:2 msgid "Calendar:" msgstr "Calendario:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:3 msgid "Email:" msgstr "Email:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:5 msgid "Load Calendars" msgstr "Carica calendari" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:6 msgid "Password:" msgstr "Password:" #: ../conduit/modules/iPodModule/iPodModule.py:180 msgid "Synchronize your iPod notes" msgstr "Sincronizza le note dell'iPod" #: ../conduit/modules/iPodModule/iPodModule.py:295 #: ../conduit/modules/SynceModule.py:311 msgid "Contacts" msgstr "Contatti" #: ../conduit/modules/iPodModule/iPodModule.py:296 msgid "Synchronize your iPod contacts" msgstr "Sincronizza i contatti dell'iPod" #: ../conduit/modules/iPodModule/iPodModule.py:331 #: ../conduit/modules/SynceModule.py:449 msgid "Calendar" msgstr "Calendario" #: ../conduit/modules/iPodModule/iPodModule.py:332 msgid "Synchronize your iPod calendar" msgstr "Sincronizza il calendario dell'iPod" #: ../conduit/modules/iPodModule/iPodModule.py:368 msgid "Synchronize your iPod photos" msgstr "Sincronizza le foto dell'iPod" #: ../conduit/modules/iPodModule/iPodModule.py:465 msgid "Delete" msgstr "Elimina" #: ../conduit/modules/iPodModule/iPodModule.py:695 #: ../conduit/modules/iPodModule/iPodModule.py:812 #: ../conduit/modules/N800Module/N800Module.py:77 msgid "Encoding" msgstr "Codifica" #: ../conduit/modules/iPodModule/iPodModule.py:811 msgid "Conversion options" msgstr "Opzioni di conversione" #: ../conduit/modules/iPodModule/iPodModule.py:816 msgid "Keep converted files" msgstr "Mantenere i file convertiti" #: ../conduit/modules/iPodModule/iPodModule.py:846 msgid "iPod Music" msgstr "Musica dell'iPod" #: ../conduit/modules/iPodModule/iPodModule.py:847 msgid "Synchronize your iPod music" msgstr "Sincronizza la musica dell'iPod" #: ../conduit/modules/iPodModule/iPodModule.py:882 msgid "iPod Video" msgstr "Video dell'iPod" #: ../conduit/modules/iPodModule/iPodModule.py:883 msgid "Synchronize your iPod videos" msgstr "Sincronizza i video dell'iPod" #: ../conduit/modules/iPodModule/iPodModule.py:907 msgid "Movie" msgstr "Filmati" #: ../conduit/modules/iPodModule/iPodModule.py:908 msgid "Music Video" msgstr "Video musicali" #: ../conduit/modules/iPodModule/iPodModule.py:909 msgid "TV Show" msgstr "Spettacolo TV" #: ../conduit/modules/iPodModule/iPodModule.py:911 msgid "Video kind" msgstr "Tipo di video" #. Translators: Translate this in derived classes. #: ../conduit/modules/N800Module/N800Module.py:55 msgid "Conduit" msgstr "Conduit" #: ../conduit/modules/N800Module/N800Module.py:105 msgid "N800 Files" msgstr "File dell'N800" #: ../conduit/modules/N800Module/N800Module.py:106 msgid "Synchronizes files/folders to a N800 device" msgstr "Sincronizza i file e le cartelle a un dispositivo N800" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:111 msgid "Backups" msgstr "Backup" #: ../conduit/modules/N800Module/N800Module.py:126 msgid "N800 Music" msgstr "Musica dell'N800" #: ../conduit/modules/N800Module/N800Module.py:127 msgid "Synchronizes music to a N800 device" msgstr "Sincronizza la musica a un dispositivo N800" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:133 msgid "Music" msgstr "Musica" #: ../conduit/modules/N800Module/N800Module.py:150 msgid "N800 Videos" msgstr "Video dell'N800" #: ../conduit/modules/N800Module/N800Module.py:151 msgid "Synchronizes video to a N800 device" msgstr "Sincronizza i video a un dispositivo N800" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:157 msgid "Video" msgstr "Video" #: ../conduit/modules/N800Module/N800Module.py:174 msgid "N800 Photos" msgstr "Foto dell'N800" #: ../conduit/modules/N800Module/N800Module.py:175 msgid "Synchronizes photos to an N800 device" msgstr "Sincronizza le foto a un dispositivo N800" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:181 msgid "Photo" msgstr "Foto" #: ../conduit/modules/NautilusBookmarksModule.py:19 msgid "Nautilus Bookmarks" msgstr "Segnalibri di Nautilus" #: ../conduit/modules/NautilusBookmarksModule.py:20 msgid "Sync your Nautilus Bookmarks" msgstr "Sincronizza i segnalibri di Nautilus" #: ../conduit/modules/NautilusBookmarksModule.py:145 msgid "Sync bookmarks to local places/files" msgstr "Sincronizzare i segnalibri in risorse o file locali" #: ../conduit/modules/NautilusBookmarksModule.py:148 msgid "Sync bookmarks to remote places/files" msgstr "Sincronizzare i segnalibri in risorse o file remoti" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "Rete" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "Abilita sincronizzazione via rete" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:44 msgid "Rhythmbox Music" msgstr "Musica di Rhythmbox" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:45 msgid "Synchronize songs from your Rhythmbox playlists" msgstr "Sincronizza i brani dalle scalette di Rhythmbox" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 msgid "Shutterfly" msgstr "Shutterfly" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 msgid "Synchronize your Shutterfly photos" msgstr "Sincronizza le foto di Shutterfly" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "%d/%m/%Y-%H.%M.%S" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 msgid "SmugMug" msgstr "SmugMug" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 msgid "Synchronize your SmugMug.com photos" msgstr "Sincronizza le foto di SmugMug.com" #: ../conduit/modules/SynceModule.py:139 msgid "Create Partnership" msgstr "Crea associazione" #: ../conduit/modules/SynceModule.py:312 msgid "Windows Mobile Contacts" msgstr "Contatti Windows Mobile" #: ../conduit/modules/SynceModule.py:450 msgid "Windows Mobile Calendar" msgstr "Calendario Windows Mobile" #: ../conduit/modules/SynceModule.py:459 msgid "Tasks" msgstr "Attività" #: ../conduit/modules/SynceModule.py:460 msgid "Windows Mobile Tasks" msgstr "Attività Windows Mobile" #: ../conduit/modules/ZotoModule/ZotoModule.py:154 msgid "Zoto" msgstr "Zoto" #: ../conduit/modules/ZotoModule/ZotoModule.py:155 msgid "Synchronize your Zoto photos" msgstr "Sincronizza le foto di Zoto" conduit-0.3.17/po/sl.po0000644000175000017500000011165511326113651011574 00000000000000# Copyright (C) 2005-2006 Free Software Foundation, Inc. # This file is distributed under the same license as the conduit package. # # Matej Urbančič , 2008 - 2009. # Andrej Žnidaršič , 2009. # msgid "" msgstr "" "Project-Id-Version: conduit\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=conduit&component=documentation and translation\n" "POT-Creation-Date: 2010-01-12 19:58+0000\n" "PO-Revision-Date: 2010-01-18 09:20+0100\n" "Last-Translator: Andrej Žnidaršič \n" "Language-Team: Slovenian GNOME Translation Team \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" #: ../data/conduit.desktop.in.in.h:1 msgid "Conduit Synchronizer" msgstr "Usklajevalnik Conduit" #: ../data/conduit.desktop.in.in.h:2 msgid "Synchronization for GNOME" msgstr "Usklajevalnik za GNOME" #: ../conduit/Knowledge.py:8 msgid "What Do You Want to Synchronize?" msgstr "Kaj želite uskladiti?" #: ../conduit/Knowledge.py:9 msgid "Drag and Drop a Data Provider on the Canvas" msgstr "Povlecite in spustite ponudnika podatkov na platno" #: ../conduit/Knowledge.py:11 msgid "Synchronization Group Created" msgstr "Usklajevalna skupina je ustvarjena" #: ../conduit/Knowledge.py:12 msgid "Add Another Data Provider to the Group to Synchronize it" msgstr "Za usklajevanje ponudnika podatkov ga dodajte v skupino" #: ../conduit/Knowledge.py:14 msgid "You Are Now Ready to Synchronize" msgstr "Sistem je pripravljen za usklajevanje" #: ../conduit/Knowledge.py:15 msgid "Right Click on Group for Options" msgstr "Desno kliknite na skupino za prikaz možnosti" #: ../conduit/Knowledge.py:24 msgid "Synchronize Two Folders" msgstr "Usklajevanje dveh map" #: ../conduit/Knowledge.py:27 msgid "Backup Folder to Box.net" msgstr "Varnostna kopija mape na Box.net" #: ../conduit/Knowledge.py:30 msgid "Synchronize Tagged F-Spot Photos to Flickr" msgstr "Usklajevanje označenih F-Spot fotografij s Flicker-jem" #: ../conduit/Knowledge.py:33 msgid "Synchronize Photos to Flickr" msgstr "Usklajevanje fotografij s Flicker-jem" #: ../conduit/Knowledge.py:36 msgid "Upload Photos to Facebook" msgstr "Nalaganje fotografij na Facebook" #: ../conduit/Knowledge.py:39 msgid "Synchronize Desktop Wallpaper from a RSS Feed" msgstr "Usklajevanje tapete namizja z vira RSS" #: ../conduit/Main.py:59 msgid "Conduit is a synchronization application." msgstr "Conduit je program za usklajevanje." #: ../conduit/Main.py:63 #, python-format msgid "Launch without GUI. [default: %default]" msgstr "Zagon brez grafičnega uporabniškega vmesnika. [privzeto: %default]" #: ../conduit/Main.py:67 #, python-format msgid "Save dataprovider configuration to FILE. [default: %default]" msgstr "Shranjevanje nastavitev ponudnika podatkov v DATOTEKO. [privzeto: %default]" #: ../conduit/Main.py:71 #, python-format msgid "Iconify on startup. [default: %default]" msgstr "Pomanjšaj v ikono ob zagonu. [privzeto: %default]" #: ../conduit/Main.py:75 #, python-format msgid "Run with the specified UI. [default: %default]" msgstr "Zagon z določenim uporabniškim vmesnikom. [privzeto: %default]" #: ../conduit/Main.py:79 msgid "Only load modules in the named files. [default: load all modules]" msgstr "Nalaganje le modulov v imenovanih datotekah. [privzeto: nalaganje vseh modulov]" #: ../conduit/Main.py:83 msgid "Do not load modules in the named files. [default: load all modules]" msgstr "Brez nalaganja modulov v imenovanih datotekah. [privzeto: nalaganje vseh modulov]" #: ../conduit/Main.py:87 msgid "Explicitly set internal Conduit settings (keys) to the given values for this session. [default: do not set]" msgstr "Izrecna nastavitev notranjih nastavitev Conduit (tipk) na vrednosti podane med to mejo. [privzeto: brez nastavitve]" #: ../conduit/Main.py:91 #, python-format msgid "Enable loading of unfinished or unsupported dataproviders. [default: %default]" msgstr "Omogoči nalaganje nedokončanih ali nepodprtih ponudnikov podatkov. [privzeto: %default]" #: ../conduit/Main.py:95 #, python-format msgid "Generate more debugging information. [default: %default]" msgstr "Ustvarjanje več podrobnosti razhroščevanja. [privzeto: %default]" #: ../conduit/Main.py:99 #, python-format msgid "Generate less debugging information. [default: %default]" msgstr "Ustvarjanje manj podrobnosti razhroščevanja. [privzeto: %default]" #: ../conduit/Main.py:103 #, python-format msgid "Generate no debugging information. [default: %default]" msgstr "Brez ustvarjanja podrobnosti razhroščevanja. [privzeto: %default]" #: ../conduit/dataproviders/DataProvider.py:22 msgid "Ready" msgstr "Pripravljeno" #: ../conduit/dataproviders/DataProvider.py:23 msgid "New data to sync" msgstr "Novi podatki za uskladitev" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Refreshing..." msgstr "Osveževanje ..." #: ../conduit/dataproviders/DataProvider.py:25 msgid "Refreshed OK" msgstr "Uspešno osveženo" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Refreshing" msgstr "Napaka med osveževanjem" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronizing..." msgstr "Usklajevanje ..." #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronized OK" msgstr "Uspešno končano usklajevanje" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Error Synchronizing" msgstr "Napaka med usklajevanjem" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Synchronization Skipped" msgstr "Usklajevanje je preskočeno" #: ../conduit/dataproviders/DataProvider.py:31 msgid "Synchronization Cancelled" msgstr "Usklajevanje je preklicano" #: ../conduit/dataproviders/DataProvider.py:32 msgid "Synchronization Conflict" msgstr "Spor med usklajevanjem" #: ../conduit/dataproviders/DataProvider.py:33 msgid "Not Configured" msgstr "Ni nastavljeno" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "640x480" msgstr "640x480" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "800x600" msgstr "800x600" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "1024x768" msgstr "1024x768" #. Signifies that a conversion should not take place #: ../conduit/dataproviders/Image.py:35 #: ../conduit/modules/N800Module/N800Module.py:57 msgid "None" msgstr "Brez" #. Default Categories for the DataProviders #: ../conduit/dataproviders/__init__.py:6 msgid "Files and Folders" msgstr "Datoteke in mape" #: ../conduit/dataproviders/__init__.py:7 #: ../conduit/modules/iPodModule/iPodModule.py:179 msgid "Notes" msgstr "Opombe" #: ../conduit/dataproviders/__init__.py:8 #: ../conduit/modules/iPodModule/iPodModule.py:367 msgid "Photos" msgstr "Fotografije" #: ../conduit/dataproviders/__init__.py:9 msgid "Office" msgstr "Pisarna" #: ../conduit/dataproviders/__init__.py:10 msgid "Settings" msgstr "Nastavitve" #: ../conduit/dataproviders/__init__.py:11 msgid "Miscellaneous" msgstr "Razno" #: ../conduit/dataproviders/__init__.py:12 msgid "Media" msgstr "Večpredstavnost" #: ../conduit/dataproviders/__init__.py:13 msgid "Bookmarks" msgstr "Zaznamki" #: ../conduit/dataproviders/__init__.py:14 msgid "Test" msgstr "Preizkus" #: ../conduit/gtkui/Canvas.py:152 msgid "Drag a Data Provider here to continue" msgstr "Na to mesto povlecite ponudnika podatkov za nadaljevanje" #: ../conduit/gtkui/Canvas.py:217 msgid "Show me" msgstr "Pokaži" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:91 msgid "Source" msgstr "Vir" #: ../conduit/gtkui/ConflictResolver.py:105 msgid "Resolution" msgstr "Ločljivost" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:110 msgid "Sink" msgstr "Korito" #: ../conduit/gtkui/ConflictResolver.py:150 #: ../conduit/gtkui/ConflictResolver.py:151 #, python-format msgid "Conflicts (%s)" msgstr "Spori (%s)" #. name, #url #: ../conduit/gtkui/UI.py:33 msgid "Introduction" msgstr "Uvod" #: ../conduit/gtkui/UI.py:34 msgid "Writing a Data Provider" msgstr "Zapisovanje ponudnika podatkov" #: ../conduit/gtkui/UI.py:35 msgid "API Documentation" msgstr "Dokumentacija API " #: ../conduit/gtkui/UI.py:36 msgid "Test Results" msgstr "Rezultati preizkusa" #: ../conduit/gtkui/UI.py:52 msgid "Examples" msgstr "Primeri" #. Build some liststores to display #: ../conduit/gtkui/UI.py:139 msgid "Convert from" msgstr "Pretvori iz" #: ../conduit/gtkui/UI.py:140 msgid "into" msgstr "v" #: ../conduit/gtkui/UI.py:190 msgid "Relationship Database" msgstr "Relacijska podatkovna zbirka" #: ../conduit/gtkui/UI.py:194 msgid "Conversions Available" msgstr "Pretvorbe na voljo" #: ../conduit/gtkui/UI.py:200 #: ../conduit/gtkui/Tree.py:355 #: ../conduit/modules/FileModule/FileConfiguration.py:117 msgid "Name" msgstr "Ime" #: ../conduit/gtkui/UI.py:204 msgid "Loaded" msgstr "Naloženo" #: ../conduit/gtkui/UI.py:329 #, python-format msgid " - %s (Development Version)" msgstr " - %s (razvojna različica)" #: ../conduit/gtkui/UI.py:331 msgid " - Running Uninstalled" msgstr " - zagnano nenameščeno" #: ../conduit/gtkui/UI.py:375 msgid "Developers" msgstr "Razvijalci" #: ../conduit/gtkui/UI.py:539 #: ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "Usklajevanje je v teku. Ali ga želite preklicati?" #: ../conduit/gtkui/UI.py:711 msgid "_Synchronize All" msgstr "_Uskladi vse" #: ../conduit/gtkui/UI.py:711 msgid "Synchronizes All Groups" msgstr "Uskladi vse skupine" #: ../conduit/gtkui/UI.py:712 msgid "_Cancel Synchronization" msgstr "_Prekliči usklajevanje" #: ../conduit/gtkui/UI.py:712 msgid "Cancels Currently Synchronizing Groups" msgstr "Preklic trenutno usklajevanih skupin" #: ../conduit/gtkui/UI.py:713 msgid "_Quit" msgstr "_Končaj" #: ../conduit/gtkui/UI.py:713 msgid "Close Conduit" msgstr "Zapri program" #: ../conduit/gtkui/UI.py:753 msgid "Synchronization Error" msgstr "Napaka usklajevanja" #: ../conduit/gtkui/UI.py:756 msgid "Synchronization Complete" msgstr "Usklajevanje je končano" #: ../conduit/gtkui/UI.py:764 msgid "Synchronizing" msgstr "Usklajevanje" #: ../conduit/gtkui/Tree.py:364 msgid "Description" msgstr "Opis" #: ../conduit/gtkui/ConfigItems.py:733 #, python-format msgid "Total: %d" msgstr "Skupaj: %d" #: ../conduit/gtkui/WindowConfigurator.py:14 msgid "Configure" msgstr "Nastavitve" #: ../conduit/modules/BackpackModule/BackpackModule.py:58 msgid "Backpack Notes" msgstr "Sporočilca Backpack" #: ../conduit/modules/BackpackModule/BackpackModule.py:59 msgid "Store things in Backpack Notes" msgstr "Shranjevanje stvari v sporočilcih Backpack" #: ../conduit/modules/BackpackModule/BackpackModule.py:105 #: ../conduit/modules/FlickrModule/FlickrModule.py:307 #: ../conduit/modules/ZotoModule/ZotoModule.py:243 msgid "Account details" msgstr "Podrobnosti računa" #: ../conduit/modules/BackpackModule/BackpackModule.py:106 msgid "Login" msgstr "Prijava" #: ../conduit/modules/BackpackModule/BackpackModule.py:109 msgid "API key" msgstr "API ključ" #: ../conduit/modules/BackpackModule/BackpackModule.py:112 msgid "Saved notes" msgstr "Shranjena sporočilca" #: ../conduit/modules/BackpackModule/BackpackModule.py:113 msgid "Save notes in page" msgstr "Shrani sporočilca na strani" #: ../conduit/modules/BansheeModule/BansheeModule.py:52 msgid "Banshee Playlists" msgstr "Seznami predvajanja Banshee" #: ../conduit/modules/BansheeModule/BansheeModule.py:53 msgid "Synchronize your Banshee playlists" msgstr "Usklajevanje sezname predvajanja Banshee" #: ../conduit/modules/BansheeModule/BansheeModule.py:187 #: ../conduit/modules/BansheeModule/BansheeModule.py:188 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:116 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:117 msgid "Playlists" msgstr "Seznami predvajanja" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 msgid "Box.net" msgstr "Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 msgid "Synchronize your Box.net files" msgstr "Uskladi Box.net datoteke" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:290 #: ../conduit/modules/FileModule/FileModule.py:82 msgid "Folder" msgstr "Mapa" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:291 msgid "Folder name" msgstr "Ime mape" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:295 msgid "Load folders" msgstr "Naloži mape" #: ../conduit/modules/ConverterModule.py:91 msgid "Note-" msgstr "Opomba-" #: ../conduit/modules/DesktopWallpaperModule.py:38 msgid "Wallpaper" msgstr "Tapeta" #: ../conduit/modules/DesktopWallpaperModule.py:39 msgid "Changes your Desktop Wallpaper" msgstr "Usklajevanje tapete namizja" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:107 #, python-format msgid "Select %s" msgstr "Izberi %s" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:127 msgid "Evolution Contacts" msgstr "Evolution stiki" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:128 msgid "Synchronize your contacts" msgstr "Usklajevanje stikov" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:178 msgid "Evolution Calendar" msgstr "Evolution koledar" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:179 msgid "Synchronize your calendar" msgstr "Usklajevanje koledarja" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:240 msgid "Evolution Tasks" msgstr "Evolution opravila" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:241 msgid "Synchronize your tasks" msgstr "Usklajevanje opravil" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:297 msgid "Evolution Memos" msgstr "Evolution opomniki" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:298 msgid "Synchronize your memos" msgstr "Usklajevanje opomnikov" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 msgid "Facebook" msgstr "Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:39 msgid "Synchronize your Facebook photos" msgstr "Usklajevanje fotografij Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:124 #: ../conduit/modules/FlickrModule/FlickrModule.py:282 msgid "Loading album list..." msgstr "Nalaganje seznama albumov ..." #: ../conduit/modules/FacebookModule/FacebookModule.py:128 msgid "Failed to connect" msgstr "Napaka med povezovanjem" #: ../conduit/modules/FacebookModule/FacebookModule.py:131 msgid "Logged in" msgstr "Prijavljeno" #: ../conduit/modules/FacebookModule/FacebookModule.py:133 msgid "Failed to login" msgstr "Napaka med prijavljanjem" #: ../conduit/modules/FacebookModule/FacebookModule.py:145 #: ../conduit/modules/FspotModule/FspotModule.py:243 msgid "Status" msgstr "Stanje" #: ../conduit/modules/FacebookModule/FacebookModule.py:150 #: ../conduit/modules/iPodModule/iPodModule.py:461 #: ../conduit/modules/ZotoModule/ZotoModule.py:252 msgid "Album" msgstr "Album" #: ../conduit/modules/FacebookModule/FacebookModule.py:151 msgid "Album name" msgstr "Ime albuma" #: ../conduit/modules/FacebookModule/FacebookModule.py:156 msgid "Load albums" msgstr "Naloži albume" #: ../conduit/modules/FeedModule/FeedModule.py:58 msgid "RSS Feed" msgstr "Vir RSS" #: ../conduit/modules/FeedModule/FeedModule.py:59 msgid "Synchronize data from RSS enclosures" msgstr "Usklajevanje podatkov iz prilog RSS" #. FIXME: Add Randomize #: ../conduit/modules/FeedModule/FeedModule.py:114 msgid "Feed details" msgstr "Podrobnosti vira" #: ../conduit/modules/FeedModule/FeedModule.py:115 msgid "Feed address" msgstr "Naslov vira" #: ../conduit/modules/FeedModule/FeedModule.py:118 msgid "Enclosure settings" msgstr "Nastavitve prilog" #: ../conduit/modules/FeedModule/FeedModule.py:119 msgid "Limit downloaded enclosures" msgstr "Omeji prejete priloge" #: ../conduit/modules/FeedModule/FeedModule.py:125 msgid "Limit to" msgstr "Omeji na" #: ../conduit/modules/FeedModule/FeedModule.py:129 msgid "Randomize enclosures" msgstr "Naključne priloge" #: ../conduit/modules/FeedModule/FeedModule.py:133 msgid "Download types" msgstr "Vrste prejemanja" #: ../conduit/modules/FeedModule/FeedModule.py:134 msgid "Download audio files" msgstr "Prejmi zvočne datoteke" #: ../conduit/modules/FeedModule/FeedModule.py:135 msgid "Download video files" msgstr "Prejmi video datoteke" #: ../conduit/modules/FeedModule/FeedModule.py:136 msgid "Download photo files" msgstr "Prejmi fotografije" #: ../conduit/modules/FileModule/FileConfiguration.py:111 msgid "Icon" msgstr "Ikona" #: ../conduit/modules/FileModule/FileConfiguration.py:123 #: ../conduit/modules/GConfModule/GConfModule.py:138 msgid "Items" msgstr "Predmeti" #: ../conduit/modules/FileModule/FileConfiguration.py:149 #, python-format msgid "Contains %s files" msgstr "Vsebuje %s datotek" #: ../conduit/modules/FileModule/FileConfiguration.py:248 msgid "Include file..." msgstr "Vključi datoteko ..." #: ../conduit/modules/FileModule/FileConfiguration.py:258 msgid "All files" msgstr "Vse datoteke" #: ../conduit/modules/FileModule/FileConfiguration.py:271 msgid "Include folder..." msgstr "Vključi mapo ..." #: ../conduit/modules/FileModule/FileConfiguration.py:314 msgid "Please Name All Folders" msgstr "Poimenujte vse mape" #: ../conduit/modules/FileModule/FileConfiguration.py:315 msgid "All folders require a descriptive name. To name a folder simply click on it" msgstr "Vse mape morajo imeti opisno ime. Za poimenovanje mape enostavno kliknite nanjo" #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "Datoteke" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "Vir za usklajevanje več datotek" #: ../conduit/modules/FileModule/FileModule.py:83 msgid "Synchronize folders" msgstr "Usklajevanje map" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:40 msgid "Firefox 3 Bookmarks" msgstr "Zaznamki Firefox 3" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:41 msgid "Syncronize your Firefox 3 Bookmarks" msgstr "Usklajevanje zaznamkov Firefox 3" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:100 msgid "Firefox Profile" msgstr "Profil Firefox" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 msgid "Flickr" msgstr "Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 msgid "Synchronize your Flickr.com photos" msgstr "Usklajevanje fotografij Flicker.com" #: ../conduit/modules/FlickrModule/FlickrModule.py:287 msgid "Failed to connect." msgstr "Povezovanje je spodletelo." #: ../conduit/modules/FlickrModule/FlickrModule.py:290 msgid "Album names loaded." msgstr "Imena albumov so naložena." #: ../conduit/modules/FlickrModule/FlickrModule.py:292 msgid "Failed to login." msgstr "Napaka prijave." #: ../conduit/modules/FlickrModule/FlickrModule.py:303 msgid "Logging in, please wait..." msgstr "Prijavljanje, počakajte ..." #: ../conduit/modules/FlickrModule/FlickrModule.py:308 #: ../conduit/modules/GoogleBookmarksModule.py:67 #: ../conduit/modules/ZotoModule/ZotoModule.py:244 msgid "Username" msgstr "Uporabniško ime" #: ../conduit/modules/FlickrModule/FlickrModule.py:319 msgid "Authenticate" msgstr "Overi" #: ../conduit/modules/FlickrModule/FlickrModule.py:323 #: ../conduit/modules/ZotoModule/ZotoModule.py:251 msgid "Saved photo settings" msgstr "Nastavitve shranjenih slik" #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "Resize photos" msgstr "Spremeni velikost fotografij" #: ../conduit/modules/FlickrModule/FlickrModule.py:329 msgid "Do not resize" msgstr "Ne spremeni velikosti" #: ../conduit/modules/FlickrModule/FlickrModule.py:332 msgid "Photos are public" msgstr "Fotografije so javne" #: ../conduit/modules/FspotModule/FspotModule.py:25 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 msgid "Synchronize your F-Spot photos" msgstr "Usklajevanje F-Spot fotografij" #: ../conduit/modules/FspotModule/FspotModule.py:152 msgid "F-Spot DBus interface is operating in read-only mode" msgstr "F-Spot DBus vmesnik deluje v načinu le za branje" #: ../conduit/modules/FspotModule/FspotModule.py:218 msgid "F-Spot is running" msgstr "F-Spot je zagnan" #: ../conduit/modules/FspotModule/FspotModule.py:219 msgid "Please start F-Spot or activate the D-Bus Extension" msgstr "Zaženite F-Spot ali razširitev D-Bus " #: ../conduit/modules/FspotModule/FspotModule.py:244 msgid "Start F-Spot" msgstr "Zaženi F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:248 #: ../conduit/modules/FspotModule/FspotModule.py:249 msgid "Tags" msgstr "Oznake" #: ../conduit/modules/FspotModule/FspotModule.py:262 msgid "Add tags" msgstr "Dodaj oznako" #: ../conduit/modules/FspotModule/FspotModule.py:263 msgid "Tag name" msgstr "Ime oznake" #: ../conduit/modules/FspotModule/FspotModule.py:266 msgid "Add tag" msgstr "Dodaj oznako" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "Application Settings" msgstr "Programske nastavitve" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Synchronize your application settings" msgstr "Usklajevanje nastavitev programov" #: ../conduit/modules/GConfModule/GConfModule.py:31 msgid "Metacity" msgstr "Metacity" #: ../conduit/modules/GConfModule/GConfModule.py:32 msgid "Nautilus" msgstr "Nautilus" #: ../conduit/modules/GConfModule/GConfModule.py:33 msgid "Preferred Applications" msgstr "Prednostni programi" #: ../conduit/modules/GConfModule/GConfModule.py:34 msgid "Desktop Interface" msgstr "Namizni vmesnik" #: ../conduit/modules/GConfModule/GConfModule.py:35 msgid "Gnome Terminal" msgstr "Gnome Terminal" #: ../conduit/modules/GConfModule/GConfModule.py:137 msgid "Applications to Synchronize" msgstr "Programi za usklajevanje" #: ../conduit/modules/GoogleBookmarksModule.py:19 msgid "Google Bookmarks" msgstr "Google zaznamki" #: ../conduit/modules/GoogleBookmarksModule.py:20 msgid "Sync your Google Bookmarks" msgstr "Usklajevanje Google zaznamkov" #: ../conduit/modules/GoogleBookmarksModule.py:66 msgid "Login Details" msgstr "Podrobnosti prijave" #: ../conduit/modules/GoogleBookmarksModule.py:70 #: ../conduit/modules/ZotoModule/ZotoModule.py:247 msgid "Password" msgstr "Geslo" #: ../conduit/modules/GoogleModule/GoogleModule.py:399 msgid "Google Calendar" msgstr "Google koledar" #: ../conduit/modules/GoogleModule/GoogleModule.py:400 msgid "Synchronize your Google Calendar" msgstr "Usklajevanje koledarja Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:582 msgid "Picasa" msgstr "Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:583 msgid "Synchronize your Google Picasa photos" msgstr "Usklajevanje fotografij Google Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:745 msgid "Google Contacts" msgstr "Google stiki" #: ../conduit/modules/GoogleModule/GoogleModule.py:746 msgid "Synchronize your Google Mail contacts" msgstr "Usklajevanje stikov Google pošte" #: ../conduit/modules/GoogleModule/GoogleModule.py:1076 msgid "Google Documents" msgstr "Dokumenti Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:1077 msgid "Synchronize your Google Documents" msgstr "Usklajevanje dokumentov Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:1322 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:69 msgid "Unknown" msgstr "Neznano" #: ../conduit/modules/GoogleModule/GoogleModule.py:1323 msgid "miscellaneous" msgstr "razno" #: ../conduit/modules/GoogleModule/GoogleModule.py:1324 msgid "No description." msgstr "Brez opisa." #: ../conduit/modules/GoogleModule/GoogleModule.py:1333 msgid "YouTube" msgstr "YouTube" #: ../conduit/modules/GoogleModule/GoogleModule.py:1334 msgid "Synchronize data from YouTube" msgstr "Usklajevanje podatkov z Youtube" #: ../conduit/modules/iPodModule/iPodModule.py:180 msgid "Synchronize your iPod notes" msgstr "Usklajevanje sporočilc iPod" #: ../conduit/modules/iPodModule/iPodModule.py:295 #: ../conduit/modules/SynceModule.py:311 msgid "Contacts" msgstr "Stiki" #: ../conduit/modules/iPodModule/iPodModule.py:296 msgid "Synchronize your iPod contacts" msgstr "Usklajevanje stikov iPod" #: ../conduit/modules/iPodModule/iPodModule.py:331 #: ../conduit/modules/SynceModule.py:449 msgid "Calendar" msgstr "Koledar" #: ../conduit/modules/iPodModule/iPodModule.py:332 msgid "Synchronize your iPod calendar" msgstr "Usklajevanje koledarja iPod" #: ../conduit/modules/iPodModule/iPodModule.py:368 msgid "Synchronize your iPod photos" msgstr "Usklajevanje fotografij iPod" #: ../conduit/modules/iPodModule/iPodModule.py:465 msgid "Delete" msgstr "Izbriši" #: ../conduit/modules/iPodModule/iPodModule.py:695 #: ../conduit/modules/iPodModule/iPodModule.py:812 #: ../conduit/modules/N800Module/N800Module.py:77 msgid "Encoding" msgstr "Kodiranje" #: ../conduit/modules/iPodModule/iPodModule.py:811 msgid "Conversion options" msgstr "Možnosti pretvorbe" #: ../conduit/modules/iPodModule/iPodModule.py:816 msgid "Keep converted files" msgstr "Obdrži pretvorjene datoteke" #: ../conduit/modules/iPodModule/iPodModule.py:846 msgid "iPod Music" msgstr "Glasba iPod" #: ../conduit/modules/iPodModule/iPodModule.py:847 msgid "Synchronize your iPod music" msgstr "Usklajevanje glasbe iPod " #: ../conduit/modules/iPodModule/iPodModule.py:882 msgid "iPod Video" msgstr "iPod Video" #: ../conduit/modules/iPodModule/iPodModule.py:883 msgid "Synchronize your iPod videos" msgstr "Usklajevanje iPod videov" #: ../conduit/modules/iPodModule/iPodModule.py:907 msgid "Movie" msgstr "Film" #: ../conduit/modules/iPodModule/iPodModule.py:908 msgid "Music Video" msgstr "Glasbeni video" #: ../conduit/modules/iPodModule/iPodModule.py:909 msgid "TV Show" msgstr "TV oddaja" #: ../conduit/modules/iPodModule/iPodModule.py:911 msgid "Video kind" msgstr "Vrsta videa" #. Translators: Translate this in derived classes. #: ../conduit/modules/N800Module/N800Module.py:55 msgid "Conduit" msgstr "Conduit" #: ../conduit/modules/N800Module/N800Module.py:105 msgid "N800 Files" msgstr "N800 datoteke" #: ../conduit/modules/N800Module/N800Module.py:106 msgid "Synchronizes files/folders to a N800 device" msgstr "Usklajevanje datotek in map z napravo N800" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:111 msgid "Backups" msgstr "Varnostne kopije" #: ../conduit/modules/N800Module/N800Module.py:126 msgid "N800 Music" msgstr "N800 glasba" #: ../conduit/modules/N800Module/N800Module.py:127 msgid "Synchronizes music to a N800 device" msgstr "Usklajevanje glasbe z napravo N800" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:133 msgid "Music" msgstr "Glasba" #: ../conduit/modules/N800Module/N800Module.py:150 msgid "N800 Videos" msgstr "N800 videoposnetki" #: ../conduit/modules/N800Module/N800Module.py:151 msgid "Synchronizes video to a N800 device" msgstr "Uskladi posnetke z napravo N800" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:157 msgid "Video" msgstr "Video" #: ../conduit/modules/N800Module/N800Module.py:174 msgid "N800 Photos" msgstr "N800 fotografije" #: ../conduit/modules/N800Module/N800Module.py:175 msgid "Synchronizes photos to an N800 device" msgstr "Usklajevanje fotografij z napravo N800" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:181 msgid "Photo" msgstr "Fotografija" #: ../conduit/modules/NautilusBookmarksModule.py:19 msgid "Nautilus Bookmarks" msgstr "Zaznamki Nautilus" #: ../conduit/modules/NautilusBookmarksModule.py:20 msgid "Sync your Nautilus Bookmarks" msgstr "Usklajevanje zaznamkov Nautilus" #: ../conduit/modules/NautilusBookmarksModule.py:145 msgid "Sync bookmarks to local places/files" msgstr "Usklajevanje zaznamkov s krajevnimi mesti / datotekami" #: ../conduit/modules/NautilusBookmarksModule.py:148 msgid "Sync bookmarks to remote places/files" msgstr "Usklajevanje zaznamkov z oddaljenimi mesti / datotekami" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "Omrežje" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "Omogoči usklajevanje preko omrežja" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:44 msgid "Rhythmbox Music" msgstr "Glasba Rhythmbox" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:45 msgid "Synchronize songs from your Rhythmbox playlists" msgstr "Usklajevanje skladb iz seznamov predvajanja Rhythmbox" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 msgid "Shutterfly" msgstr "Shutterfly" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 msgid "Synchronize your Shutterfly photos" msgstr "Usklajevanje fotografij Shutterfly" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "%d.%m.%Y %H.%M.%S" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 msgid "SmugMug" msgstr "SmugMug" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 msgid "Synchronize your SmugMug.com photos" msgstr "Usklajevanje fotografij SmugMug.com" #: ../conduit/modules/SynceModule.py:139 msgid "Create Partnership" msgstr "Ustvari družabništvo" #: ../conduit/modules/SynceModule.py:312 msgid "Windows Mobile Contacts" msgstr "Stiki Windows Mobile" #: ../conduit/modules/SynceModule.py:450 msgid "Windows Mobile Calendar" msgstr "Koledar Windows Mobile" #: ../conduit/modules/SynceModule.py:459 msgid "Tasks" msgstr "Naloge" #: ../conduit/modules/SynceModule.py:460 msgid "Windows Mobile Tasks" msgstr "Opravila Windows Mobile" #: ../conduit/modules/ZotoModule/ZotoModule.py:154 msgid "Zoto" msgstr "Zoto" #: ../conduit/modules/ZotoModule/ZotoModule.py:155 msgid "Synchronize your Zoto photos" msgstr "Usklajevanje fotografij Zoto" #~ msgid "Default Synchronization Options" #~ msgstr "Privzete možnosti usklajevanja" #~ msgid "General" #~ msgstr "Splošno" #~ msgid "Always Up-To-Date" #~ msgstr "Vedno posodobljeno" #~ msgid "Ask Me What to Do" #~ msgstr "Vprašaj kaj storiti" #~ msgid "Ask me what to do" #~ msgstr "Vprašaj kaj storiti" #~ msgid "Cancel Synchronization" #~ msgstr "Prekliči usklajevanje" #~ msgid "Cancel currently-synchronizing groups" #~ msgstr "Prekliči trenutno usklajevane skupine" #~ msgid "Clear Canvas" #~ msgstr "Počisti platno" #~ msgid "Compare" #~ msgstr "Primerjava" #~ msgid "Conduit Preferences" #~ msgstr "Možnosti Conduit" #~ msgid "Configuration" #~ msgstr "Nastavitve" #~ msgid "Configure Item" #~ msgstr "Nastavi predmet" #~ msgid "Configure the synchronization settings for this item" #~ msgstr "Nastavi možnosti usklajevanja za ta predmet" #~ msgid "Conflict Options" #~ msgstr "Možnosti sporov" #~ msgid "Conflicts" #~ msgstr "Spori" #~ msgid "Contents" #~ msgstr "Vsebina" #~ msgid "Data Conversions" #~ msgstr "Pretvorba podatkov" #~ msgid "Data Providers" #~ msgstr "Ponudnik podatkov" #~ msgid "Delete Group" #~ msgstr "Izbriši skupino" #~ msgid "Delete Item" #~ msgstr "Izbriši predmet" #~ msgid "Delete Options" #~ msgstr "Možnosti brisanja" #~ msgid "Delete from the corresponding sink" #~ msgstr "Izbriši iz ustreznega korita" #~ msgid "Delete the Corresponding Item" #~ msgstr "Izbriši pripadajoči predmet" #~ msgid "Editor" #~ msgstr "Urejevalnik" #~ msgid "Minimize to notification area" #~ msgstr "Pomanjšaj v obvestilno področje" #~ msgid "Refresh Group" #~ msgstr "Osveži skupino" #~ msgid "Refresh Item" #~ msgstr "Osveži predmet" #~ msgid "Replace the Older Item" #~ msgstr "Zamenjaj starejši predmet" #~ msgid "Replace the older item" #~ msgstr "Zamenjaj starejši predmet" #~ msgid "Resolve Conflicts" #~ msgstr "Razreši spore" #~ msgid "Save settings on exit" #~ msgstr "Shrani nastavitve ob izhodu" #~ msgid "Show Hints" #~ msgstr "Pokaži namige" #~ msgid "Show status icon" #~ msgstr "Pokaži ikono stanja" #~ msgid "Skip" #~ msgstr "Preskoči" #~ msgid "Slow Synchronization" #~ msgstr "Počasno usklajevanje" #~ msgid "Start Conduit at login" #~ msgstr "Zagon programa ob prijavi" #~ msgid "Synchronization Options" #~ msgstr "Možnosti usklajevanja" #~ msgid "Synchronize All" #~ msgstr "Uskladi vse" #~ msgid "Synchronize Group" #~ msgstr "Uskladi skupino" #~ msgid "Synchronize group" #~ msgstr "Uskladi skupino" #~ msgid "Synchronizes all groups" #~ msgstr "Uskladi vse skupine" #~ msgid "Title" #~ msgstr "Naslov" #~ msgid "Two-Way Synchronization" #~ msgstr "Dvosmerno usklajevanje" #~ msgid "When an item has been deleted:" #~ msgstr "Ko je bil predmet izbrisan:" #~ msgid "When an item is deleted..." #~ msgstr "Ko je predmet izbrisan ..." #~ msgid "When there is a conflict..." #~ msgstr "Ob sporu ..." #~ msgid "When there is a two-way conflict:" #~ msgstr "Ob dvosmernem sporu:" #~ msgid "_Edit" #~ msgstr "_Uredi" #~ msgid "_File" #~ msgstr "_Datoteka" #~ msgid "_Help" #~ msgstr "Pomo_č" #~ msgid "Account Details" #~ msgstr "Podrobnosti računa" #~ msgid "Calendar:" #~ msgstr "Koledar:" #~ msgid "Email:" #~ msgstr "E-pošta:" #~ msgid "Load Calendars" #~ msgstr "Naloži koledarje" #~ msgid "Password:" #~ msgstr "Geslo:" #~ msgid "Slow Sync" #~ msgstr "Počasno usklajevanje" #~ msgid "Sync Options" #~ msgstr "Možnosti usklajevanja" #~ msgid "Two Way Sync" #~ msgstr "Dvosmerno usklajevanje" #~ msgid "Use built in Web browser" #~ msgstr "Uporabi vgrajen brskalnik" #~ msgid "_About" #~ msgstr "_O programu" #~ msgid "About Conduit" #~ msgstr "O programu" #~ msgid "Saved Note Settings" #~ msgstr "Shranjene nastavitve sporočilca" #~ msgid "Backpack" #~ msgstr "Backpack" #~ msgid "Enabled" #~ msgstr "Omogočeno" #~ msgid "Return Playlists" #~ msgstr "Izpisani seznami predvajanja" #~ msgid "Banshee" #~ msgstr "Banshee" #~ msgid "Folder:" #~ msgstr "Mapa:" #~ msgid "Load" #~ msgstr "Naloži" #~ msgid "Addressbook:" #~ msgstr "Imenik:" #~ msgid "Evolution" #~ msgstr "Evolution" #~ msgid "" #~ "Limit the Number of\n" #~ "Enclosures Downloaded to:" #~ msgstr "" #~ "Omeji število prenesenih\n" #~ "prilog virov na:" #~ msgid "Please Enter a Folder Name" #~ msgstr "Vnesite ime mape" #~ msgid "" #~ "All folders require a descriptive name. To name a folder enter its name " #~ "where indicated" #~ msgstr "" #~ "Vse mape morajo vsebovati opisno ime. Za poimenovanje mape vnesite njeno " #~ "ime, kjer je določeno." #~ msgid "Items to Synchronize" #~ msgstr "Predmeti za usklajevanje" #~ msgid "Add Directory" #~ msgstr "Dodaj mapo" #~ msgid "Add File" #~ msgstr "Dodaj datoteko" #~ msgid "File Configuration" #~ msgstr "Nastavitev datoteke" #~ msgid "Folder Configuration" #~ msgstr "Nastavitev map" #~ msgid "Folder Location:" #~ msgstr "Mesto mape:" #~ msgid "Ignore File Modification Times" #~ msgstr "Prezri čas spremembe" #~ msgid "Include Hidden Files" #~ msgstr "Vključi skrite datoteke" #~ msgid "Select A Folder" #~ msgstr "Izbor mape" #~ msgid "Photoset Name:" #~ msgstr "Ime seta fotografij:" #~ msgid "F-Spot Photos" #~ msgstr "F-Spot fotografije" #~ msgid "Return Photos Tagged With" #~ msgstr "Prikaži fotografije označene z" #~ msgid "Create Tags: " #~ msgstr "Ustvari oznake:" #~ msgid "Sync your desktop preferences" #~ msgstr "Uskladi možnosti namizja" #~ msgid "Sync contacts from Google" #~ msgstr "Uskladi stike z Googlom" #~ msgid "Donwload Videos" #~ msgstr "Prenesi posnetke" #~ msgid "By user" #~ msgstr "Uporabnik" #~ msgid "Favorites of" #~ msgstr "Priljubljeno" #~ msgid "Max retrieved videos (0 is unlimited):" #~ msgstr "Največkrat pridobljeni posnetki (0 ne neomejeno):" #~ msgid "Top rated" #~ msgstr "Visoko ocenjeno" #~ msgid "Uploaded by" #~ msgstr "Objavil" #~ msgid "User: " #~ msgstr "Uporabnik:" #~ msgid "YouTube Source" #~ msgstr "Vir YouTube" #~ msgid "gtk-delete" #~ msgstr "gtk-delete" #~ msgid "iPod Photos" #~ msgstr "iPod fotografije" #~ msgid "%s Format (%s)" #~ msgstr "%s zapis (%s)" #~ msgid "unchanged" #~ msgstr "nespremenjeno" #~ msgid "Synchronize the Following Playlists" #~ msgstr "Uskladi naslednje sezname predvajanja" #~ msgid "Rhythmbox Playlists" #~ msgstr "Rhythmbox seznami predvajanja" conduit-0.3.17/po/hu.po0000644000175000017500000010600011321403566011560 00000000000000# Hungarian translation of Conduit # Copyright (C) 2008, 2009 Free Software Foundation, Inc. # This file is distributed under the same license as the Conduit package. # # Gabor Kelemen , 2008, 2009. # Gabor Kelemen , 2009. msgid "" msgstr "" "Project-Id-Version: Conduit HEAD\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-07-22 01:56+0200\n" "PO-Revision-Date: 2009-07-22 16:02+0200\n" "Last-Translator: Gabor Kelemen \n" "Language-Team: Hungarian \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" #: ../data/conduit.desktop.in.in.h:1 msgid "Conduit Synchronizer" msgstr "Conduit szinkronizáló" #: ../data/conduit.desktop.in.in.h:2 msgid "Synchronization for GNOME" msgstr "Szinkronizálás a GNOME-hoz" #: ../data/conduit.glade.h:1 msgid "Default Synchronization Options" msgstr "Szinkronizálás alapértelmezett beállításai" #: ../data/conduit.glade.h:2 msgid "General" msgstr "Általános" #: ../data/conduit.glade.h:3 msgid "Always Up-To-Date" msgstr "Mindig naprakész" #: ../data/conduit.glade.h:4 msgid "Ask Me What to Do" msgstr "Kérdezzen" #: ../data/conduit.glade.h:5 msgid "Ask me what to do" msgstr "Kérdezzen" #: ../data/conduit.glade.h:6 msgid "Cancel Synchronization" msgstr "Szinkronizálás megszakítása" #: ../data/conduit.glade.h:7 msgid "Cancel currently-synchronizing groups" msgstr "Csoportok szinkronizálásának megszakítása" #: ../data/conduit.glade.h:8 msgid "Clear Canvas" msgstr "Vászon törlése" #: ../data/conduit.glade.h:9 msgid "Compare" msgstr "Összehasonlítás" #: ../data/conduit.glade.h:10 msgid "Conduit Preferences" msgstr "Conduit tulajdonságai" #: ../data/conduit.glade.h:11 msgid "Configuration" msgstr "Beállítás" #: ../data/conduit.glade.h:12 msgid "Configure Item" msgstr "Elem beállítása" #: ../data/conduit.glade.h:13 msgid "Configure the synchronization settings for this item" msgstr "Az elem szinkronizálási beállításainak megadása" #: ../data/conduit.glade.h:14 msgid "Conflict Options" msgstr "Ütköző beállítások" #: ../data/conduit.glade.h:15 msgid "Conflicts" msgstr "Ütközik" #: ../data/conduit.glade.h:16 msgid "Contents" msgstr "Tartalom" #: ../data/conduit.glade.h:17 msgid "Data Conversions" msgstr "Adatátalakítások" #: ../data/conduit.glade.h:18 msgid "Data Providers" msgstr "Adatszolgáltatók" #: ../data/conduit.glade.h:19 msgid "Delete Group" msgstr "Csoport törlése" #: ../data/conduit.glade.h:20 msgid "Delete Item" msgstr "Elem törlése" #: ../data/conduit.glade.h:21 msgid "Delete Options" msgstr "Beállítások törlése" #: ../data/conduit.glade.h:22 msgid "Delete from the corresponding sink" msgstr "Törlés a megfelelő bemenetből" #: ../data/conduit.glade.h:23 msgid "Delete the Corresponding Item" msgstr "A megfelelő elem törlése" #: ../data/conduit.glade.h:24 msgid "Editor" msgstr "Szerkesztő" #: ../data/conduit.glade.h:25 msgid "Minimize to notification area" msgstr "Minimalizálás az értesítési területre" #: ../data/conduit.glade.h:26 msgid "Refresh Group" msgstr "Csoport frissítése" #: ../data/conduit.glade.h:27 msgid "Refresh Item" msgstr "Elem frissítése" #: ../data/conduit.glade.h:28 msgid "Replace the Older Item" msgstr "Régebbi elem cseréje" #: ../data/conduit.glade.h:29 msgid "Replace the older item" msgstr "Régebbi elem cseréje" #: ../data/conduit.glade.h:30 msgid "Resolve Conflicts" msgstr "Ütközések feloldása" #: ../data/conduit.glade.h:31 msgid "Save settings on exit" msgstr "Beállítások mentése kilépéskor" #: ../data/conduit.glade.h:32 msgid "Show Hints" msgstr "Tippek megjelenítése" #: ../data/conduit.glade.h:33 msgid "Show status icon" msgstr "Állapotikon megjelenítése" #: ../data/conduit.glade.h:34 msgid "Skip" msgstr "Kihagyás" #: ../data/conduit.glade.h:35 msgid "Slow Synchronization" msgstr "Lassú szinkronizálás" #: ../data/conduit.glade.h:36 msgid "Start Conduit at login" msgstr "A Conduit indítása bejelentkezéskor" #: ../data/conduit.glade.h:37 msgid "Synchronization Options" msgstr "Szinkronizálás tulajdonságai" #: ../data/conduit.glade.h:38 msgid "Synchronize All" msgstr "Összes szinkronizálása" #: ../data/conduit.glade.h:39 msgid "Synchronize Group" msgstr "Csoport szinkronizálása" #: ../data/conduit.glade.h:40 msgid "Synchronize group" msgstr "Csoport szinkronizálása" #: ../data/conduit.glade.h:41 msgid "Synchronizes all groups" msgstr "Minden csoport szinkronizálása" #: ../data/conduit.glade.h:42 msgid "Title" msgstr "Cím" #: ../data/conduit.glade.h:43 msgid "Two-Way Synchronization" msgstr "Kétutas szinkronizálás" #: ../data/conduit.glade.h:44 msgid "When an item has been deleted:" msgstr "Elem törlésekor:" #: ../data/conduit.glade.h:45 msgid "When an item is deleted..." msgstr "Elem törlésekor…" #: ../data/conduit.glade.h:46 msgid "When there is a conflict..." msgstr "Ütközés esetén…" #: ../data/conduit.glade.h:47 msgid "When there is a two-way conflict:" msgstr "Kétutas ütközés esetén:" #: ../data/conduit.glade.h:48 msgid "_Edit" msgstr "S_zerkesztés" #: ../data/conduit.glade.h:49 msgid "_File" msgstr "_Fájl" #: ../data/conduit.glade.h:50 msgid "_Help" msgstr "_Súgó" #: ../conduit/Knowledge.py:8 msgid "What Do You Want to Synchronize?" msgstr "Mit szeretne szinkronizálni?" #: ../conduit/Knowledge.py:9 msgid "Drag and Drop a Data Provider on the Canvas" msgstr "Húzzon egy adatszolgáltatót a vászonra" #: ../conduit/Knowledge.py:11 msgid "Synchronization Group Created" msgstr "Szinkronizálási csoport létrehozva" #: ../conduit/Knowledge.py:12 msgid "Add Another Data Provider to the Group to Synchronize it" msgstr "Adjon egy másik adatszolgáltatót a csoporthoz a szinkronizálásához" #: ../conduit/Knowledge.py:14 msgid "You Are Now Ready to Synchronize" msgstr "Most már készen áll a szinkronizálásra" #: ../conduit/Knowledge.py:15 msgid "Right Click on Group for Options" msgstr "Kattintson a jobb gombbal a csoporton a beállításokért" #. source,sinc #comment #. twoway #: ../conduit/Knowledge.py:22 msgid "Synchronize Two Folders" msgstr "Két mappa szinkronizálása" #: ../conduit/Knowledge.py:24 msgid "Backup Folder to Box.net" msgstr "Mappa mentése a Box.net-re" #: ../conduit/Knowledge.py:26 msgid "Synchronize Tagged F-Spot Photos to Flickr" msgstr "Címkézett F-Spot fényképek szinkronizálása a Flickr-re" #: ../conduit/Main.py:59 msgid "Conduit is a synchronization application." msgstr "A Conduit egy szinkronizáló alkalmazás." #: ../conduit/Main.py:63 #, python-format msgid "Launch without GUI. [default: %default]" msgstr "Indítás grafikus felület nélkül. [alapértelmezett: %default]" #: ../conduit/Main.py:67 #, python-format msgid "Save dataprovider configuration to FILE. [default: %default]" msgstr "Adatszolgáltató beállításainak mentése a FÁJLBA. [alapértelmezett: %default]" #: ../conduit/Main.py:71 #, python-format msgid "Iconify on startup. [default: %default]" msgstr "Indításkor ikonméret. [alapértelmezett: %default]" #: ../conduit/Main.py:75 #, python-format msgid "Run with the specified UI. [default: %default]" msgstr "Futtatás a megadott felülettel. [alapértelmezett: %default]" #: ../conduit/Main.py:79 msgid "Only load modules in the named files. [default: load all modules]" msgstr "Csak a megadott fájlok moduljainak betöltése. [alapértelmezett: összes betöltése]" #: ../conduit/Main.py:83 msgid "Do not load modules in the named files. [default: load all modules]" msgstr "Ne töltse be a megadott fájlok moduljait. [alapértelmezett: összes betöltése]" #: ../conduit/Main.py:87 msgid "" "Explicitly set internal Conduit settings (keys) to the given values for this " "session. [default: do not set]" msgstr "Belső Conduit beállítások (kulcsok) megadása az adott értékekre erre a munkamenetre. [alapértelmezett: nincs beállítva]" #: ../conduit/Main.py:91 #, python-format msgid "" "Enable loading of unfinished or unsupported dataproviders. [default: %" "default]" msgstr "Befejezetlen vagy nem támogatott adatszolgáltatók betöltése. [alapértelmezett: %default]" #: ../conduit/Main.py:95 #, python-format msgid "Generate more debugging information. [default: %default]" msgstr "Több hibakeresési információ előállítása. [alapértelmezett: %default]" #: ../conduit/Main.py:99 #, python-format msgid "Generate less debugging information. [default: %default]" msgstr "Kevesebb hibakeresési információ előállítása. [alapértelmezett: %default]" #: ../conduit/Main.py:103 #, python-format msgid "Generate no debugging information. [default: %default]" msgstr "Ne állítson elő hibakeresési információkat. [alapértelmezett: %default]" #: ../conduit/dataproviders/DataProvider.py:22 msgid "Ready" msgstr "Kész" #: ../conduit/dataproviders/DataProvider.py:23 msgid "New data to sync" msgstr "Új szinkronizálandó adatok" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Refreshing..." msgstr "Frissítés…" #: ../conduit/dataproviders/DataProvider.py:25 msgid "Refreshed OK" msgstr "Frissítés kész" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Refreshing" msgstr "Hiba a frissítéskor" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronizing..." msgstr "Szinkronizálás…" #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronized OK" msgstr "Szinkronizálás kész" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Error Synchronizing" msgstr "Hiba a szinkronizáláskor" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Synchronization Skipped" msgstr "A szinkronizálás kihagyva" #: ../conduit/dataproviders/DataProvider.py:31 msgid "Synchronization Cancelled" msgstr "A szinkronizálás megszakítva" #: ../conduit/dataproviders/DataProvider.py:32 msgid "Synchronization Conflict" msgstr "Szinkronizálási ütközés" #: ../conduit/dataproviders/DataProvider.py:33 msgid "Not Configured" msgstr "Nincs beállítva" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "640x480" msgstr "640x480" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "800x600" msgstr "800x600" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "1024x768" msgstr "1024x768" #. Signifies that a conversion should not take place #: ../conduit/dataproviders/Image.py:35 #: ../conduit/modules/N800Module/N800Module.py:57 msgid "None" msgstr "Nincs" #. Default Categories for the DataProviders #: ../conduit/dataproviders/__init__.py:6 msgid "Files and Folders" msgstr "Fájlok és mappák" #: ../conduit/dataproviders/__init__.py:7 #: ../conduit/modules/iPodModule/iPodModule.py:179 msgid "Notes" msgstr "Megjegyzések" #: ../conduit/dataproviders/__init__.py:8 #: ../conduit/modules/iPodModule/iPodModule.py:367 msgid "Photos" msgstr "Fényképek" #: ../conduit/dataproviders/__init__.py:9 msgid "Office" msgstr "Iroda" #: ../conduit/dataproviders/__init__.py:10 msgid "Settings" msgstr "Beállítások" #: ../conduit/dataproviders/__init__.py:11 msgid "Miscellaneous" msgstr "Egyebek" #: ../conduit/dataproviders/__init__.py:12 msgid "Media" msgstr "Adathordozó" #: ../conduit/dataproviders/__init__.py:13 msgid "Bookmarks" msgstr "Könyvjelzők" #: ../conduit/dataproviders/__init__.py:14 msgid "Test" msgstr "Teszt" #: ../conduit/gtkui/Canvas.py:152 msgid "Drag a Data Provider here to continue" msgstr "A folytatáshoz húzzon ide egy adatszolgáltatót" #: ../conduit/gtkui/Canvas.py:217 msgid "Show me" msgstr "Jelenítsen meg" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:91 msgid "Source" msgstr "Forrás" #: ../conduit/gtkui/ConflictResolver.py:105 msgid "Resolution" msgstr "Feloldás" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:110 msgid "Sink" msgstr "Bemenet" #: ../conduit/gtkui/ConflictResolver.py:150 #: ../conduit/gtkui/ConflictResolver.py:151 #, python-format msgid "Conflicts (%s)" msgstr "Ütközik (%s)" #. name, #url #: ../conduit/gtkui/UI.py:33 msgid "Introduction" msgstr "Bevezetés" #: ../conduit/gtkui/UI.py:34 msgid "Writing a Data Provider" msgstr "Adatszolgáltató írása" #: ../conduit/gtkui/UI.py:35 msgid "API Documentation" msgstr "API dokumentáció" #: ../conduit/gtkui/UI.py:36 msgid "Test Results" msgstr "Teszteredmények" #: ../conduit/gtkui/UI.py:129 #, python-format msgid " - %s (Development Version)" msgstr " – %s (fejlesztői változat)" #: ../conduit/gtkui/UI.py:131 msgid " - Running Uninstalled" msgstr " – Futás telepítetlenül" #: ../conduit/gtkui/UI.py:165 msgid "Examples" msgstr "Példák" #: ../conduit/gtkui/UI.py:177 msgid "Developers" msgstr "Fejlesztők" #. Build some liststores to display #: ../conduit/gtkui/UI.py:318 msgid "Convert from" msgstr "Átalakítás ebből:" #: ../conduit/gtkui/UI.py:319 msgid "into" msgstr "ebbe:" #: ../conduit/gtkui/UI.py:370 msgid "Relationship Database" msgstr "Kapcsolat-adatbázis" #: ../conduit/gtkui/UI.py:374 msgid "Conversions Available" msgstr "Elérhető átalakítások" #: ../conduit/gtkui/UI.py:380 ../conduit/gtkui/Tree.py:348 #: ../conduit/modules/FileModule/FileConfiguration.py:117 msgid "Name" msgstr "Név" #: ../conduit/gtkui/UI.py:384 msgid "Loaded" msgstr "Betöltve" #: ../conduit/gtkui/UI.py:512 ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "A szinkronizálás folyamatban. Meg kívánja szakítani?" #: ../conduit/gtkui/UI.py:684 msgid "_Synchronize All" msgstr "Összes s_zinkronizálása" #: ../conduit/gtkui/UI.py:684 msgid "Synchronizes All Groups" msgstr "Minden csoport szinkronizálása" #: ../conduit/gtkui/UI.py:685 msgid "_Cancel Synchronization" msgstr "Szinkronizálása _megszakítása" #: ../conduit/gtkui/UI.py:685 msgid "Cancels Currently Synchronizing Groups" msgstr "Az aktuális csoportszinkronizálások megszakítása" #: ../conduit/gtkui/UI.py:686 msgid "_Quit" msgstr "_Kilépés" #: ../conduit/gtkui/UI.py:686 msgid "Close Conduit" msgstr "A Conduit bezárása" #: ../conduit/gtkui/UI.py:726 msgid "Synchronization Error" msgstr "Szinkronizálási hiba" #: ../conduit/gtkui/UI.py:729 msgid "Synchronization Complete" msgstr "A szinkronizálás befejeződött" #: ../conduit/gtkui/UI.py:745 msgid "Synchronizing" msgstr "Szinkronizálás" #: ../conduit/gtkui/Tree.py:357 msgid "Description" msgstr "Leírás" #: ../conduit/gtkui/ConfigItems.py:729 #, python-format msgid "Total: %d" msgstr "Összesen: %d" #: ../conduit/gtkui/WindowConfigurator.py:14 msgid "Configure" msgstr "Beállítás" # fixme valami szebbet #: ../conduit/modules/BackpackModule/BackpackModule.py:58 msgid "Backpack Notes" msgstr "Hátizsák jegyzetek" #: ../conduit/modules/BackpackModule/BackpackModule.py:59 msgid "Store things in Backpack Notes" msgstr "Elemek tárolása a hátizsák jegyzetekben" #: ../conduit/modules/BackpackModule/BackpackModule.py:105 #: ../conduit/modules/FlickrModule/FlickrModule.py:307 #: ../conduit/modules/ZotoModule/ZotoModule.py:243 msgid "Account details" msgstr "Fiók részletei" #: ../conduit/modules/BackpackModule/BackpackModule.py:106 msgid "Login" msgstr "Bejelentkezés" #: ../conduit/modules/BackpackModule/BackpackModule.py:109 msgid "API key" msgstr "API kulcs" #: ../conduit/modules/BackpackModule/BackpackModule.py:112 msgid "Saved notes" msgstr "Jegyzetek mentése" #: ../conduit/modules/BackpackModule/BackpackModule.py:113 msgid "Save notes in page" msgstr "Jegyzetek mentése oldalra" #: ../conduit/modules/BansheeModule/BansheeModule.py:52 msgid "Banshee Playlists" msgstr "Banshee lejátszólisták" #: ../conduit/modules/BansheeModule/BansheeModule.py:53 msgid "Synchronize your Banshee playlists" msgstr "Banshee lejátszólisták szinkronizálása" #: ../conduit/modules/BansheeModule/BansheeModule.py:187 #: ../conduit/modules/BansheeModule/BansheeModule.py:188 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:116 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:117 msgid "Playlists" msgstr "Lejátszólisták" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 msgid "Box.net" msgstr "Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 msgid "Synchronize your Box.net files" msgstr "Box.net fájlok szinkronizálása" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:290 #: ../conduit/modules/FileModule/FileModule.py:82 msgid "Folder" msgstr "Mappa" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:291 msgid "Folder name" msgstr "Mappanév" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:295 msgid "Load folders" msgstr "Mappák betöltése" #: ../conduit/modules/ConverterModule.py:91 msgid "Note-" msgstr "Jegyzet–" #: ../conduit/modules/DesktopWallpaperModule.py:38 msgid "Wallpaper" msgstr "Háttérkép" #: ../conduit/modules/DesktopWallpaperModule.py:39 msgid "Changes your Desktop Wallpaper" msgstr "Asztali háttérkép módosítása" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:107 #, python-format msgid "Select %s" msgstr "%s kiválasztása:" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:127 msgid "Evolution Contacts" msgstr "Evolution névjegyek" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:128 msgid "Synchronize your contacts" msgstr "Névjegyek szinkronizálása" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:178 msgid "Evolution Calendar" msgstr "Evolution naptár" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:179 msgid "Synchronize your calendar" msgstr "Naptár szinkronizálása" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:240 msgid "Evolution Tasks" msgstr "Evolution feladatok" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:241 msgid "Synchronize your tasks" msgstr "Feladatok szinkronizálása" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:297 msgid "Evolution Memos" msgstr "Evolution feljegyzések" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:298 msgid "Synchronize your memos" msgstr "Feljegyzések szinkronizálása" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 msgid "Facebook" msgstr "Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:39 msgid "Synchronize your Facebook photos" msgstr "Facebook fényképek szinkronizálása" #: ../conduit/modules/FacebookModule/FacebookModule.py:124 #: ../conduit/modules/FlickrModule/FlickrModule.py:282 msgid "Loading album list..." msgstr "Albumlista betöltése…" #: ../conduit/modules/FacebookModule/FacebookModule.py:128 msgid "Failed to connect" msgstr "A csatlakozás meghiúsult" #: ../conduit/modules/FacebookModule/FacebookModule.py:131 msgid "Logged in" msgstr "Bejelentkezve" #: ../conduit/modules/FacebookModule/FacebookModule.py:133 msgid "Failed to login" msgstr "A bejelentkezés meghiúsult" #: ../conduit/modules/FacebookModule/FacebookModule.py:145 #: ../conduit/modules/FspotModule/FspotModule.py:243 msgid "Status" msgstr "Állapot" #: ../conduit/modules/FacebookModule/FacebookModule.py:150 #: ../conduit/modules/iPodModule/iPodModule.py:461 #: ../conduit/modules/ZotoModule/ZotoModule.py:252 msgid "Album" msgstr "Album" #: ../conduit/modules/FacebookModule/FacebookModule.py:151 msgid "Album name" msgstr "Album neve" #: ../conduit/modules/FacebookModule/FacebookModule.py:156 msgid "Load albums" msgstr "Albumok betöltése" #: ../conduit/modules/FeedModule/FeedModule.py:58 msgid "RSS Feed" msgstr "RSS hírforrás" #: ../conduit/modules/FeedModule/FeedModule.py:59 msgid "Synchronize data from RSS enclosures" msgstr "Adatok szinkronizálása RSS forrásokból" #. FIXME: Add Randomize #: ../conduit/modules/FeedModule/FeedModule.py:114 msgid "Feed details" msgstr "Hírforrás részletei" #: ../conduit/modules/FeedModule/FeedModule.py:115 msgid "Feed address" msgstr "Hírforrás címe" #: ../conduit/modules/FeedModule/FeedModule.py:118 msgid "Enclosure settings" msgstr "Forrás beállításai" #: ../conduit/modules/FeedModule/FeedModule.py:119 msgid "Limit downloaded enclosures" msgstr "Letöltött források számának korlátozása" #: ../conduit/modules/FeedModule/FeedModule.py:125 msgid "Limit to" msgstr "Korlátozás:" #: ../conduit/modules/FeedModule/FeedModule.py:129 msgid "Randomize enclosures" msgstr "Források véletlenszerűsítése" #: ../conduit/modules/FeedModule/FeedModule.py:133 msgid "Download types" msgstr "Típusok letöltése" #: ../conduit/modules/FeedModule/FeedModule.py:134 msgid "Download audio files" msgstr "Hangfájlok letöltése" #: ../conduit/modules/FeedModule/FeedModule.py:135 msgid "Download video files" msgstr "Videofájlok letöltése" #: ../conduit/modules/FeedModule/FeedModule.py:136 msgid "Download photo files" msgstr "Fényképek letöltése" #: ../conduit/modules/FileModule/FileConfiguration.py:111 msgid "Icon" msgstr "Ikon" #: ../conduit/modules/FileModule/FileConfiguration.py:123 #: ../conduit/modules/GConfModule/GConfModule.py:138 msgid "Items" msgstr "Elemek" #: ../conduit/modules/FileModule/FileConfiguration.py:149 #, python-format msgid "Contains %s files" msgstr "%s fájlt tartalmaz" #: ../conduit/modules/FileModule/FileConfiguration.py:248 msgid "Include file..." msgstr "Fájl felvétele…" #: ../conduit/modules/FileModule/FileConfiguration.py:258 msgid "All files" msgstr "Minden fájl" #: ../conduit/modules/FileModule/FileConfiguration.py:271 msgid "Include folder..." msgstr "Mappa felvétele…" #: ../conduit/modules/FileModule/FileConfiguration.py:314 msgid "Please Name All Folders" msgstr "Nevezzen el minden mappát" #: ../conduit/modules/FileModule/FileConfiguration.py:315 msgid "All folders require a descriptive name. To name a folder simply click on it" msgstr "" "Minden mappának rendelkeznie kell leíró névvel. Mappa elnevezéséhez " "kattintson rá." #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "Fájlok" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "Több fájl szinkronizálásának forrása" #: ../conduit/modules/FileModule/FileModule.py:83 msgid "Synchronize folders" msgstr "Mappák szinkronizálása" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:40 msgid "Firefox 3 Bookmarks" msgstr "Firefox 3 könyvjelzők" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:41 msgid "Syncronize your Firefox 3 Bookmarks" msgstr "Firefox 3 könyvjelzők szinkronizálása" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:100 msgid "Firefox Profile" msgstr "Firefox profil" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 msgid "Flickr" msgstr "Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 msgid "Synchronize your Flickr.com photos" msgstr "Flickr.com fényképek szinkronizálása" #: ../conduit/modules/FlickrModule/FlickrModule.py:287 msgid "Failed to connect." msgstr "A csatlakozás meghiúsult." #: ../conduit/modules/FlickrModule/FlickrModule.py:290 msgid "Album names loaded." msgstr "Albumnevek betöltve." #: ../conduit/modules/FlickrModule/FlickrModule.py:292 msgid "Failed to login." msgstr "A bejelentkezés meghiúsult." #: ../conduit/modules/FlickrModule/FlickrModule.py:303 msgid "Logging in, please wait..." msgstr "Bejelentkezés, kis türelmet…" #: ../conduit/modules/FlickrModule/FlickrModule.py:308 #: ../conduit/modules/GoogleBookmarksModule.py:67 #: ../conduit/modules/ZotoModule/ZotoModule.py:244 msgid "Username" msgstr "Felhasználónév" #: ../conduit/modules/FlickrModule/FlickrModule.py:318 msgid "Authenticate" msgstr "Hitelesítés" #: ../conduit/modules/FlickrModule/FlickrModule.py:322 #: ../conduit/modules/ZotoModule/ZotoModule.py:251 msgid "Saved photo settings" msgstr "Mentett fényképek beállításai" #: ../conduit/modules/FlickrModule/FlickrModule.py:327 msgid "Resize photos" msgstr "Fényképek átméretezése" #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "Do not resize" msgstr "Ne méretezze át" #: ../conduit/modules/FlickrModule/FlickrModule.py:331 msgid "Photos are public" msgstr "A fényképek nyilvánosak" #: ../conduit/modules/FspotModule/FspotModule.py:25 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 msgid "Synchronize your F-Spot photos" msgstr "F-Spot fényképek szinkronizálása" #: ../conduit/modules/FspotModule/FspotModule.py:152 msgid "F-Spot DBus interface is operating in read-only mode" msgstr "Az F-Spot DBus felület írásvédett módban működik" #: ../conduit/modules/FspotModule/FspotModule.py:218 msgid "F-Spot is running" msgstr "Az F-Spot fut" #: ../conduit/modules/FspotModule/FspotModule.py:219 msgid "Please start F-Spot or activate the D-Bus Extension" msgstr "Indítsa el az F-Spotot vagy aktiválja a D-Bus kiterjesztést" #: ../conduit/modules/FspotModule/FspotModule.py:244 msgid "Start F-Spot" msgstr "F-Spot indítása" #: ../conduit/modules/FspotModule/FspotModule.py:248 #: ../conduit/modules/FspotModule/FspotModule.py:249 msgid "Tags" msgstr "Címkék" #: ../conduit/modules/FspotModule/FspotModule.py:262 msgid "Add tags" msgstr "Címkék hozzáadása" #: ../conduit/modules/FspotModule/FspotModule.py:263 msgid "Tag name" msgstr "Címke neve" #: ../conduit/modules/FspotModule/FspotModule.py:266 msgid "Add tag" msgstr "Címke hozzáadása" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "Application Settings" msgstr "Alkalmazásbeállítások" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Synchronize your application settings" msgstr "Alkalmazások beállításainak szinkronizálása" #: ../conduit/modules/GConfModule/GConfModule.py:31 msgid "Metacity" msgstr "Metacity" #: ../conduit/modules/GConfModule/GConfModule.py:32 msgid "Nautilus" msgstr "Nautilus" #: ../conduit/modules/GConfModule/GConfModule.py:33 msgid "Preferred Applications" msgstr "Alapértelmezett alkalmazások" #: ../conduit/modules/GConfModule/GConfModule.py:34 msgid "Desktop Interface" msgstr "Asztali környezet felülete" #: ../conduit/modules/GConfModule/GConfModule.py:35 msgid "Gnome Terminal" msgstr "Gnome terminál" #: ../conduit/modules/GConfModule/GConfModule.py:137 msgid "Applications to Synchronize" msgstr "Szinkronizálandó alkalmazások" #: ../conduit/modules/GoogleBookmarksModule.py:19 msgid "Google Bookmarks" msgstr "Google könyvjelzők" #: ../conduit/modules/GoogleBookmarksModule.py:20 msgid "Sync your Google Bookmarks" msgstr "Google könyvjelzők szinkronizálása" #: ../conduit/modules/GoogleBookmarksModule.py:66 msgid "Login Details" msgstr "Bejelentkezés részleteo" #: ../conduit/modules/GoogleBookmarksModule.py:70 #: ../conduit/modules/ZotoModule/ZotoModule.py:247 msgid "Password" msgstr "Jelszó" #: ../conduit/modules/GoogleModule/GoogleModule.py:399 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:4 msgid "Google Calendar" msgstr "Google naptár" #: ../conduit/modules/GoogleModule/GoogleModule.py:400 msgid "Synchronize your Google Calendar" msgstr "Google naptár szinkronizálása" #: ../conduit/modules/GoogleModule/GoogleModule.py:582 msgid "Picasa" msgstr "Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:583 msgid "Synchronize your Google Picasa photos" msgstr "Google Picasa fényképek szinkronizálása" #: ../conduit/modules/GoogleModule/GoogleModule.py:745 msgid "Google Contacts" msgstr "Google névjegyek" #: ../conduit/modules/GoogleModule/GoogleModule.py:746 msgid "Synchronize your Google Mail contacts" msgstr "Google Mail névjegyek szinkronizálása" #: ../conduit/modules/GoogleModule/GoogleModule.py:1076 msgid "Google Documents" msgstr "Google dokumentumok" #: ../conduit/modules/GoogleModule/GoogleModule.py:1077 msgid "Synchronize your Google Documents" msgstr "Google dokumentumok szinkronizálása" #: ../conduit/modules/GoogleModule/GoogleModule.py:1322 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:69 msgid "Unknown" msgstr "Ismeretlen" #: ../conduit/modules/GoogleModule/GoogleModule.py:1323 msgid "miscellaneous" msgstr "egyéb" #: ../conduit/modules/GoogleModule/GoogleModule.py:1324 msgid "No description." msgstr "Nincs leírás." #: ../conduit/modules/GoogleModule/GoogleModule.py:1333 msgid "YouTube" msgstr "YouTube" #: ../conduit/modules/GoogleModule/GoogleModule.py:1334 msgid "Synchronize data from YouTube" msgstr "YouTube adatok szinkronizálása" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:1 msgid "Account Details" msgstr "Fiók részletei" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:2 msgid "Calendar:" msgstr "Naptár:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:3 msgid "Email:" msgstr "E-mail:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:5 msgid "Load Calendars" msgstr "Naptárak betöltése" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:6 msgid "Password:" msgstr "Jelszó:" #: ../conduit/modules/iPodModule/iPodModule.py:180 msgid "Synchronize your iPod notes" msgstr "iPod jegyzetek szinkronizálása" #: ../conduit/modules/iPodModule/iPodModule.py:295 #: ../conduit/modules/SynceModule.py:311 msgid "Contacts" msgstr "Névjegyek" #: ../conduit/modules/iPodModule/iPodModule.py:296 msgid "Synchronize your iPod contacts" msgstr "iPod névjegyek szinkronizálása" #: ../conduit/modules/iPodModule/iPodModule.py:331 #: ../conduit/modules/SynceModule.py:449 msgid "Calendar" msgstr "Naptár" #: ../conduit/modules/iPodModule/iPodModule.py:332 msgid "Synchronize your iPod calendar" msgstr "iPod naptár szinkronizálása" #: ../conduit/modules/iPodModule/iPodModule.py:368 msgid "Synchronize your iPod photos" msgstr "iPod fényképek szinkronizálása" #: ../conduit/modules/iPodModule/iPodModule.py:465 msgid "Delete" msgstr "Törlés" #: ../conduit/modules/iPodModule/iPodModule.py:695 #: ../conduit/modules/iPodModule/iPodModule.py:812 #: ../conduit/modules/N800Module/N800Module.py:77 msgid "Encoding" msgstr "Kódolás" #: ../conduit/modules/iPodModule/iPodModule.py:811 msgid "Conversion options" msgstr "Átalakítási beállítások" #: ../conduit/modules/iPodModule/iPodModule.py:816 msgid "Keep converted files" msgstr "Konvertált fájlok megtartása" #: ../conduit/modules/iPodModule/iPodModule.py:846 msgid "iPod Music" msgstr "iPod zene" #: ../conduit/modules/iPodModule/iPodModule.py:847 msgid "Synchronize your iPod music" msgstr "iPod zene szinkronizálása" #: ../conduit/modules/iPodModule/iPodModule.py:882 msgid "iPod Video" msgstr "iPod videó" #: ../conduit/modules/iPodModule/iPodModule.py:883 msgid "Synchronize your iPod videos" msgstr "iPod videók szinkronizálása" #: ../conduit/modules/iPodModule/iPodModule.py:907 msgid "Movie" msgstr "Film" #: ../conduit/modules/iPodModule/iPodModule.py:908 msgid "Music Video" msgstr "Zenei videó" #: ../conduit/modules/iPodModule/iPodModule.py:909 msgid "TV Show" msgstr "TV-műsor" #: ../conduit/modules/iPodModule/iPodModule.py:911 msgid "Video kind" msgstr "Videó fajtája" #. Translators: Translate this in derived classes. #: ../conduit/modules/N800Module/N800Module.py:55 msgid "Conduit" msgstr "Conduit" #: ../conduit/modules/N800Module/N800Module.py:105 msgid "N800 Files" msgstr "N800 fájlok" #: ../conduit/modules/N800Module/N800Module.py:106 msgid "Synchronizes files/folders to a N800 device" msgstr "Fájlok és mappák szinkronizálása N800 eszközre" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:111 msgid "Backups" msgstr "Mentések" #: ../conduit/modules/N800Module/N800Module.py:126 msgid "N800 Music" msgstr "N800 zene" #: ../conduit/modules/N800Module/N800Module.py:127 msgid "Synchronizes music to a N800 device" msgstr "Zene szinkronizálása N800 eszközre" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:133 msgid "Music" msgstr "Zene" #: ../conduit/modules/N800Module/N800Module.py:150 msgid "N800 Videos" msgstr "N800 videók" #: ../conduit/modules/N800Module/N800Module.py:151 msgid "Synchronizes video to a N800 device" msgstr "Videók szinkronizálása N800 eszközre" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:157 msgid "Video" msgstr "Videó" #: ../conduit/modules/N800Module/N800Module.py:174 msgid "N800 Photos" msgstr "N800 fényképek" #: ../conduit/modules/N800Module/N800Module.py:175 msgid "Synchronizes photos to an N800 device" msgstr "Fényképek szinkronizálása N800 eszközre" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:181 msgid "Photo" msgstr "Fotó" #: ../conduit/modules/NautilusBookmarksModule.py:19 msgid "Nautilus Bookmarks" msgstr "Nautilus könyvjelzők" #: ../conduit/modules/NautilusBookmarksModule.py:20 msgid "Sync your Nautilus Bookmarks" msgstr "Nautilus könyvjelzők szinkronizálása" #: ../conduit/modules/NautilusBookmarksModule.py:145 msgid "Sync bookmarks to local places/files" msgstr "Könyvjelzők szinkronizálása helyi helyekre/fájlokra" #: ../conduit/modules/NautilusBookmarksModule.py:148 msgid "Sync bookmarks to remote places/files" msgstr "Könyvjelzők szinkronizálása távoli helyekre/fájlokra" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "Hálózat" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "Szinkronizálás engedélyezése hálózaton" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:44 msgid "Rhythmbox Music" msgstr "Rhythmbox zene" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:45 msgid "Synchronize songs from your Rhythmbox playlists" msgstr "Zeneszámok szinkronizálása a Rythmbox lejátszólistákról" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 msgid "Shutterfly" msgstr "Shutterfly" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 msgid "Synchronize your Shutterfly photos" msgstr "Shutterfly fényképek szinkronizálása" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "%Y. %m %d. %k.%M.%S" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 msgid "SmugMug" msgstr "SmugMug" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 msgid "Synchronize your SmugMug.com photos" msgstr "SmugMug.com fényképek szinkronizálása" #: ../conduit/modules/SynceModule.py:139 msgid "Create Partnership" msgstr "Kapcsolat létrehozása" #: ../conduit/modules/SynceModule.py:312 msgid "Windows Mobile Contacts" msgstr "Windows Mobile névjegyek" #: ../conduit/modules/SynceModule.py:450 msgid "Windows Mobile Calendar" msgstr "Windows Mobile naptár" #: ../conduit/modules/SynceModule.py:459 msgid "Tasks" msgstr "Feladatok" #: ../conduit/modules/SynceModule.py:460 msgid "Windows Mobile Tasks" msgstr "Windows Mobile feladatok" #: ../conduit/modules/TomboyModule.py:103 msgid "Tomboy Notes" msgstr "Tomboy jegyzetek" #: ../conduit/modules/TomboyModule.py:104 msgid "Synchronize your Tomboy notes" msgstr "Tomboy jegyzetek szinkronizálása" #: ../conduit/modules/ZotoModule/ZotoModule.py:154 msgid "Zoto" msgstr "Zoto" #: ../conduit/modules/ZotoModule/ZotoModule.py:155 msgid "Synchronize your Zoto photos" msgstr "Zoto fényképek szinkronizálása" conduit-0.3.17/po/el.po0000644000175000017500000010062011172176633011554 00000000000000# translation of conduit.HEAD.po to Greek # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Jennie Petoumenou , 2009. msgid "" msgstr "" "Project-Id-Version: conduit.HEAD\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-02-16 17:18+0000\n" "PO-Revision-Date: 2009-02-03 12:08+0100\n" "Last-Translator: Jennie Petoumenou \n" "Language-Team: Greek \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" #: ../data/conduit.desktop.in.in.h:1 msgid "Conduit Synchronizer" msgstr "Conduit: εφαρμογή συγχρονισμού" #: ../data/conduit.desktop.in.in.h:2 msgid "Synchronization for GNOME" msgstr "Συγχρονισμός για GNOME" #: ../data/conduit.glade.h:1 msgid "Default Synchronization Options" msgstr "Προεπιλογές συγχρονισμού" #: ../data/conduit.glade.h:2 msgid "General" msgstr "Γενικά" #: ../data/conduit.glade.h:3 msgid "Always Up-To-Date" msgstr "Πάντα επικαιροποιημένη" #: ../data/conduit.glade.h:4 msgid "Ask Me What to Do" msgstr "Ερώτηση για το τι θα συμβεί" #: ../data/conduit.glade.h:5 msgid "Ask me what to do" msgstr "Ερώτηση για το τι θα συμβεί" #: ../data/conduit.glade.h:6 msgid "Cancel Synchronization" msgstr "Ακύρωση συγχρονισμού" #: ../data/conduit.glade.h:7 msgid "Cancel currently-synchronizing groups" msgstr "Ακύρωση των ομάδων που συγχρονίζονται αυτή τη στιγμή" #: ../data/conduit.glade.h:8 msgid "Clear Canvas" msgstr "Εκκαθάριση πίνακα" #: ../data/conduit.glade.h:9 msgid "Compare" msgstr "Σύγκριση" #: ../data/conduit.glade.h:10 msgid "Conduit Preferences" msgstr "Προτιμήσεις του Conduit" #: ../data/conduit.glade.h:11 msgid "Configuration" msgstr "Ρύθμιση" #: ../data/conduit.glade.h:12 msgid "Configure Item" msgstr "Ρύθμιση αντικειμένου" #: ../data/conduit.glade.h:13 msgid "Configure the synchronization settings for this item" msgstr "Επιλογή των ρυθμίσεων συγχρονισμού για αυτό το αντικείμενο" #: ../data/conduit.glade.h:14 msgid "Conflict Options" msgstr "Επιλογές σε περίπτωση συγκρούσεων" #: ../data/conduit.glade.h:15 msgid "Conflicts" msgstr "Συγκρούσεις" #: ../data/conduit.glade.h:16 msgid "Contents" msgstr "Περιεχόμενα" #: ../data/conduit.glade.h:17 msgid "Data Conversions" msgstr "Μετατροπές δεδομένων" #: ../data/conduit.glade.h:18 msgid "Data Providers" msgstr "Πάροχοι δεδομένων" #: ../data/conduit.glade.h:19 msgid "Delete Group" msgstr "Διαγραφή ομάδας" #: ../data/conduit.glade.h:20 msgid "Delete Item" msgstr "Διαγραφή αντικειμένου" #: ../data/conduit.glade.h:21 msgid "Delete Options" msgstr "Επιλογές διαγραφής" #: ../data/conduit.glade.h:22 msgid "Delete from the corresponding sink" msgstr "Διαγραφή από τον αντίστοιχο ταμιευτήρα" #: ../data/conduit.glade.h:23 msgid "Delete the Corresponding Item" msgstr "Διαγραφή του αντίστοιχου αντικειμένου" #: ../data/conduit.glade.h:24 msgid "Editor" msgstr "Επεξεργαστής" #: ../data/conduit.glade.h:25 msgid "Minimize to notification area" msgstr "Ελαχιστοποίηση στην περιοχή ειδοποιήσεων" #: ../data/conduit.glade.h:26 msgid "Refresh Group" msgstr "Ανανέωση ομάδας" #: ../data/conduit.glade.h:27 msgid "Refresh Item" msgstr "Ανανέωση αντικειμένου" #: ../data/conduit.glade.h:28 msgid "Replace the Older Item" msgstr "Αντικατάσταση του παλαιότερου αντικειμένου" #: ../data/conduit.glade.h:29 msgid "Replace the older item" msgstr "Αντικατάσταση του παλαιότερου αντικειμένου" #: ../data/conduit.glade.h:30 msgid "Resolve Conflicts" msgstr "Επίλυση συγκρούσεων" #: ../data/conduit.glade.h:31 msgid "Save settings on exit" msgstr "Αποθήκευση των αλλαγών κατά την έξοδο" #: ../data/conduit.glade.h:32 msgid "Show Hints" msgstr "Εμφάνιση συμβουλών" #: ../data/conduit.glade.h:33 msgid "Show status icon" msgstr "Εμφάνιση εικονιδίου κατάστασης στην περιοχή ειδοποιήσεων" #: ../data/conduit.glade.h:34 msgid "Skip" msgstr "Προσπέραση" #: ../data/conduit.glade.h:35 msgid "Slow Synchronization" msgstr "Αργός συγχρονισμός" #: ../data/conduit.glade.h:36 msgid "Start Conduit at login" msgstr "Εκκίνηση του Conduit κατά την είσοδο" #: ../data/conduit.glade.h:37 msgid "Synchronization Options" msgstr "Επιλογές συγχρονισμού" #: ../data/conduit.glade.h:38 msgid "Synchronize All" msgstr "Συγχρονισμός όλων" #: ../data/conduit.glade.h:39 msgid "Synchronize Group" msgstr "Συγχρονισμός ομάδας" #: ../data/conduit.glade.h:40 msgid "Synchronize group" msgstr "Συγχρονισμός ομάδας" #: ../data/conduit.glade.h:41 msgid "Synchronizes all groups" msgstr "Συγχρονισμός όλων των ομάδων" #: ../data/conduit.glade.h:42 msgid "Title" msgstr "Τίτλος" #: ../data/conduit.glade.h:43 msgid "Two-Way Synchronization" msgstr "Αμφίδρομος συγχρονισμός" #: ../data/conduit.glade.h:44 msgid "When an item has been deleted:" msgstr "Όταν ένα αντικείμενο έχει διαγραφεί:" #: ../data/conduit.glade.h:45 msgid "When an item is deleted..." msgstr "Όταν ένα αντικείμενο έχει διαγραφεί..." #: ../data/conduit.glade.h:46 msgid "When there is a conflict..." msgstr "Όταν υπάρχει σύγκρουση..." #: ../data/conduit.glade.h:47 msgid "When there is a two-way conflict:" msgstr "Όταν υπάρχει αμφίδρομη σύγκρουση:" #: ../data/conduit.glade.h:48 msgid "_Edit" msgstr "_Επεξεργασία" #: ../data/conduit.glade.h:49 msgid "_File" msgstr "_Αρχείο" #: ../data/conduit.glade.h:50 msgid "_Help" msgstr "_Βοήθεια" #: ../conduit/gtkui/Canvas.py:151 msgid "Drag a Data Provider here to continue" msgstr "Για να συνεχίσετε, σύρτε έναν πάροχο δεδομένων εδώ" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:91 msgid "Source" msgstr "Πηγή" #: ../conduit/gtkui/ConflictResolver.py:105 msgid "Resolution" msgstr "Επίλυση" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:110 msgid "Sink" msgstr "Ταμιευτήρας" #: ../conduit/gtkui/ConflictResolver.py:150 #: ../conduit/gtkui/ConflictResolver.py:151 #, python-format msgid "Conflicts (%s)" msgstr "Συγκρούσεις (%s)" #. Build some liststores to display #: ../conduit/gtkui/UI.py:321 msgid "Convert from" msgstr "Μετατροπή από" #: ../conduit/gtkui/UI.py:322 msgid "into" msgstr "σε" #: ../conduit/gtkui/UI.py:373 msgid "Relationship Database" msgstr "Βάση συσχετισμών" #: ../conduit/gtkui/UI.py:377 msgid "Conversions Available" msgstr "Διαθέσιμες μετατροπές" #: ../conduit/gtkui/UI.py:383 ../conduit/gtkui/Tree.py:348 #: ../conduit/modules/FileModule/FileConfiguration.py:105 msgid "Name" msgstr "Όνομα" #: ../conduit/gtkui/UI.py:387 msgid "Loaded" msgstr "Φορτωμένο" #: ../conduit/gtkui/UI.py:515 ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "Γίνεται συγχρονισμός. Θέλετε να τον ακυρώσετε;" #: ../conduit/gtkui/UI.py:681 msgid "_Synchronize All" msgstr "_Συγχρονισμός όλων" #: ../conduit/gtkui/UI.py:681 msgid "Synchronizes All Groups" msgstr "Συγχρονισμός όλων των ομάδων" #: ../conduit/gtkui/UI.py:682 msgid "_Cancel Synchronization" msgstr "Α_κύρωση συγχρονισμού" #: ../conduit/gtkui/UI.py:682 msgid "Cancels Currently Synchronizing Groups" msgstr "Ακύρωση των ομάδων που συγχρονίζονται αυτή τη στιγμή" #: ../conduit/gtkui/UI.py:683 msgid "_Quit" msgstr "Έ_ξοδος" #: ../conduit/gtkui/UI.py:683 msgid "Close Conduit" msgstr "Κλείσιμο του Conduit" #: ../conduit/gtkui/UI.py:723 msgid "Synchronization Error" msgstr "Σφάλμα συγχρονισμού" #: ../conduit/gtkui/UI.py:726 msgid "Synchronization Complete" msgstr "Ο συγχρονισμός ολοκληρώθηκε" #: ../conduit/gtkui/UI.py:742 msgid "Synchronizing" msgstr "Γίνεται συγχρονισμός" #: ../conduit/gtkui/Tree.py:357 msgid "Description" msgstr "Περιγραφή" #: ../conduit/dataproviders/DataProvider.py:19 msgid "Ready" msgstr "Έτοιμο" #: ../conduit/dataproviders/DataProvider.py:20 msgid "New data to sync" msgstr "Νέα δεδομένα για συγχρονισμό" #: ../conduit/dataproviders/DataProvider.py:21 msgid "Refreshing..." msgstr "Ανανέωση..." #: ../conduit/dataproviders/DataProvider.py:22 msgid "Refreshed OK" msgstr "Ολοκληρώθηκε η ανανέωση" #: ../conduit/dataproviders/DataProvider.py:23 msgid "Error Refreshing" msgstr "Σφάλμα κατά την ανανέωση" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Synchronizing..." msgstr "Γίνεται συγχρονισμός..." #: ../conduit/dataproviders/DataProvider.py:25 msgid "Synchronized OK" msgstr "Ολοκληρώθηκε ο συγχρονισμός" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Synchronizing" msgstr "Σφάλμα κατά το συγχρονισμό" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronization Skipped" msgstr "Έγινε προσπέραση του συγχρονισμού" #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronization Cancelled" msgstr "Ακυρώθηκε ο συγχρονισμός" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Synchronization Conflict" msgstr "Σύγκρουση συγχρονισμού" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Not Configured" msgstr "Δεν έχει ρυθμιστεί" #: ../conduit/modules/BackpackModule/BackpackModule.py:56 msgid "Backpack Notes" msgstr "Backpack σημειώσεις" #: ../conduit/modules/BackpackModule/BackpackModule.py:57 msgid "Store things in Backpack Notes" msgstr "Αποθήκευση σε σημειώσεις Backpack" #: ../conduit/modules/BackpackModule/config.glade.h:1 #: ../conduit/modules/FlickrModule/config.glade.h:1 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:1 #: ../conduit/modules/GoogleModule/documents-config.glade.h:1 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:1 #: ../conduit/modules/GoogleModule/youtube-config.glade.h:1 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:1 #: ../conduit/modules/SmugMugModule/config.glade.h:1 #: ../conduit/modules/ZotoModule/zoto.glade.h:1 msgid "Account Details" msgstr "Στοιχεία λογαριασμού" #: ../conduit/modules/BackpackModule/config.glade.h:2 msgid "Saved Note Settings" msgstr "Ρυθμίσεις αποθηκευμένων σημειώσεων" #: ../conduit/modules/BackpackModule/config.glade.h:3 msgid "API key:" msgstr "Κλειδί API:" #: ../conduit/modules/BackpackModule/config.glade.h:4 msgid "Backpack" msgstr "Backpack" #: ../conduit/modules/BackpackModule/config.glade.h:5 msgid "Save notes in page:" msgstr "Αποθήκευση σημειώσεων στη σελίδα:" #: ../conduit/modules/BackpackModule/config.glade.h:6 #: ../conduit/modules/FlickrModule/config.glade.h:8 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:8 #: ../conduit/modules/GoogleModule/youtube-config.glade.h:9 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:6 #: ../conduit/modules/SmugMugModule/config.glade.h:7 #: ../conduit/modules/ZotoModule/zoto.glade.h:5 msgid "Username:" msgstr "Όνομα χρήστη:" #: ../conduit/modules/BansheeModule/BansheeModule.py:51 msgid "Banshee Playlists" msgstr "Banshee λίστες αναπαραγωγής" #: ../conduit/modules/BansheeModule/BansheeModule.py:52 msgid "Synchronize your Banshee playlists" msgstr "Συγχρονισμός των λιστών αναπαραγωγής σας στο Banshee" #. column 1 is the tag name #: ../conduit/modules/BansheeModule/BansheeModule.py:217 msgid "Playlist Name" msgstr "Όνομα λίστας" #: ../conduit/modules/BansheeModule/BansheeModule.py:225 #: ../conduit/modules/FspotModule/FspotModule.py:254 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:153 msgid "Enabled" msgstr "Ενεργοποιημένες" #: ../conduit/modules/BansheeModule/config.glade.h:1 msgid "Return Playlists" msgstr "Επιστροφή λιστών αναπαραγωγής" #: ../conduit/modules/BansheeModule/config.glade.h:2 msgid "Banshee" msgstr "Banshee" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 #: ../conduit/modules/BoxDotNetModule/config.glade.h:1 msgid "Box.net" msgstr "Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 msgid "Synchronize your Box.net files" msgstr "Συγχρονισμός των αρχείων σας στο Box.net" #: ../conduit/modules/BoxDotNetModule/config.glade.h:2 msgid "Folder:" msgstr "Φάκελος:" #: ../conduit/modules/BoxDotNetModule/config.glade.h:3 #: ../conduit/modules/FacebookModule/config.glade.h:3 #: ../conduit/modules/FlickrModule/config.glade.h:4 msgid "Load" msgstr "Φόρτωση" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:108 #, python-format msgid "Select %s:" msgstr "Επιλέξτε %s:" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:147 msgid "Evolution Contacts" msgstr "Evolution επαφές" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:148 msgid "Synchronize your contacts" msgstr "Συγχρονισμός των επαφών σας" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:198 msgid "Evolution Calendar" msgstr "Evolution ημερολόγιο" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:199 msgid "Synchronize your calendar" msgstr "Συγχρονισμός του ημερολογίου σας" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:260 msgid "Evolution Tasks" msgstr "Evolution εργασίες" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:261 msgid "Synchronize your tasks" msgstr "Συγχρονισμός των εργασιών σας" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:317 msgid "Evolution Memos" msgstr "Evolution υπενθυμίσεις" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:318 msgid "Synchronize your memos" msgstr "Συγχρονισμός των υπενθυμίσεών σας" #: ../conduit/modules/EvolutionModule/config.glade.h:1 msgid "Addressbook:" msgstr "Βιβλίο διευθύνσεων:" #: ../conduit/modules/EvolutionModule/config.glade.h:2 msgid "Evolution" msgstr "Evolution" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 #: ../conduit/modules/FacebookModule/config.glade.h:2 msgid "Facebook" msgstr "Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:39 msgid "Synchronize your Facebook photos" msgstr "Συγχρονισμός των φωτογραφιών σας στο Facebook" #: ../conduit/modules/FacebookModule/config.glade.h:1 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:3 #: ../conduit/modules/iPodModule/config.glade.h:2 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:3 #: ../conduit/modules/SmugMugModule/config.glade.h:3 #: ../conduit/modules/ZotoModule/zoto.glade.h:3 msgid "Album:" msgstr "Άλμπουμ:" #: ../conduit/modules/FeedModule/FeedModule.py:58 #: ../conduit/modules/FeedModule/config.glade.h:9 msgid "RSS Feed" msgstr "Ροή RSS" #: ../conduit/modules/FeedModule/FeedModule.py:59 msgid "Synchronize data from RSS enclosures" msgstr "Συγχρονισμός δεδομένων από ροές RSS" #: ../conduit/modules/FeedModule/config.glade.h:1 msgid "Enclosure Settings" msgstr "Ρυθμίσεις συνδεδεμένων αρχείων" #: ../conduit/modules/FeedModule/config.glade.h:2 msgid "Feed Details" msgstr "Λεπτομέρειες ροής" #: ../conduit/modules/FeedModule/config.glade.h:3 msgid "Download Audio Files" msgstr "Λήψη αρχείων ήχου" #: ../conduit/modules/FeedModule/config.glade.h:4 msgid "Download Photos" msgstr "Λήψη φωτογραφιών" #: ../conduit/modules/FeedModule/config.glade.h:5 msgid "Download Video Files" msgstr "Λήψη αρχείων βίντεο" #: ../conduit/modules/FeedModule/config.glade.h:6 msgid "Feed Address:" msgstr "Διεύθυνση ροής:" #: ../conduit/modules/FeedModule/config.glade.h:7 msgid "" "Limit the Number of\n" "Enclosures Downloaded to:" msgstr "" "Περιορισμός αριθμού\n" "ληφθέντων αρχείων σε:" #: ../conduit/modules/FeedModule/config.glade.h:10 msgid "Randomize Enclosures" msgstr "Τυχαία σειρά αρχείων" #: ../conduit/modules/FileModule/FileConfiguration.py:99 msgid "Icon" msgstr "Εικονίδιο" #: ../conduit/modules/FileModule/FileConfiguration.py:111 msgid "Items" msgstr "Αντικείμενα" #: ../conduit/modules/FileModule/FileConfiguration.py:137 #, python-format msgid "Contains %s files" msgstr "Περιέχει %s αρχεία" #: ../conduit/modules/FileModule/FileConfiguration.py:228 msgid "Include file..." msgstr "Συμπερίληψη αρχείου..." #: ../conduit/modules/FileModule/FileConfiguration.py:238 msgid "All files" msgstr "Όλα τα αρχεία" #: ../conduit/modules/FileModule/FileConfiguration.py:253 msgid "Include folder..." msgstr "Συμπερίληψη φακέλου..." #: ../conduit/modules/FileModule/FileConfiguration.py:298 msgid "Please Name All Folders" msgstr "Παρακαλώ, ονομάστε όλους τους φακέλους" #: ../conduit/modules/FileModule/FileConfiguration.py:299 msgid "" "All folders require a descriptive name. To name a folder simply click on it" msgstr "" "Όλοι οι φάκελοι πρέπει να διαθέτουν ένα περιγραφικό όνομα. Για να ονομάσετε " "ένα φάκελο, απλά κάντε κλικ πάνω του" #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "Αρχεία" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "Πηγή για το συγχρονισμό πολλαπλών αρχείων" #: ../conduit/modules/FileModule/FileModule.py:63 msgid "Folder" msgstr "Φάκελος" #: ../conduit/modules/FileModule/FileModule.py:64 msgid "Synchronize folders" msgstr "Συγχρονισμός φακέλων" #: ../conduit/modules/FileModule/config.glade.h:1 msgid "Items to Synchronize" msgstr "Αντικείμενα για συγχρονισμό" #: ../conduit/modules/FileModule/config.glade.h:2 msgid "Add Directory" msgstr "Προσθήκη καταλόγου" #: ../conduit/modules/FileModule/config.glade.h:3 msgid "Add File" msgstr "Προσθήκη αρχείου" #: ../conduit/modules/FileModule/config.glade.h:4 msgid "Advanced" msgstr "Για προχωρημένους" #: ../conduit/modules/FileModule/config.glade.h:5 msgid "File Configuration" msgstr "Ρύθμιση αρχείων" #: ../conduit/modules/FileModule/config.glade.h:6 msgid "Folder Configuration" msgstr "Ρύθμιση φακέλου" #: ../conduit/modules/FileModule/config.glade.h:7 msgid "Folder Location:" msgstr "Τοποθεσία φακέλου:" #: ../conduit/modules/FileModule/config.glade.h:8 msgid "Follow Symbolic Links" msgstr "Να ακολουθούνται οι συμβολικοί σύνδεσμοι" #: ../conduit/modules/FileModule/config.glade.h:9 msgid "Ignore File Modification Times" msgstr "Να αγνοείται ο χρόνος τροποποίησης των αρχείων" #: ../conduit/modules/FileModule/config.glade.h:10 msgid "Include Hidden Files" msgstr "Να συμπεριλαμβάνονται τα κρυφά αρχεία" #: ../conduit/modules/FileModule/config.glade.h:11 msgid "Select A Folder" msgstr "Επιλογή φακέλου" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 #: ../conduit/modules/FlickrModule/config.glade.h:3 msgid "Flickr" msgstr "Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 msgid "Synchronize your Flickr.com photos" msgstr "Συγχρονισμός των φωτογραφιών σας στο Flickr.com" #: ../conduit/modules/FlickrModule/config.glade.h:2 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:2 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:2 #: ../conduit/modules/SmugMugModule/config.glade.h:2 #: ../conduit/modules/ZotoModule/zoto.glade.h:2 msgid "Saved Photo Settings" msgstr "Ρυθμίσεις αποθηκευμένων φωτογραφιών" #: ../conduit/modules/FlickrModule/config.glade.h:5 msgid "Photos are public" msgstr "Δημόσιες φωτογραφίες" #: ../conduit/modules/FlickrModule/config.glade.h:6 msgid "Photoset Name:" msgstr "Όνομα ομάδας φωτογραφιών:" #: ../conduit/modules/FlickrModule/config.glade.h:7 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:7 #: ../conduit/modules/SmugMugModule/config.glade.h:5 msgid "Resize Photos:" msgstr "Αλλαγή διαστάσεων φωτογραφιών:" #: ../conduit/modules/FspotModule/FspotModule.py:25 #: ../conduit/modules/FspotModule/config.glade.h:3 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 msgid "Synchronize your F-Spot photos" msgstr "Συγχρονισμός των φωτογραφιών σας στο F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:127 msgid "F-Spot DBus interface is operating in read-only mode" msgstr "Η διεπαφή DBus του F-Spot βρίσκεται σε λειτουργία μόνο ανάγνωσης." #. column 1 is the tag name #: ../conduit/modules/FspotModule/FspotModule.py:246 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:145 msgid "Tag Name" msgstr "Όνομα ετικέτας" #: ../conduit/modules/FspotModule/config.glade.h:1 msgid "Return Photos Tagged With" msgstr "Επιστροφή φωτογραφιών με ετικέτα" #: ../conduit/modules/FspotModule/config.glade.h:2 msgid "Create Tags: " msgstr "Δημιουργία ετικετών:" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "Application Settings" msgstr "Ρυθμίσεις εφαρμογών" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Synchronize your application settings" msgstr "Συγχρονισμός των ρυθμίσεων των εφαρμογών σας" #: ../conduit/modules/GoogleModule/GoogleModule.py:369 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:4 msgid "Google Calendar" msgstr "Google ημερολόγιο" #: ../conduit/modules/GoogleModule/GoogleModule.py:370 msgid "Synchronize your Google Calendar" msgstr "Συγχρονισμός του ημερολογίου σας στο Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:555 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:6 msgid "Picasa" msgstr "Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:556 msgid "Synchronize your Google Picasa photos" msgstr "Συγχρονισμός των φωτογραφιών σας στο Picasa του Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:803 msgid "Google Contacts" msgstr "Google επαφές" #: ../conduit/modules/GoogleModule/GoogleModule.py:804 msgid "Synchronize your Google Mail contacts" msgstr "Συγχρονισμός των επαφών σας στο Google Mail" #: ../conduit/modules/GoogleModule/GoogleModule.py:1060 #: ../conduit/modules/GoogleModule/documents-config.glade.h:5 msgid "Google Documents" msgstr "Google έγγραφα" #: ../conduit/modules/GoogleModule/GoogleModule.py:1061 msgid "Synchronize your Google Documents" msgstr "Συγχρονισμός των εγγράφων σας στο Google Docs" #: ../conduit/modules/GoogleModule/GoogleModule.py:1338 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:67 msgid "Unknown" msgstr "Άγνωστο" #: ../conduit/modules/GoogleModule/GoogleModule.py:1339 msgid "miscellaneous" msgstr "Διάφορα" #: ../conduit/modules/GoogleModule/GoogleModule.py:1340 msgid "No description." msgstr "Χωρίς περιγραφή." #: ../conduit/modules/GoogleModule/GoogleModule.py:1349 msgid "YouTube" msgstr "YouTube" #: ../conduit/modules/GoogleModule/GoogleModule.py:1350 msgid "Synchronize data from YouTube" msgstr "Συγχρονισμός δεδομένων από το YouTube" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:2 msgid "Calendar:" msgstr "Ημερολόγιο:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:3 #: ../conduit/modules/GoogleModule/documents-config.glade.h:4 msgid "Email:" msgstr "Email:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:5 msgid "Load Calendars" msgstr "Φόρτωση ημερολογίων" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:6 #: ../conduit/modules/GoogleModule/documents-config.glade.h:6 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:5 #: ../conduit/modules/GoogleModule/youtube-config.glade.h:6 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:4 #: ../conduit/modules/SmugMugModule/config.glade.h:4 #: ../conduit/modules/ZotoModule/zoto.glade.h:4 msgid "Password:" msgstr "Συνθηματικό:" #: ../conduit/modules/GoogleModule/documents-config.glade.h:2 msgid "Downloaded Document Format" msgstr "Μορφή ληφθέντων εγγράφων" #: ../conduit/modules/GoogleModule/documents-config.glade.h:3 msgid "Documents" msgstr "Έγγραφα" #: ../conduit/modules/GoogleModule/documents-config.glade.h:7 msgid "Presentations" msgstr "Παρουσιάσεις" #: ../conduit/modules/GoogleModule/documents-config.glade.h:8 msgid "Spreadsheets" msgstr "Λογ. φύλλα" #: ../conduit/modules/GoogleModule/picasa-config.glade.h:4 msgid "Login" msgstr "Είσοδος" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:2 msgid "Download Videos" msgstr "Λήψη βίντεο" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:3 msgid "Favorites of above user" msgstr "Αγαπημένα του χρήστη" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:4 msgid "Max retrieved videos (0 is unlimited):" msgstr "Μέγιστος αριθμός βίντεο (0 για απειρα):" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:5 msgid "Most viewed" msgstr "Πιο δημοφιλή" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:7 msgid "Top rated" msgstr "Με την υψηλότερη βαθμολογία" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:8 msgid "Uploaded by above user" msgstr "Ανεβασμένα από το χρήστη" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:10 msgid "YouTube Source" msgstr "Πηγή YouTube" #: ../conduit/modules/iPodModule/iPodModule.py:732 msgid "Encoding" msgstr "Κωδικοποίηση" #: ../conduit/modules/iPodModule/iPodModule.py:864 msgid "Keep converted files" msgstr "Διατήρηση των αρχείων που μετατράπηκαν" #: ../conduit/modules/iPodModule/config.glade.h:1 msgid "Encoding" msgstr "Κωδικοποίηση" #: ../conduit/modules/iPodModule/config.glade.h:3 msgid "iPod Photos" msgstr "iPod φωτογραφίες" #. Translators: Translate this in derived classes. #: ../conduit/modules/N800Module/N800Module.py:55 msgid "Conduit" msgstr "Conduit" #. Translators: Format string used to describe the acceptable formats the #. device accepts. The first arg is replaced with DEFAULT_FOLDER and the second #. arg is a comma seperated list of encodings #: ../conduit/modules/N800Module/N800Module.py:59 #, python-format msgid "%s Format (%s)" msgstr "%s Μορφή (%s)" #. Signifies that a conversion should not take place #: ../conduit/modules/N800Module/N800Module.py:61 msgid "unchanged" msgstr "μη τροποποιημένο" #: ../conduit/modules/N800Module/N800Module.py:123 msgid "N800 Files" msgstr "N800 αρχεία" #: ../conduit/modules/N800Module/N800Module.py:124 msgid "Synchronizes files/folders to a N800 device" msgstr "Συγχρονισμός αρχείων/φακέλων με συσκευή N800" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:129 msgid "Backups" msgstr "Αντίγραφα Ασφαλείας" #: ../conduit/modules/N800Module/N800Module.py:144 msgid "N800 Music" msgstr "N800 μουσική" #: ../conduit/modules/N800Module/N800Module.py:145 msgid "Synchronizes music to a N800 device" msgstr "Συγχρονισμός μουσικής με συσκευή Ν800" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:151 msgid "Music" msgstr "Μουσική" #: ../conduit/modules/N800Module/N800Module.py:168 msgid "N800 Videos" msgstr "N800 βίντεο" #: ../conduit/modules/N800Module/N800Module.py:169 msgid "Synchronizes video to a N800 device" msgstr "Συγχρονισμός βίντεο με συσκευή Ν800" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:175 msgid "Video" msgstr "Βίντεο" #: ../conduit/modules/N800Module/N800Module.py:192 msgid "N800 Photos" msgstr "Ν800 φωτογραφίες" #: ../conduit/modules/N800Module/N800Module.py:193 msgid "Synchronizes photos to an N800 device" msgstr "Συγχρονισμός φωτογραφιών με συσκευή Ν800" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:199 msgid "Photo" msgstr "Φωτογραφίες" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "Δίκτυο" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "Να επιτρέπεται ο συγχρονισμός μέσω δικτύου" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:44 msgid "Rhythmbox Music" msgstr "Rhythmbox μουσική" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:45 msgid "Synchronize songs from your Rhythmbox playlists" msgstr "Συγχρονισμός τραγουδιών από τις λίστες αναπαραγωγής σας στο Rhythmbox" #: ../conduit/modules/RhythmboxModule/config.glade.h:1 msgid "Synchronize the Following Playlists" msgstr "Συγχρονισμός των ακόλουθων λιστών" #: ../conduit/modules/RhythmboxModule/config.glade.h:2 msgid "Rhythmbox Playlists" msgstr "Rhythmbox λίστες αναπαραγωγής" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:5 msgid "Shutterfly" msgstr "Shutterfly" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 msgid "Synchronize your Shutterfly photos" msgstr "Συγχρονισμός των φωτογραφιών σας στο Shutterfly" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "%d-%m-%Y %H:%M:%S" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 #: ../conduit/modules/SmugMugModule/config.glade.h:6 msgid "SmugMug" msgstr "SmugMug" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 msgid "Synchronize your SmugMug.com photos" msgstr "Συγχρονισμός των φωτογραφιών σας στο SmugMug.com" #: ../conduit/modules/ZotoModule/ZotoModule.py:154 #: ../conduit/modules/ZotoModule/zoto.glade.h:6 msgid "Zoto" msgstr "Zoto" #: ../conduit/modules/ZotoModule/ZotoModule.py:155 msgid "Synchronize your Zoto photos" msgstr "Συγχρονισμός των φωτογραφιών σας στο Zoto" #: ../conduit/modules/Firefox3Module/config.glade.h:1 msgid "Firefox" msgstr "Firefox" #: ../conduit/modules/Firefox3Module/config.glade.h:2 msgid "Firefox Profile:" msgstr "Προφίλ Firefox:" conduit-0.3.17/po/oc.po0000644000175000017500000006025411172176633011565 00000000000000# Occitan translation of conduit. # Copyright © 2007-2008 Free Software Foundation, Inc. # This file is distributed under the same license as the conduit package. # # # Yannig Marchegay (Kokoyaya) , 2007. msgid "" msgstr "" "Project-Id-Version: Conduit-0.3.2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-07-03 09:28+0200\n" "PO-Revision-Date: 2008-07-03 09:18+0200\n" "Last-Translator: Yannig Marchegay (Kokoyaya) \n" "Language-Team: Occitan \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" #: ../data/conduit.desktop.in.in.h:1 #: ../data/conduit-autostart.desktop.in.in.h:2 msgid "Conduit Synchronizer" msgstr "" #: ../data/conduit.desktop.in.in.h:2 #: ../data/conduit-autostart.desktop.in.in.h:3 msgid "Synchronization for GNOME" msgstr "" #. Translators: Translate this in derived classes. #: ../data/conduit-autostart.desktop.in.in.h:1 #: ../conduit/modules/N800Module/N800Module.py:54 msgid "Conduit" msgstr "" #: ../data/conduit.glade.h:1 msgid "Default Synchronization Options" msgstr "" #: ../data/conduit.glade.h:2 msgid "General" msgstr "General" #: ../data/conduit.glade.h:3 msgid "Always Up To Date" msgstr "" #: ../data/conduit.glade.h:4 msgid "Ask Me What to Do" msgstr "" #: ../data/conduit.glade.h:5 msgid "Ask me what to do" msgstr "" #: ../data/conduit.glade.h:6 msgid "Cancel Synchronization" msgstr "" #: ../data/conduit.glade.h:7 msgid "Cancel currently synchronizing groups" msgstr "" #: ../data/conduit.glade.h:8 msgid "Clear Canvas" msgstr "" #: ../data/conduit.glade.h:9 msgid "Compare" msgstr "Comparar" #: ../data/conduit.glade.h:10 msgid "Conduit Properties" msgstr "" #: ../data/conduit.glade.h:11 msgid "Configuration" msgstr "Configuracion" #: ../data/conduit.glade.h:12 msgid "Configure Item" msgstr "" #: ../data/conduit.glade.h:13 msgid "Configure the synchronization settings for this item" msgstr "" #: ../data/conduit.glade.h:14 msgid "Conflict Options" msgstr "" #: ../data/conduit.glade.h:15 msgid "Conflicts" msgstr "Conflictes" #: ../data/conduit.glade.h:16 msgid "Contents" msgstr "Ensenhador" #: ../data/conduit.glade.h:17 msgid "Data Conversions" msgstr "" #: ../data/conduit.glade.h:18 msgid "Data Providers" msgstr "" #: ../data/conduit.glade.h:19 msgid "Delete Group" msgstr "" #: ../data/conduit.glade.h:20 msgid "Delete Item" msgstr "" #: ../data/conduit.glade.h:21 msgid "Delete Options" msgstr "" #: ../data/conduit.glade.h:22 msgid "Delete from the corresponding sink" msgstr "" #: ../data/conduit.glade.h:23 msgid "Delete the Corresponding Item" msgstr "" #: ../data/conduit.glade.h:24 msgid "Editor" msgstr "Editor" #: ../data/conduit.glade.h:25 msgid "Minimize to notification area" msgstr "" #: ../data/conduit.glade.h:26 msgid "Refresh Group" msgstr "" #: ../data/conduit.glade.h:27 msgid "Refresh Item" msgstr "" #: ../data/conduit.glade.h:28 msgid "Replace the Older Item" msgstr "" #: ../data/conduit.glade.h:29 msgid "Replace the older item" msgstr "" #: ../data/conduit.glade.h:30 msgid "Resolve Conflicts" msgstr "" #: ../data/conduit.glade.h:31 msgid "Save settings on exit" msgstr "" #: ../data/conduit.glade.h:32 msgid "Show status icon" msgstr "" #: ../data/conduit.glade.h:33 msgid "Skip" msgstr "Sautar" #: ../data/conduit.glade.h:34 msgid "Slow Sync" msgstr "" #: ../data/conduit.glade.h:35 msgid "Sync Options" msgstr "" #: ../data/conduit.glade.h:36 msgid "Synchronize All" msgstr "" #: ../data/conduit.glade.h:37 msgid "Synchronize Group" msgstr "" #: ../data/conduit.glade.h:38 msgid "Synchronize group" msgstr "" #: ../data/conduit.glade.h:39 msgid "Synchronizes all groups" msgstr "" #: ../data/conduit.glade.h:40 msgid "Title" msgstr "Títol" #: ../data/conduit.glade.h:41 msgid "Two Way Sync" msgstr "" #: ../data/conduit.glade.h:42 msgid "Use built in Web browser" msgstr "" #: ../data/conduit.glade.h:43 msgid "When an item has been deleted:" msgstr "" #: ../data/conduit.glade.h:44 msgid "When an item is deleted..." msgstr "" #: ../data/conduit.glade.h:45 msgid "When there is a conflict..." msgstr "" #: ../data/conduit.glade.h:46 msgid "When there is a two way conflict:" msgstr "" #: ../data/conduit.glade.h:47 msgid "_Edit" msgstr "_Edicion" #: ../data/conduit.glade.h:48 msgid "_File" msgstr "_Fichièr" #: ../data/conduit.glade.h:49 msgid "_Help" msgstr "_Ajuda" #: ../conduit/gtkui/Canvas.py:65 msgid "Drag a Data Provider here to continue" msgstr "" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:82 msgid "Source" msgstr "Sorga" #: ../conduit/gtkui/ConflictResolver.py:96 msgid "Resolution" msgstr "Resolucion" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:101 msgid "Sink" msgstr "" #: ../conduit/gtkui/ConflictResolver.py:165 #: ../conduit/gtkui/ConflictResolver.py:166 #, python-format msgid "Conflicts (%s)" msgstr "" #. Build some liststores to display #: ../conduit/gtkui/UI.py:235 msgid "Convert from" msgstr "" #: ../conduit/gtkui/UI.py:236 msgid "into" msgstr "" #: ../conduit/gtkui/UI.py:291 msgid "Conversions Available" msgstr "" #: ../conduit/gtkui/UI.py:297 ../conduit/gtkui/Tree.py:349 #: ../conduit/modules/FileModule/FileConfiguration.py:104 msgid "Name" msgstr "Nom" #: ../conduit/gtkui/UI.py:301 msgid "Loaded" msgstr "Cargat" #: ../conduit/gtkui/UI.py:399 ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "" #: ../conduit/gtkui/UI.py:556 msgid "_Synchronize All" msgstr "" #: ../conduit/gtkui/UI.py:556 msgid "Synchronizes All Groups" msgstr "" #: ../conduit/gtkui/UI.py:557 msgid "_Cancel Synchronization" msgstr "" #: ../conduit/gtkui/UI.py:557 msgid "Cancels Currently Synchronizing Groups" msgstr "" #: ../conduit/gtkui/UI.py:558 msgid "_Quit" msgstr "_Sortir" #: ../conduit/gtkui/UI.py:558 msgid "Close Conduit" msgstr "" #: ../conduit/gtkui/UI.py:559 msgid "_About" msgstr "_A prepaus" #: ../conduit/gtkui/UI.py:559 msgid "About Conduit" msgstr "A prepaus de Conduit" #: ../conduit/gtkui/UI.py:599 msgid "Synchronization Error" msgstr "" #: ../conduit/gtkui/UI.py:602 msgid "Synchronization Complete" msgstr "Sincronisacion acabada" #: ../conduit/gtkui/UI.py:618 msgid "Synchronizing" msgstr "" #: ../conduit/gtkui/Tree.py:358 msgid "Description" msgstr "Descripcion" #: ../conduit/dataproviders/DataProvider.py:19 msgid "Ready" msgstr "Prèst" #: ../conduit/dataproviders/DataProvider.py:20 msgid "New data to sync" msgstr "" #: ../conduit/dataproviders/DataProvider.py:21 msgid "Refreshing..." msgstr "" #: ../conduit/dataproviders/DataProvider.py:22 msgid "Refreshed OK" msgstr "" #: ../conduit/dataproviders/DataProvider.py:23 msgid "Error Refreshing" msgstr "" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Synchronizing..." msgstr "" #: ../conduit/dataproviders/DataProvider.py:25 msgid "Synchronized OK" msgstr "" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Synchronizing" msgstr "" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronization Skipped" msgstr "" #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronization Cancelled" msgstr "" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Synchronization Conflict" msgstr "" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Not Configured Correctly" msgstr "" # Fait réference à http://www.backpackit.com/ ? #: ../conduit/modules/BackpackModule/BackpackModule.py:56 msgid "Backpack Notes" msgstr "" #: ../conduit/modules/BackpackModule/BackpackModule.py:57 msgid "Store things in Backpack Notes" msgstr "" #: ../conduit/modules/BackpackModule/config.glade.h:1 #: ../conduit/modules/FlickrModule/config.glade.h:1 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:1 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:1 #: ../conduit/modules/GoogleModule/youtube-config.glade.h:1 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:1 #: ../conduit/modules/SmugMugModule/config.glade.h:1 #: ../conduit/modules/ZotoModule/zoto.glade.h:1 msgid "Account Details" msgstr "" #: ../conduit/modules/BackpackModule/config.glade.h:2 msgid "Saved Note Settings" msgstr "" #: ../conduit/modules/BackpackModule/config.glade.h:3 msgid "API key:" msgstr "" #: ../conduit/modules/BackpackModule/config.glade.h:4 msgid "Backpack" msgstr "" #: ../conduit/modules/BackpackModule/config.glade.h:5 msgid "Save notes in page:" msgstr "" #: ../conduit/modules/BackpackModule/config.glade.h:6 #: ../conduit/modules/FlickrModule/config.glade.h:8 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:8 #: ../conduit/modules/GoogleModule/youtube-config.glade.h:9 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:6 #: ../conduit/modules/SmugMugModule/config.glade.h:7 #: ../conduit/modules/ZotoModule/zoto.glade.h:5 msgid "Username:" msgstr "Nom d'utilizaire :" #: ../conduit/modules/BansheeModule/BansheeModule.py:30 msgid "Banshee Playlists" msgstr "" #: ../conduit/modules/BansheeModule/BansheeModule.py:31 msgid "Sync your Banshee playlists" msgstr "" #. column 1 is the tag name #: ../conduit/modules/BansheeModule/BansheeModule.py:138 #: ../conduit/modules/FspotModule/FspotModule.py:246 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:129 msgid "Tag Name" msgstr "" #: ../conduit/modules/BansheeModule/BansheeModule.py:146 #: ../conduit/modules/FspotModule/FspotModule.py:254 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:137 msgid "Enabled" msgstr "Activat" #: ../conduit/modules/BansheeModule/config.glade.h:1 msgid "Return Playlists" msgstr "" #: ../conduit/modules/BansheeModule/config.glade.h:2 msgid "Banshee" msgstr "Banshee" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 #: ../conduit/modules/BoxDotNetModule/config.glade.h:1 msgid "Box.net" msgstr "" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 msgid "Sync your Box.net files" msgstr "" #: ../conduit/modules/BoxDotNetModule/config.glade.h:2 msgid "Folder:" msgstr "Repertòri :" #: ../conduit/modules/BoxDotNetModule/config.glade.h:3 #: ../conduit/modules/FlickrModule/config.glade.h:4 msgid "Load" msgstr "Carga" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:108 #, python-format msgid "Select %s:" msgstr "" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:147 msgid "Evolution Contacts" msgstr "" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:148 msgid "Sync your contacts" msgstr "" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:199 msgid "Evolution Calendar" msgstr "Calendièr Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:200 msgid "Sync your calendar" msgstr "" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:257 msgid "Evolution Tasks" msgstr "" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:258 msgid "Sync your tasks" msgstr "" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:314 msgid "Evolution Memos" msgstr "" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:315 msgid "Sync your memos" msgstr "" #: ../conduit/modules/EvolutionModule/config.glade.h:1 msgid "Addressbook:" msgstr "Quasernet d'adreças :" #: ../conduit/modules/EvolutionModule/config.glade.h:2 msgid "Evolution" msgstr "Evolution" #: ../conduit/modules/FacebookModule/FacebookModule.py:37 msgid "Facebook" msgstr "Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 msgid "Sync your Facebook photos" msgstr "" #: ../conduit/modules/FeedModule/FeedModule.py:30 #: ../conduit/modules/FeedModule/config.glade.h:9 msgid "RSS Feed" msgstr "" #: ../conduit/modules/FeedModule/FeedModule.py:31 msgid "Sync data from RSS enclosures" msgstr "" #: ../conduit/modules/FeedModule/config.glade.h:1 msgid "Enclosure Settings" msgstr "" #: ../conduit/modules/FeedModule/config.glade.h:2 msgid "Feed Details" msgstr "" #: ../conduit/modules/FeedModule/config.glade.h:3 msgid "Download Audio Files" msgstr "" #: ../conduit/modules/FeedModule/config.glade.h:4 msgid "Download Photos" msgstr "" #: ../conduit/modules/FeedModule/config.glade.h:5 msgid "Download Video Files" msgstr "" #: ../conduit/modules/FeedModule/config.glade.h:6 msgid "Feed Address:" msgstr "" #: ../conduit/modules/FeedModule/config.glade.h:7 msgid "" "Limit the Number of\n" "Enclosures Downloaded to:" msgstr "" #: ../conduit/modules/FileModule/FileConfiguration.py:98 msgid "Icon" msgstr "Icòna" #: ../conduit/modules/FileModule/FileConfiguration.py:110 msgid "Items" msgstr "Elements" #: ../conduit/modules/FileModule/FileConfiguration.py:136 #, python-format msgid "Contains %s files" msgstr "" #: ../conduit/modules/FileModule/FileConfiguration.py:226 msgid "Include file..." msgstr "" #: ../conduit/modules/FileModule/FileConfiguration.py:236 msgid "All files" msgstr "Totes los fichièrs" #: ../conduit/modules/FileModule/FileConfiguration.py:251 msgid "Include folder..." msgstr "" #: ../conduit/modules/FileModule/FileConfiguration.py:296 msgid "Please Name All Folders" msgstr "" #: ../conduit/modules/FileModule/FileConfiguration.py:297 msgid "" "All folders require a descriptive name. To name a folder simply click on it" msgstr "" #: ../conduit/modules/FileModule/FileConfiguration.py:341 msgid "Please Enter a Folder Name" msgstr "" #: ../conduit/modules/FileModule/FileConfiguration.py:342 msgid "" "All folders require a descriptive name. To name a folder enter its name " "where indicated" msgstr "" #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "Fichièrs" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "" #: ../conduit/modules/FileModule/FileModule.py:63 msgid "Folder" msgstr "Repertòri" #: ../conduit/modules/FileModule/FileModule.py:64 msgid "Synchronize folders" msgstr "" #: ../conduit/modules/FileModule/config.glade.h:1 msgid "Items to Synchronize" msgstr "" #: ../conduit/modules/FileModule/config.glade.h:2 msgid "Add Directory" msgstr "Apondre un repertòri" #: ../conduit/modules/FileModule/config.glade.h:3 msgid "Add File" msgstr "Apondre un fichièr" #: ../conduit/modules/FileModule/config.glade.h:4 msgid "Advanced" msgstr "A_vançat" #: ../conduit/modules/FileModule/config.glade.h:5 msgid "File Configuration" msgstr "" #: ../conduit/modules/FileModule/config.glade.h:6 msgid "Folder Configuration" msgstr "" #: ../conduit/modules/FileModule/config.glade.h:7 msgid "Folder Location:" msgstr "" #: ../conduit/modules/FileModule/config.glade.h:8 msgid "Folder Name:" msgstr "" #: ../conduit/modules/FileModule/config.glade.h:9 msgid "Follow Symbolic Links" msgstr "" #: ../conduit/modules/FileModule/config.glade.h:10 msgid "Ignore File Modification Times" msgstr "" #: ../conduit/modules/FileModule/config.glade.h:11 msgid "Include Hidden Files" msgstr "" #: ../conduit/modules/FileModule/config.glade.h:12 msgid "Select A Folder" msgstr "Seleccionatz un repertòri" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 #: ../conduit/modules/FlickrModule/config.glade.h:3 msgid "Flickr" msgstr "Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 msgid "Sync your Flickr.com photos" msgstr "" #: ../conduit/modules/FlickrModule/config.glade.h:2 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:2 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:2 #: ../conduit/modules/SmugMugModule/config.glade.h:2 #: ../conduit/modules/ZotoModule/zoto.glade.h:2 msgid "Saved Photo Settings" msgstr "" #: ../conduit/modules/FlickrModule/config.glade.h:5 msgid "Photos are public" msgstr "" #: ../conduit/modules/FlickrModule/config.glade.h:6 msgid "Photoset Name:" msgstr "" #: ../conduit/modules/FlickrModule/config.glade.h:7 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:7 #: ../conduit/modules/SmugMugModule/config.glade.h:5 msgid "Resize Photos:" msgstr "" #: ../conduit/modules/FspotModule/FspotModule.py:25 #: ../conduit/modules/FspotModule/config.glade.h:3 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 msgid "Sync your F-Spot photos" msgstr "" #: ../conduit/modules/FspotModule/FspotModule.py:127 msgid "F-Spot DBus interface is operating in read only mode" msgstr "" #: ../conduit/modules/FspotModule/config.glade.h:1 msgid "Return Photos Tagged With" msgstr "" #: ../conduit/modules/FspotModule/config.glade.h:2 msgid "Create Tags: " msgstr "" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "GConf Settings" msgstr "" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Sync your desktop preferences" msgstr "" #: ../conduit/modules/GoogleModule/GoogleModule.py:369 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:4 msgid "Google Calendar" msgstr "" #: ../conduit/modules/GoogleModule/GoogleModule.py:370 msgid "Sync your Google Calendar" msgstr "" #: ../conduit/modules/GoogleModule/GoogleModule.py:555 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:6 msgid "Picasa" msgstr "Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:556 msgid "Sync your Google Picasa photos" msgstr "" #: ../conduit/modules/GoogleModule/GoogleModule.py:773 msgid "Google Contacts" msgstr "" #: ../conduit/modules/GoogleModule/GoogleModule.py:774 msgid "Sync your Gmail contacts" msgstr "" #: ../conduit/modules/GoogleModule/GoogleModule.py:1030 msgid "Google Documents" msgstr "" #: ../conduit/modules/GoogleModule/GoogleModule.py:1031 msgid "Sync your Google Documents" msgstr "" #: ../conduit/modules/GoogleModule/GoogleModule.py:1311 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:57 msgid "Unknown" msgstr "Desconegut" #: ../conduit/modules/GoogleModule/GoogleModule.py:1312 msgid "miscellaneous" msgstr "" #: ../conduit/modules/GoogleModule/GoogleModule.py:1313 # msgid "No description." msgstr "Pas de descripcion" #: ../conduit/modules/GoogleModule/GoogleModule.py:1322 msgid "YouTube" msgstr "YouTube" #: ../conduit/modules/GoogleModule/GoogleModule.py:1323 msgid "Sync data from YouTube" msgstr "" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:2 msgid "Calendar:" msgstr "Calendièr :" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:3 msgid "Email:" msgstr "Adreça electronica :" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:5 msgid "Load Calendars" msgstr "" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:6 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:5 #: ../conduit/modules/GoogleModule/youtube-config.glade.h:6 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:4 #: ../conduit/modules/SmugMugModule/config.glade.h:4 #: ../conduit/modules/ZotoModule/zoto.glade.h:4 msgid "Password:" msgstr "Mot de pas :" #: ../conduit/modules/GoogleModule/picasa-config.glade.h:3 #: ../conduit/modules/iPodModule/config.glade.h:1 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:3 #: ../conduit/modules/SmugMugModule/config.glade.h:3 #: ../conduit/modules/ZotoModule/zoto.glade.h:3 msgid "Album:" msgstr "Album :" #: ../conduit/modules/GoogleModule/picasa-config.glade.h:4 msgid "Login" msgstr "Connexion" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:2 msgid "Download Videos" msgstr "" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:3 msgid "Favorites of above user" msgstr "" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:4 msgid "Max retrieved videos (0 is unlimited):" msgstr "" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:5 msgid "Most viewed" msgstr "" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:7 msgid "Top rated" msgstr "" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:8 msgid "Uploaded by above user" msgstr "" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:10 msgid "YouTube Source" msgstr "" #: ../conduit/modules/iPodModule/config.glade.h:2 msgid "iPod Photos" msgstr "" #. Translators: Format string used to describe the acceptable formats the #. device accepts. The first arg is replaced with DEFAULT_FOLDER and the second #. arg is a comma seperated list of encodings #: ../conduit/modules/N800Module/N800Module.py:58 #, python-format msgid "%s Format (%s)" msgstr "" #. Signifies that a conversion should not take place #: ../conduit/modules/N800Module/N800Module.py:60 msgid "unchanged" msgstr "" #: ../conduit/modules/N800Module/N800Module.py:121 msgid "N800 Files" msgstr "" #: ../conduit/modules/N800Module/N800Module.py:122 msgid "Synchronizes files/folders to a N800 device" msgstr "" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:127 msgid "Backups" msgstr "" #: ../conduit/modules/N800Module/N800Module.py:142 msgid "N800 Music" msgstr "" #: ../conduit/modules/N800Module/N800Module.py:143 msgid "Synchronizes music to a N800 device" msgstr "" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:149 msgid "Music" msgstr "Musica" #: ../conduit/modules/N800Module/N800Module.py:166 msgid "N800 Videos" msgstr "" #: ../conduit/modules/N800Module/N800Module.py:167 #: ../conduit/modules/N800Module/N800Module.py:191 msgid "Synchronizes video to a N800 device" msgstr "" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:173 msgid "Video" msgstr "Vidèo" #: ../conduit/modules/N800Module/N800Module.py:190 msgid "N800 Photos" msgstr "" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:197 msgid "Photo" msgstr "Fotografia" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "Ret" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:37 msgid "Rhythmbox Music" msgstr "" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:38 msgid "Sync songs from your Rhythmbox playlists" msgstr "" #: ../conduit/modules/RhythmboxModule/config.glade.h:1 msgid "Synchronize the Following Playlists" msgstr "" #: ../conduit/modules/RhythmboxModule/config.glade.h:2 msgid "Rhythmbox Playlists" msgstr "" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:5 msgid "Shutterfly" msgstr "" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 msgid "Sync your Shutterfly photos" msgstr "" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 #: ../conduit/modules/SmugMugModule/config.glade.h:6 msgid "SmugMug" msgstr "" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 msgid "Sync your SmugMug.com photos" msgstr "" #: ../conduit/modules/ZotoModule/ZotoModule.py:121 #: ../conduit/modules/ZotoModule/zoto.glade.h:6 msgid "Zoto" msgstr "" #: ../conduit/modules/ZotoModule/ZotoModule.py:122 msgid "Sync your Zoto photos" msgstr "" #~ msgid "By user" #~ msgstr "Per utilizaire" #~ msgid "User: " #~ msgstr "Utilizaire : " #~ msgid "_Synchronize" #~ msgstr "_Synchroniser" #~ msgid "Synchronize all dataproviders" #~ msgstr "Synchronise toutes les sources de données" #~ msgid "F-Spot Photos" #~ msgstr "Photos F-Spot" #~ msgid "Sync your emails" #~ msgstr "Synchroniser vos courriels" #~ msgid "Add Label:" #~ msgstr "Ajouter une étiquette :" #~ msgid "Sync your Evolution contacts" #~ msgstr "Synchroniser vos contacts Evolution" #~ msgid "Evolution Events" #~ msgstr "Événements Evolution" #~ msgid "Sync your Evolution events" #~ msgstr "Synchroniser vos événements Evolution" #~ msgid "Evolution Todo" #~ msgstr "Tâches Evolution" #~ msgid "Sync your Evolution tasks" #~ msgstr "Synchonise vos tâches Evolution" #~ msgid "Picasa Desktop" #~ msgstr "Bureau Picasa" #~ msgid "Sync your Picasa photos" #~ msgstr "Synchroniser vos photos Picasa" #~ msgid "Album Name" #~ msgstr "Nom de l'album" #~ msgid "Email" #~ msgstr "Courriel" #~ msgid "Login Details" #~ msgstr "Détails de connexion" #~ msgid "Saved Email Settings" #~ msgstr "Paramètres des courriels enregistrés" #~ msgid "Attach label to email" #~ msgstr "Attacher une étiquette au courriel" #~ msgid "Gmail Sink Properties" #~ msgstr "Propriétés du collecteur Gmail" #~ msgid "Save with label:" #~ msgstr "Enregistrer avec l'étiquette" #~ msgid "Network your desktop" #~ msgstr "Mise en réseau de votre bureau" conduit-0.3.17/po/Makefile.in.in0000644000175000017500000001537711326116723013277 00000000000000# Makefile for program source directory in GNU NLS utilities package. # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper # Copyright (C) 2004-2008 Rodney Dawes # # This file may be copied and used freely without restrictions. It may # be used in projects which are not available under a GNU Public License, # but which still want to provide support for the GNU gettext functionality. # # - Modified by Owen Taylor to use GETTEXT_PACKAGE # instead of PACKAGE and to look for po2tbl in ./ not in intl/ # # - Modified by jacob berkman to install # Makefile.in.in and po2tbl.sed.in for use with glib-gettextize # # - Modified by Rodney Dawes for use with intltool # # We have the following line for use by intltoolize: # INTLTOOL_MAKEFILE GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ top_builddir = @top_builddir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datadir = @datadir@ datarootdir = @datarootdir@ libdir = @libdir@ DATADIRNAME = @DATADIRNAME@ itlocaledir = $(prefix)/$(DATADIRNAME)/locale subdir = po install_sh = @install_sh@ # Automake >= 1.8 provides @mkdir_p@. # Until it can be supposed, use the safe fallback: mkdir_p = $(install_sh) -d INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ GMSGFMT = @GMSGFMT@ MSGFMT = @MSGFMT@ XGETTEXT = @XGETTEXT@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ MSGMERGE = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist GENPOT = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot ALL_LINGUAS = @ALL_LINGUAS@ PO_LINGUAS=$(shell if test -r $(srcdir)/LINGUAS; then grep -v "^\#" $(srcdir)/LINGUAS; else echo "$(ALL_LINGUAS)"; fi) USER_LINGUAS=$(shell if test -n "$(LINGUAS)"; then LLINGUAS="$(LINGUAS)"; ALINGUAS="$(ALL_LINGUAS)"; for lang in $$LLINGUAS; do if test -n "`grep \^$$lang$$ $(srcdir)/LINGUAS 2>/dev/null`" -o -n "`echo $$ALINGUAS|tr ' ' '\n'|grep \^$$lang$$`"; then printf "$$lang "; fi; done; fi) USE_LINGUAS=$(shell if test -n "$(USER_LINGUAS)" -o -n "$(LINGUAS)"; then LLINGUAS="$(USER_LINGUAS)"; else if test -n "$(PO_LINGUAS)"; then LLINGUAS="$(PO_LINGUAS)"; else LLINGUAS="$(ALL_LINGUAS)"; fi; fi; for lang in $$LLINGUAS; do printf "$$lang "; done) POFILES=$(shell LINGUAS="$(PO_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.po "; done) DISTFILES = Makefile.in.in POTFILES.in $(POFILES) EXTRA_DISTFILES = ChangeLog POTFILES.skip Makevars LINGUAS POTFILES = \ # This comment gets stripped out CATALOGS=$(shell LINGUAS="$(USE_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.gmo "; done) .SUFFIXES: .SUFFIXES: .po .pox .gmo .mo .msg .cat .po.pox: $(MAKE) $(GETTEXT_PACKAGE).pot $(MSGMERGE) $< $(GETTEXT_PACKAGE).pot -o $*.pox .po.mo: $(MSGFMT) -o $@ $< .po.gmo: file=`echo $* | sed 's,.*/,,'`.gmo \ && rm -f $$file && $(GMSGFMT) -o $$file $< .po.cat: sed -f ../intl/po2msg.sed < $< > $*.msg \ && rm -f $@ && gencat $@ $*.msg all: all-@USE_NLS@ all-yes: $(CATALOGS) all-no: $(GETTEXT_PACKAGE).pot: $(POTFILES) $(GENPOT) install: install-data install-data: install-data-@USE_NLS@ install-data-no: all install-data-yes: all linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ dir=$(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $$dir; \ if test -r $$lang.gmo; then \ $(INSTALL_DATA) $$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ echo "installing $$lang.gmo as $$dir/$(GETTEXT_PACKAGE).mo"; \ else \ $(INSTALL_DATA) $(srcdir)/$$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ echo "installing $(srcdir)/$$lang.gmo as" \ "$$dir/$(GETTEXT_PACKAGE).mo"; \ fi; \ if test -r $$lang.gmo.m; then \ $(INSTALL_DATA) $$lang.gmo.m $$dir/$(GETTEXT_PACKAGE).mo.m; \ echo "installing $$lang.gmo.m as $$dir/$(GETTEXT_PACKAGE).mo.m"; \ else \ if test -r $(srcdir)/$$lang.gmo.m ; then \ $(INSTALL_DATA) $(srcdir)/$$lang.gmo.m \ $$dir/$(GETTEXT_PACKAGE).mo.m; \ echo "installing $(srcdir)/$$lang.gmo.m as" \ "$$dir/$(GETTEXT_PACKAGE).mo.m"; \ else \ true; \ fi; \ fi; \ done # Empty stubs to satisfy archaic automake needs dvi info ctags tags CTAGS TAGS ID: # Define this as empty until I found a useful application. install-exec installcheck: uninstall: linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo; \ rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo.m; \ done check: all $(GETTEXT_PACKAGE).pot rm -f missing notexist srcdir=$(srcdir) $(INTLTOOL_UPDATE) -m if [ -r missing -o -r notexist ]; then \ exit 1; \ fi mostlyclean: rm -f *.pox $(GETTEXT_PACKAGE).pot *.old.po cat-id-tbl.tmp rm -f .intltool-merge-cache clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES stamp-it rm -f *.mo *.msg *.cat *.cat.m *.gmo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f Makefile.in.in distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(DISTFILES) dists="$(DISTFILES)"; \ extra_dists="$(EXTRA_DISTFILES)"; \ for file in $$extra_dists; do \ test -f $(srcdir)/$$file && dists="$$dists $(srcdir)/$$file"; \ done; \ for file in $$dists; do \ test -f $$file || file="$(srcdir)/$$file"; \ ln $$file $(distdir) 2> /dev/null \ || cp -p $$file $(distdir); \ done update-po: Makefile $(MAKE) $(GETTEXT_PACKAGE).pot tmpdir=`pwd`; \ linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ echo "$$lang:"; \ result="`$(MSGMERGE) -o $$tmpdir/$$lang.new.po $$lang`"; \ if $$result; then \ if cmp $(srcdir)/$$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.gmo failed!"; \ rm -f $$tmpdir/$$lang.new.po; \ fi; \ done Makefile POTFILES: stamp-it @if test ! -f $@; then \ rm -f stamp-it; \ $(MAKE) stamp-it; \ fi stamp-it: Makefile.in.in $(top_builddir)/config.status POTFILES.in cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/Makefile.in CONFIG_HEADERS= CONFIG_LINKS= \ $(SHELL) ./config.status # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/po/zh_HK.po0000644000175000017500000006470511172176633012174 00000000000000# Chinese (Hong Kong) translation of conduit. # Copyright (C) 2001, 2003 Free Software Foundation, Inc. # Chao-Hsiung Liao , 2008. # # msgid "" msgstr "" "Project-Id-Version: conduit 0.3.15\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-09-26 13:45+0800\n" "PO-Revision-Date: 2008-09-30 19:47+0800\n" "Last-Translator: Chao-Hsiung Liao \n" "Language-Team: Chinese (Hong Kong) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../data/conduit.desktop.in.in.h:1 #: ../data/conduit-autostart.desktop.in.in.h:2 msgid "Conduit Synchronizer" msgstr "Conduit 同步化程式" #: ../data/conduit.desktop.in.in.h:2 #: ../data/conduit-autostart.desktop.in.in.h:3 msgid "Synchronization for GNOME" msgstr "GNOME 的同步化程式" #. Translators: Translate this in derived classes. #: ../data/conduit-autostart.desktop.in.in.h:1 #: ../conduit/modules/N800Module/N800Module.py:55 msgid "Conduit" msgstr "Conduit" #: ../data/conduit.glade.h:1 msgid "Default Synchronization Options" msgstr "預設同步化選項" #: ../data/conduit.glade.h:2 msgid "General" msgstr "一般" #: ../data/conduit.glade.h:3 msgid "Always Up To Date" msgstr "永遠保持最新" #: ../data/conduit.glade.h:4 msgid "Ask Me What to Do" msgstr "詢問我要怎麼做" #: ../data/conduit.glade.h:5 msgid "Ask me what to do" msgstr "詢問我要怎麼做" #: ../data/conduit.glade.h:6 msgid "Cancel Synchronization" msgstr "取消同步化" #: ../data/conduit.glade.h:7 msgid "Cancel currently synchronizing groups" msgstr "取消目前的同步羣組" #: ../data/conduit.glade.h:8 #, fuzzy msgid "Clear Canvas" msgstr "全部清除" #: ../data/conduit.glade.h:9 msgid "Compare" msgstr "比較" #: ../data/conduit.glade.h:10 msgid "Conduit Preferences" msgstr "Conduit 偏好設定" #: ../data/conduit.glade.h:11 msgid "Configuration" msgstr "組態" #: ../data/conduit.glade.h:12 msgid "Configure Item" msgstr "設定項目" #: ../data/conduit.glade.h:13 msgid "Configure the synchronization settings for this item" msgstr "設定這個項目的同步設定值" #: ../data/conduit.glade.h:14 msgid "Conflict Options" msgstr "衝突選項" #: ../data/conduit.glade.h:15 msgid "Conflicts" msgstr "衝突" #: ../data/conduit.glade.h:16 msgid "Contents" msgstr "內容" #: ../data/conduit.glade.h:17 msgid "Data Conversions" msgstr "資料轉換" #: ../data/conduit.glade.h:18 msgid "Data Providers" msgstr "資料提供者" #: ../data/conduit.glade.h:19 msgid "Delete Group" msgstr "刪除羣組" #: ../data/conduit.glade.h:20 msgid "Delete Item" msgstr "刪除項目" #: ../data/conduit.glade.h:21 msgid "Delete Options" msgstr "刪除選項" #: ../data/conduit.glade.h:22 #, fuzzy msgid "Delete from the corresponding sink" msgstr "從 {0} 版刪除舊資料?" #: ../data/conduit.glade.h:23 msgid "Delete the Corresponding Item" msgstr "刪除對等的項目" #: ../data/conduit.glade.h:24 msgid "Editor" msgstr "編輯" #: ../data/conduit.glade.h:25 msgid "Minimize to notification area" msgstr "最小化至通知區域" #: ../data/conduit.glade.h:26 msgid "Refresh Group" msgstr "重新整理羣組" #: ../data/conduit.glade.h:27 msgid "Refresh Item" msgstr "重新整理項目" #: ../data/conduit.glade.h:28 msgid "Replace the Older Item" msgstr "取代較舊的項目" #: ../data/conduit.glade.h:29 msgid "Replace the older item" msgstr "取代較舊的項目" #: ../data/conduit.glade.h:30 msgid "Resolve Conflicts" msgstr "解決衝突" #: ../data/conduit.glade.h:31 msgid "Save settings on exit" msgstr "離開時儲存設定值" #: ../data/conduit.glade.h:32 msgid "Show Hints" msgstr "顯示提示" #: ../data/conduit.glade.h:33 msgid "Show status icon" msgstr "顯示狀態圖示" #: ../data/conduit.glade.h:34 msgid "Skip" msgstr "略過" #: ../data/conduit.glade.h:35 msgid "Slow Sync" msgstr "慢速同步" #: ../data/conduit.glade.h:36 msgid "Sync Options" msgstr "同步選項" #: ../data/conduit.glade.h:37 msgid "Synchronize All" msgstr "同步全部" #: ../data/conduit.glade.h:38 msgid "Synchronize Group" msgstr "同步羣組" #: ../data/conduit.glade.h:39 msgid "Synchronize group" msgstr "同步羣組" #: ../data/conduit.glade.h:40 msgid "Synchronizes all groups" msgstr "同步所有的羣組" #: ../data/conduit.glade.h:41 msgid "Title" msgstr "標題" #: ../data/conduit.glade.h:42 msgid "Two Way Sync" msgstr "雙向同步" #: ../data/conduit.glade.h:43 msgid "When an item has been deleted:" msgstr "當項目被刪除時:" #: ../data/conduit.glade.h:44 msgid "When an item is deleted..." msgstr "當項目被刪除時..." #: ../data/conduit.glade.h:45 msgid "When there is a conflict..." msgstr "當發生衝突時..." #: ../data/conduit.glade.h:46 msgid "When there is a two way conflict:" msgstr "當發生雙向衝突時:" #: ../data/conduit.glade.h:47 msgid "_Edit" msgstr "編輯(_E)" #: ../data/conduit.glade.h:48 msgid "_File" msgstr "檔案(_F)" #: ../data/conduit.glade.h:49 msgid "_Help" msgstr "求助(_H)" #: ../conduit/gtkui/Canvas.py:149 msgid "Drag a Data Provider here to continue" msgstr "將資料提供者拖放到這裏以繼續" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:91 msgid "Source" msgstr "來源" #: ../conduit/gtkui/ConflictResolver.py:105 msgid "Resolution" msgstr "解像度" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:110 msgid "Sink" msgstr "" #: ../conduit/gtkui/ConflictResolver.py:150 #: ../conduit/gtkui/ConflictResolver.py:151 #, python-format msgid "Conflicts (%s)" msgstr "衝突 (%s)" #. Build some liststores to display #: ../conduit/gtkui/UI.py:281 msgid "Convert from" msgstr "轉換自" #: ../conduit/gtkui/UI.py:282 msgid "into" msgstr "到" #: ../conduit/gtkui/UI.py:333 msgid "Relationship Database" msgstr "關係資料庫" #: ../conduit/gtkui/UI.py:337 msgid "Conversions Available" msgstr "可用的轉換" #: ../conduit/gtkui/UI.py:343 #: ../conduit/gtkui/Tree.py:348 #: ../conduit/modules/FileModule/FileConfiguration.py:105 msgid "Name" msgstr "名稱" #: ../conduit/gtkui/UI.py:347 #, fuzzy msgid "Loaded" msgstr "負載:" #: ../conduit/gtkui/UI.py:459 #: ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "同步化尚在進行中。你是否要取消它?" #: ../conduit/gtkui/UI.py:625 msgid "_Synchronize All" msgstr "同步全部(_S)" #: ../conduit/gtkui/UI.py:625 msgid "Synchronizes All Groups" msgstr "同步所有的羣組" #: ../conduit/gtkui/UI.py:626 msgid "_Cancel Synchronization" msgstr "取消同步化(_C)" #: ../conduit/gtkui/UI.py:626 msgid "Cancels Currently Synchronizing Groups" msgstr "取消目前正在同步的羣組" #: ../conduit/gtkui/UI.py:627 msgid "_Quit" msgstr "離開(_Q)" #: ../conduit/gtkui/UI.py:627 msgid "Close Conduit" msgstr "關閉 Conduit" #: ../conduit/gtkui/UI.py:667 msgid "Synchronization Error" msgstr "同步化錯誤" #: ../conduit/gtkui/UI.py:670 msgid "Synchronization Complete" msgstr "同步化完成" #: ../conduit/gtkui/UI.py:686 msgid "Synchronizing" msgstr "同步中" #: ../conduit/gtkui/Tree.py:357 msgid "Description" msgstr "描述" #: ../conduit/dataproviders/DataProvider.py:19 msgid "Ready" msgstr "就緒" #: ../conduit/dataproviders/DataProvider.py:20 msgid "New data to sync" msgstr "要同步的新資料" #: ../conduit/dataproviders/DataProvider.py:21 msgid "Refreshing..." msgstr "重新整理..." #: ../conduit/dataproviders/DataProvider.py:22 msgid "Refreshed OK" msgstr "重新整理完成" #: ../conduit/dataproviders/DataProvider.py:23 msgid "Error Refreshing" msgstr "重新整理發生錯誤" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Synchronizing..." msgstr "正在同步..." #: ../conduit/dataproviders/DataProvider.py:25 msgid "Synchronized OK" msgstr "同步完成" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Synchronizing" msgstr "同步發生錯誤" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronization Skipped" msgstr "同步化已略過" #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronization Cancelled" msgstr "同步化已取消" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Synchronization Conflict" msgstr "同步化有衝突" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Not Configured Correctly" msgstr "沒有正確的設定" #: ../conduit/modules/BackpackModule/BackpackModule.py:56 msgid "Backpack Notes" msgstr "Backpack Notes" #: ../conduit/modules/BackpackModule/BackpackModule.py:57 msgid "Store things in Backpack Notes" msgstr "在 Backpack Notes 中儲存東西" #: ../conduit/modules/BackpackModule/config.glade.h:1 #: ../conduit/modules/FlickrModule/config.glade.h:1 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:1 #: ../conduit/modules/GoogleModule/documents-config.glade.h:1 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:1 #: ../conduit/modules/GoogleModule/youtube-config.glade.h:1 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:1 #: ../conduit/modules/SmugMugModule/config.glade.h:1 #: ../conduit/modules/ZotoModule/zoto.glade.h:1 msgid "Account Details" msgstr "帳號詳細資料" #: ../conduit/modules/BackpackModule/config.glade.h:2 msgid "Saved Note Settings" msgstr "儲存的筆記設定值" #: ../conduit/modules/BackpackModule/config.glade.h:3 msgid "API key:" msgstr "API 鍵值:" #: ../conduit/modules/BackpackModule/config.glade.h:4 msgid "Backpack" msgstr "Backpack" #: ../conduit/modules/BackpackModule/config.glade.h:5 msgid "Save notes in page:" msgstr "將筆記儲存於頁面:" #: ../conduit/modules/BackpackModule/config.glade.h:6 #: ../conduit/modules/FlickrModule/config.glade.h:8 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:8 #: ../conduit/modules/GoogleModule/youtube-config.glade.h:9 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:6 #: ../conduit/modules/SmugMugModule/config.glade.h:7 #: ../conduit/modules/ZotoModule/zoto.glade.h:5 msgid "Username:" msgstr "使用者名稱:" #: ../conduit/modules/BansheeModule/BansheeModule.py:33 msgid "Banshee Playlists" msgstr "Banshee 播放清單" #: ../conduit/modules/BansheeModule/BansheeModule.py:34 msgid "Sync your Banshee playlists" msgstr "同步你的 Banshee 播放清單" #. column 1 is the tag name #: ../conduit/modules/BansheeModule/BansheeModule.py:141 #: ../conduit/modules/FspotModule/FspotModule.py:246 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:132 msgid "Tag Name" msgstr "標籤名稱" #: ../conduit/modules/BansheeModule/BansheeModule.py:149 #: ../conduit/modules/FspotModule/FspotModule.py:254 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:140 msgid "Enabled" msgstr "已啟用" #: ../conduit/modules/BansheeModule/config.glade.h:1 msgid "Return Playlists" msgstr "返回播放清單" #: ../conduit/modules/BansheeModule/config.glade.h:2 msgid "Banshee" msgstr "Banshee" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 #: ../conduit/modules/BoxDotNetModule/config.glade.h:1 msgid "Box.net" msgstr "Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 msgid "Sync your Box.net files" msgstr "同步你的 Box.net 檔案" #: ../conduit/modules/BoxDotNetModule/config.glade.h:2 msgid "Folder:" msgstr "資料夾:" #: ../conduit/modules/BoxDotNetModule/config.glade.h:3 #: ../conduit/modules/FacebookModule/config.glade.h:3 #: ../conduit/modules/FlickrModule/config.glade.h:4 msgid "Load" msgstr "載入" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:108 #, python-format msgid "Select %s:" msgstr "選擇 %s:" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:147 msgid "Evolution Contacts" msgstr "Evolution 聯絡人" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:148 msgid "Sync your contacts" msgstr "同步你的聯絡人" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:198 msgid "Evolution Calendar" msgstr "Evolution 行事曆" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:199 msgid "Sync your calendar" msgstr "同步你的行事曆" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:256 msgid "Evolution Tasks" msgstr "Evolution 工作" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:257 msgid "Sync your tasks" msgstr "同步你的工作" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:313 msgid "Evolution Memos" msgstr "Evolution 備忘錄" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:314 msgid "Sync your memos" msgstr "同步你的備忘錄" #: ../conduit/modules/EvolutionModule/config.glade.h:1 msgid "Addressbook:" msgstr "通訊錄:" #: ../conduit/modules/EvolutionModule/config.glade.h:2 msgid "Evolution" msgstr "Evolution" #: ../conduit/modules/FacebookModule/FacebookModule.py:37 #: ../conduit/modules/FacebookModule/config.glade.h:2 msgid "Facebook" msgstr "Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 msgid "Sync your Facebook photos" msgstr "同步你的 Facebook 相片" #: ../conduit/modules/FacebookModule/config.glade.h:1 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:3 #: ../conduit/modules/iPodModule/config.glade.h:2 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:3 #: ../conduit/modules/SmugMugModule/config.glade.h:3 #: ../conduit/modules/ZotoModule/zoto.glade.h:3 msgid "Album:" msgstr "專輯:" #: ../conduit/modules/FeedModule/FeedModule.py:57 #: ../conduit/modules/FeedModule/config.glade.h:9 msgid "RSS Feed" msgstr "RSS 餵送" #: ../conduit/modules/FeedModule/FeedModule.py:58 msgid "Sync data from RSS enclosures" msgstr "從 RSS enclosure(多媒體資料) 同步資料" #: ../conduit/modules/FeedModule/config.glade.h:1 msgid "Enclosure Settings" msgstr "Enclosure 設定值" #: ../conduit/modules/FeedModule/config.glade.h:2 msgid "Feed Details" msgstr "餵送詳細資料" #: ../conduit/modules/FeedModule/config.glade.h:3 msgid "Download Audio Files" msgstr "下載音樂檔案" #: ../conduit/modules/FeedModule/config.glade.h:4 msgid "Download Photos" msgstr "下載相片" #: ../conduit/modules/FeedModule/config.glade.h:5 msgid "Download Video Files" msgstr "下載影片檔案" #: ../conduit/modules/FeedModule/config.glade.h:6 msgid "Feed Address:" msgstr "餵送位址:" #: ../conduit/modules/FeedModule/config.glade.h:7 msgid "" "Limit the Number of\n" "Enclosures Downloaded to:" msgstr "" "限制要下載的\n" "Enclosur 數量:" #: ../conduit/modules/FileModule/FileConfiguration.py:99 msgid "Icon" msgstr "圖示" #: ../conduit/modules/FileModule/FileConfiguration.py:111 msgid "Items" msgstr "項目" #: ../conduit/modules/FileModule/FileConfiguration.py:137 #, python-format msgid "Contains %s files" msgstr "包含 %s 個檔案" #: ../conduit/modules/FileModule/FileConfiguration.py:228 msgid "Include file..." msgstr "包含檔案..." #: ../conduit/modules/FileModule/FileConfiguration.py:238 msgid "All files" msgstr "所有檔案" #: ../conduit/modules/FileModule/FileConfiguration.py:253 msgid "Include folder..." msgstr "包含資料夾..." #: ../conduit/modules/FileModule/FileConfiguration.py:298 msgid "Please Name All Folders" msgstr "請為所有的資料夾命名" #: ../conduit/modules/FileModule/FileConfiguration.py:299 msgid "All folders require a descriptive name. To name a folder simply click on it" msgstr "所有的資料夾都需要一個描述用的名稱。要為資料夾命名只需點選它即可。" #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "檔案" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "同步多個檔案的來源" #: ../conduit/modules/FileModule/FileModule.py:63 msgid "Folder" msgstr "資料夾" #: ../conduit/modules/FileModule/FileModule.py:64 msgid "Synchronize folders" msgstr "同步資料夾" #: ../conduit/modules/FileModule/config.glade.h:1 msgid "Items to Synchronize" msgstr "要同步的項目" #: ../conduit/modules/FileModule/config.glade.h:2 msgid "Add Directory" msgstr "加入目錄" #: ../conduit/modules/FileModule/config.glade.h:3 msgid "Add File" msgstr "加入檔案" #: ../conduit/modules/FileModule/config.glade.h:4 msgid "Advanced" msgstr "進階" #: ../conduit/modules/FileModule/config.glade.h:5 msgid "File Configuration" msgstr "檔案組態" #: ../conduit/modules/FileModule/config.glade.h:6 msgid "Folder Configuration" msgstr "資料夾組態" #: ../conduit/modules/FileModule/config.glade.h:7 msgid "Folder Location:" msgstr "資料夾位置:" #: ../conduit/modules/FileModule/config.glade.h:8 msgid "Follow Symbolic Links" msgstr "隨着符號連結" #: ../conduit/modules/FileModule/config.glade.h:9 msgid "Ignore File Modification Times" msgstr "忽略檔案修改時刻" #: ../conduit/modules/FileModule/config.glade.h:10 msgid "Include Hidden Files" msgstr "包含隱藏檔案" #: ../conduit/modules/FileModule/config.glade.h:11 msgid "Select A Folder" msgstr "選擇資料夾" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 #: ../conduit/modules/FlickrModule/config.glade.h:3 msgid "Flickr" msgstr "Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 msgid "Sync your Flickr.com photos" msgstr "同步你的 Flickr.com 相片" #: ../conduit/modules/FlickrModule/config.glade.h:2 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:2 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:2 #: ../conduit/modules/SmugMugModule/config.glade.h:2 #: ../conduit/modules/ZotoModule/zoto.glade.h:2 msgid "Saved Photo Settings" msgstr "儲存的相片設定值" #: ../conduit/modules/FlickrModule/config.glade.h:5 msgid "Photos are public" msgstr "相片是公開的" #: ../conduit/modules/FlickrModule/config.glade.h:6 msgid "Photoset Name:" msgstr "相片集名稱:" #: ../conduit/modules/FlickrModule/config.glade.h:7 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:7 #: ../conduit/modules/SmugMugModule/config.glade.h:5 msgid "Resize Photos:" msgstr "重設相片大小:" #: ../conduit/modules/FspotModule/FspotModule.py:25 #: ../conduit/modules/FspotModule/config.glade.h:3 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 msgid "Sync your F-Spot photos" msgstr "同步你的 F-Spot 相片" #: ../conduit/modules/FspotModule/FspotModule.py:127 msgid "F-Spot DBus interface is operating in read only mode" msgstr "F-Spot DBus 介面正以唯讀模式運行" #: ../conduit/modules/FspotModule/config.glade.h:1 msgid "Return Photos Tagged With" msgstr "回傳相片標籤於" #: ../conduit/modules/FspotModule/config.glade.h:2 msgid "Create Tags: " msgstr "建立標籤:" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "GConf Settings" msgstr "GConf 設定值" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Sync your desktop preferences" msgstr "同步你的桌面偏好設定" #: ../conduit/modules/GoogleModule/GoogleModule.py:369 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:4 msgid "Google Calendar" msgstr "Google 日曆" #: ../conduit/modules/GoogleModule/GoogleModule.py:370 msgid "Sync your Google Calendar" msgstr "同步你的 Google 日曆" #: ../conduit/modules/GoogleModule/GoogleModule.py:555 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:6 msgid "Picasa" msgstr "Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:556 msgid "Sync your Google Picasa photos" msgstr "同步你的 Google Picasa 相片" #: ../conduit/modules/GoogleModule/GoogleModule.py:803 msgid "Google Contacts" msgstr "Google 聯絡人" #: ../conduit/modules/GoogleModule/GoogleModule.py:804 msgid "Sync your Gmail contacts" msgstr "同步你的 Gmail 聯絡人" #: ../conduit/modules/GoogleModule/GoogleModule.py:1060 #: ../conduit/modules/GoogleModule/documents-config.glade.h:5 msgid "Google Documents" msgstr "Google 文件" #: ../conduit/modules/GoogleModule/GoogleModule.py:1061 msgid "Sync your Google Documents" msgstr "同步你的 Google 文件" #: ../conduit/modules/GoogleModule/GoogleModule.py:1338 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:60 msgid "Unknown" msgstr "不明" #: ../conduit/modules/GoogleModule/GoogleModule.py:1339 msgid "miscellaneous" msgstr "雜項" #: ../conduit/modules/GoogleModule/GoogleModule.py:1340 msgid "No description." msgstr "沒有描述。" #: ../conduit/modules/GoogleModule/GoogleModule.py:1349 msgid "YouTube" msgstr "YouTube" #: ../conduit/modules/GoogleModule/GoogleModule.py:1350 msgid "Sync data from YouTube" msgstr "同步 YouTube 的資料" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:2 msgid "Calendar:" msgstr "行事曆:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:3 #: ../conduit/modules/GoogleModule/documents-config.glade.h:4 msgid "Email:" msgstr "電子郵件:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:5 msgid "Load Calendars" msgstr "載入行事曆" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:6 #: ../conduit/modules/GoogleModule/documents-config.glade.h:6 #: ../conduit/modules/GoogleModule/picasa-config.glade.h:5 #: ../conduit/modules/GoogleModule/youtube-config.glade.h:6 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:4 #: ../conduit/modules/SmugMugModule/config.glade.h:4 #: ../conduit/modules/ZotoModule/zoto.glade.h:4 msgid "Password:" msgstr "密碼:" #: ../conduit/modules/GoogleModule/documents-config.glade.h:2 msgid "Downloaded Document Format" msgstr "下載的文件格式" #: ../conduit/modules/GoogleModule/documents-config.glade.h:3 msgid "Documents" msgstr "文件" #: ../conduit/modules/GoogleModule/documents-config.glade.h:7 msgid "Presentations" msgstr "簡報" #: ../conduit/modules/GoogleModule/documents-config.glade.h:8 msgid "Spreadsheets" msgstr "試算表" #: ../conduit/modules/GoogleModule/picasa-config.glade.h:4 msgid "Login" msgstr "登入" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:2 msgid "Download Videos" msgstr "下載影片" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:3 msgid "Favorites of above user" msgstr "以上使用者的最愛" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:4 msgid "Max retrieved videos (0 is unlimited):" msgstr "最多取回影片數 (0 為不限制):" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:5 msgid "Most viewed" msgstr "最多人檢視的" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:7 msgid "Top rated" msgstr "熱門指數" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:8 msgid "Uploaded by above user" msgstr "由以上使用者上傳" #: ../conduit/modules/GoogleModule/youtube-config.glade.h:10 msgid "YouTube Source" msgstr "YouTube 來源" #: ../conduit/modules/iPodModule/iPodModule.py:635 msgid "Encoding" msgstr "編碼" #: ../conduit/modules/iPodModule/iPodModule.py:744 msgid "Keep converted files" msgstr "保存轉換後的檔案" #: ../conduit/modules/iPodModule/config.glade.h:1 msgid "Encoding" msgstr "編碼" #: ../conduit/modules/iPodModule/config.glade.h:3 msgid "iPod Photos" msgstr "iPod 相片" #. Translators: Format string used to describe the acceptable formats the #. device accepts. The first arg is replaced with DEFAULT_FOLDER and the second #. arg is a comma seperated list of encodings #: ../conduit/modules/N800Module/N800Module.py:59 #, python-format msgid "%s Format (%s)" msgstr "%s 格式 (%s)" #. Signifies that a conversion should not take place #: ../conduit/modules/N800Module/N800Module.py:61 msgid "unchanged" msgstr "未更改" #: ../conduit/modules/N800Module/N800Module.py:123 msgid "N800 Files" msgstr "N800 檔案" #: ../conduit/modules/N800Module/N800Module.py:124 msgid "Synchronizes files/folders to a N800 device" msgstr "同步檔案/資料夾至 N800 裝置" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:129 msgid "Backups" msgstr "Backups" #: ../conduit/modules/N800Module/N800Module.py:144 msgid "N800 Music" msgstr "N800 音樂" #: ../conduit/modules/N800Module/N800Module.py:145 msgid "Synchronizes music to a N800 device" msgstr "同步音樂至 N800 裝置" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:151 msgid "Music" msgstr "音樂" #: ../conduit/modules/N800Module/N800Module.py:168 msgid "N800 Videos" msgstr "N800 影片" #: ../conduit/modules/N800Module/N800Module.py:169 msgid "Synchronizes video to a N800 device" msgstr "同步影片至 N800 裝置" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:175 msgid "Video" msgstr "Video" #: ../conduit/modules/N800Module/N800Module.py:192 msgid "N800 Photos" msgstr "N800 相片" #: ../conduit/modules/N800Module/N800Module.py:193 msgid "Synchronizes photo to a N800 device" msgstr "同步相片至 N800 裝置" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:199 msgid "Photo" msgstr "Photo" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "網絡" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "啟用透過網絡同步化" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:40 msgid "Rhythmbox Music" msgstr "Rhythmbox 音樂" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:41 msgid "Sync songs from your Rhythmbox playlists" msgstr "從你的 Rhythmbox 播放清單同步歌曲" #: ../conduit/modules/RhythmboxModule/config.glade.h:1 msgid "Synchronize the Following Playlists" msgstr "同步下列播放清單" #: ../conduit/modules/RhythmboxModule/config.glade.h:2 msgid "Rhythmbox Playlists" msgstr "Rhythmbox 播放清單" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 #: ../conduit/modules/ShutterflyModule/shutterfly.glade.h:5 msgid "Shutterfly" msgstr "Shutterfly" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 msgid "Sync your Shutterfly photos" msgstr "同步你的 Shutterfly 相片" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "%Y-%m-%d %H:%M:%S" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 #: ../conduit/modules/SmugMugModule/config.glade.h:6 msgid "SmugMug" msgstr "SmugMug" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 msgid "Sync your SmugMug.com photos" msgstr "同步你的 SmugMug.com 相片" #: ../conduit/modules/ZotoModule/ZotoModule.py:154 #: ../conduit/modules/ZotoModule/zoto.glade.h:6 msgid "Zoto" msgstr "Zoto" #: ../conduit/modules/ZotoModule/ZotoModule.py:155 msgid "Sync your Zoto photos" msgstr "同步你的 Zoto 相片" conduit-0.3.17/po/gl.po0000644000175000017500000011352111321403566011554 00000000000000# 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 , 2008. # Fran Dieguez , 2009. msgid "" msgstr "" "Project-Id-Version: gl\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-08-15 10:13+0200\n" "PO-Revision-Date: 2009-08-02 02:20+0200\n" "Last-Translator: Fran Dieguez \n" "Language-Team: American English \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 0.3\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../data/conduit.desktop.in.in.h:1 msgid "Conduit Synchronizer" msgstr "Sincronizador Conduit" #: ../data/conduit.desktop.in.in.h:2 msgid "Synchronization for GNOME" msgstr "Sincronización para Gnome" #: ../data/conduit.glade.h:1 msgid "Default Synchronization Options" msgstr "Opcións de sincronización predeterminadas" #: ../data/conduit.glade.h:2 msgid "General" msgstr "Xeral" #: ../data/conduit.glade.h:3 msgid "Always Up-To-Date" msgstr "Sempre actualizado" #: ../data/conduit.glade.h:4 msgid "Ask Me What to Do" msgstr "Preguntarme o que facer" #: ../data/conduit.glade.h:5 msgid "Ask me what to do" msgstr "Preguntarme o que facer" #: ../data/conduit.glade.h:6 msgid "Cancel Synchronization" msgstr "Cancelar sincronización" #: ../data/conduit.glade.h:7 msgid "Cancel currently-synchronizing groups" msgstr "Cancelar a sincronización actual de grupos" #: ../data/conduit.glade.h:8 msgid "Clear Canvas" msgstr "Limpar o marco" #: ../data/conduit.glade.h:9 msgid "Compare" msgstr "Comparar" #: ../data/conduit.glade.h:10 msgid "Conduit Preferences" msgstr "Preferencias de Conduit" #: ../data/conduit.glade.h:11 msgid "Configuration" msgstr "Configuración" #: ../data/conduit.glade.h:12 msgid "Configure Item" msgstr "Configurar elemento" #: ../data/conduit.glade.h:13 msgid "Configure the synchronization settings for this item" msgstr "Configurar os axustes de sincronización para este elemento" #: ../data/conduit.glade.h:14 msgid "Conflict Options" msgstr "Opcións de conflitos" #: ../data/conduit.glade.h:15 msgid "Conflicts" msgstr "Conflitos" #: ../data/conduit.glade.h:16 msgid "Contents" msgstr "Contidos" #: ../data/conduit.glade.h:17 msgid "Data Conversions" msgstr "Conversións de datos" #: ../data/conduit.glade.h:18 msgid "Data Providers" msgstr "Proveedores de datos" #: ../data/conduit.glade.h:19 msgid "Delete Group" msgstr "Borrar grupo" #: ../data/conduit.glade.h:20 msgid "Delete Item" msgstr "Borrar elemento" #: ../data/conduit.glade.h:21 msgid "Delete Options" msgstr "Opcións de borrado" #: ../data/conduit.glade.h:22 msgid "Delete from the corresponding sink" msgstr "Borrar o destino correspondente" #: ../data/conduit.glade.h:23 msgid "Delete the Corresponding Item" msgstr "Borrar o elemento correspondente" #: ../data/conduit.glade.h:24 msgid "Editor" msgstr "Editor" #: ../data/conduit.glade.h:25 msgid "Minimize to notification area" msgstr "Minimizar á área de notificación" #: ../data/conduit.glade.h:26 msgid "Refresh Group" msgstr "Actualizar grupo" #: ../data/conduit.glade.h:27 msgid "Refresh Item" msgstr "Actualizar elemento" #: ../data/conduit.glade.h:28 msgid "Replace the Older Item" msgstr "Substituír o elemento antigo" #: ../data/conduit.glade.h:29 msgid "Replace the older item" msgstr "Substituír o elemento antigo" #: ../data/conduit.glade.h:30 msgid "Resolve Conflicts" msgstr "Resolver conflitos" #: ../data/conduit.glade.h:31 msgid "Save settings on exit" msgstr "Gardar os axustes ao saír" #: ../data/conduit.glade.h:32 msgid "Show Hints" msgstr "Mostrar consellos" #: ../data/conduit.glade.h:33 msgid "Show status icon" msgstr "Mostrar icona de estado" #: ../data/conduit.glade.h:34 msgid "Skip" msgstr "Saltar" #: ../data/conduit.glade.h:35 msgid "Slow Synchronization" msgstr "Sincronización lenta" #: ../data/conduit.glade.h:36 msgid "Start Conduit at login" msgstr "Arrincar Conduit ao iniciar sesión" #: ../data/conduit.glade.h:37 msgid "Synchronization Options" msgstr "Opcións de sincronización" #: ../data/conduit.glade.h:38 msgid "Synchronize All" msgstr "Sincronizar todo" #: ../data/conduit.glade.h:39 msgid "Synchronize Group" msgstr "Sincronizar grupo" #: ../data/conduit.glade.h:40 msgid "Synchronize group" msgstr "Sincronizar grupo" #: ../data/conduit.glade.h:41 msgid "Synchronizes all groups" msgstr "Sincronizar todos os grupos" #: ../data/conduit.glade.h:42 msgid "Title" msgstr "Título" #: ../data/conduit.glade.h:43 msgid "Two-Way Synchronization" msgstr "Sincronización a dúas bandas" #: ../data/conduit.glade.h:44 msgid "When an item has been deleted:" msgstr "Cando se borrou un elemento:" #: ../data/conduit.glade.h:45 msgid "When an item is deleted..." msgstr "Cando se borra un elemento..." #: ../data/conduit.glade.h:46 msgid "When there is a conflict..." msgstr "Cando hai un conflito..." #: ../data/conduit.glade.h:47 msgid "When there is a two-way conflict:" msgstr "Cando hai un conflito a dúas bandas:" #: ../data/conduit.glade.h:48 msgid "_Edit" msgstr "_Editar" #: ../data/conduit.glade.h:49 msgid "_File" msgstr "_Ficheiro" #: ../data/conduit.glade.h:50 msgid "_Help" msgstr "_Axuda" #: ../conduit/Knowledge.py:8 msgid "What Do You Want to Synchronize?" msgstr "Que quere sincronizar?" #: ../conduit/Knowledge.py:9 msgid "Drag and Drop a Data Provider on the Canvas" msgstr "Solte o provedor de datos no Canvas" #: ../conduit/Knowledge.py:11 msgid "Synchronization Group Created" msgstr "Sincronización de grupo creada" #: ../conduit/Knowledge.py:12 msgid "Add Another Data Provider to the Group to Synchronize it" msgstr "Engada outro provedor de datos ao grupo para sincronizalo" #: ../conduit/Knowledge.py:14 msgid "You Are Now Ready to Synchronize" msgstr "Agora está preparado para sincronizar" #: ../conduit/Knowledge.py:15 msgid "Right Click on Group for Options" msgstr "Faga clic co botón dereito no Grupo para obter as opcións" #. source,sinc #comment #. twoway #: ../conduit/Knowledge.py:22 msgid "Synchronize Two Folders" msgstr "Sincroniza dous cartafoles" #: ../conduit/Knowledge.py:24 msgid "Backup Folder to Box.net" msgstr "Copiar cartafol en Box.net" #: ../conduit/Knowledge.py:26 msgid "Synchronize Tagged F-Spot Photos to Flickr" msgstr "Sincroniza as súas fotos tageadas de F-Spot con Flickr" #: ../conduit/Main.py:59 msgid "Conduit is a synchronization application." msgstr "Conduit é un aplicativo de sincronización." #: ../conduit/Main.py:63 #, python-format msgid "Launch without GUI. [default: %default]" msgstr "Lanzar sen GUI. [predeterminado: %default]" #: ../conduit/Main.py:67 #, python-format msgid "Save dataprovider configuration to FILE. [default: %default]" msgstr "" "Gardar configuración do provedor de datos en FICHEIRO. [predeterminado: %" "default]" #: ../conduit/Main.py:71 #, python-format msgid "Iconify on startup. [default: %default]" msgstr "Iconizar ao inicio. [predeterminado: %default]" #: ../conduit/Main.py:75 #, python-format msgid "Run with the specified UI. [default: %default]" msgstr "Executar coa UI especificada. [predeterminado: %default]" #: ../conduit/Main.py:79 msgid "Only load modules in the named files. [default: load all modules]" msgstr "" "Só cargar os módulos nos ficheiros nomeados. [predeterminado: cargar todos " "os modulos]" #: ../conduit/Main.py:83 msgid "Do not load modules in the named files. [default: load all modules]" msgstr "" "Non cargar os módulos nos ficheiros nomeados. [predeterminado: cargar todos " "os módulos]" #: ../conduit/Main.py:87 msgid "" "Explicitly set internal Conduit settings (keys) to the given values for this " "session. [default: do not set]" msgstr "" #: ../conduit/Main.py:91 #, python-format msgid "" "Enable loading of unfinished or unsupported dataproviders. [default: %" "default]" msgstr "" "Activar o cargado dos provedores de datos non rematados ou non soportados. " "[predeterminado: %default]" #: ../conduit/Main.py:95 #, python-format msgid "Generate more debugging information. [default: %default]" msgstr "Xerar máis información de depuración [predeterminado: %default]" #: ../conduit/Main.py:99 #, python-format msgid "Generate less debugging information. [default: %default]" msgstr "Xerar menos información de depuración. [predeterminado: %default]" #: ../conduit/Main.py:103 #, python-format msgid "Generate no debugging information. [default: %default]" msgstr "Non xerar información de depuración. [predeterminado: %default]" #: ../conduit/dataproviders/DataProvider.py:22 msgid "Ready" msgstr "Preparado" #: ../conduit/dataproviders/DataProvider.py:23 msgid "New data to sync" msgstr "Novos datos para sincronizar" #: ../conduit/dataproviders/DataProvider.py:24 msgid "Refreshing..." msgstr "Actualizando..." #: ../conduit/dataproviders/DataProvider.py:25 msgid "Refreshed OK" msgstr "Actualización correcta" #: ../conduit/dataproviders/DataProvider.py:26 msgid "Error Refreshing" msgstr "Erro ao actualizar" #: ../conduit/dataproviders/DataProvider.py:27 msgid "Synchronizing..." msgstr "Sincronizando..." #: ../conduit/dataproviders/DataProvider.py:28 msgid "Synchronized OK" msgstr "Sincronización correcta" #: ../conduit/dataproviders/DataProvider.py:29 msgid "Error Synchronizing" msgstr "Erro ao sincronizar" #: ../conduit/dataproviders/DataProvider.py:30 msgid "Synchronization Skipped" msgstr "Saltouse a sincronización" #: ../conduit/dataproviders/DataProvider.py:31 msgid "Synchronization Cancelled" msgstr "Sincronización cancelada" #: ../conduit/dataproviders/DataProvider.py:32 msgid "Synchronization Conflict" msgstr "Conflito na sincronización" #: ../conduit/dataproviders/DataProvider.py:33 msgid "Not Configured" msgstr "Non está configurado" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "640x480" msgstr "640x480" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "800x600" msgstr "800x600" #: ../conduit/dataproviders/Image.py:34 #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "1024x768" msgstr "1024x768" #. Signifies that a conversion should not take place #: ../conduit/dataproviders/Image.py:35 #: ../conduit/modules/N800Module/N800Module.py:57 msgid "None" msgstr "Ningún" #. Default Categories for the DataProviders #: ../conduit/dataproviders/__init__.py:6 msgid "Files and Folders" msgstr "Ficheiros e Cartafoles" #: ../conduit/dataproviders/__init__.py:7 #: ../conduit/modules/iPodModule/iPodModule.py:179 msgid "Notes" msgstr "Notas" #: ../conduit/dataproviders/__init__.py:8 #: ../conduit/modules/iPodModule/iPodModule.py:367 msgid "Photos" msgstr "Fotos" #: ../conduit/dataproviders/__init__.py:9 msgid "Office" msgstr "Oficina" #: ../conduit/dataproviders/__init__.py:10 msgid "Settings" msgstr "Configuracións" #: ../conduit/dataproviders/__init__.py:11 msgid "Miscellaneous" msgstr "Misceláneo" #: ../conduit/dataproviders/__init__.py:12 msgid "Media" msgstr "Medios" #: ../conduit/dataproviders/__init__.py:13 msgid "Bookmarks" msgstr "Marcadores" #: ../conduit/dataproviders/__init__.py:14 msgid "Test" msgstr "Probar" #: ../conduit/gtkui/Canvas.py:152 msgid "Drag a Data Provider here to continue" msgstr "Solte aquí o proveedor de datos para continuar" #: ../conduit/gtkui/Canvas.py:217 msgid "Show me" msgstr "Mostrarmo" #. Visible column0 is #. [pixbuf + source display name] or #. [source_data.get_snippet()] #: ../conduit/gtkui/ConflictResolver.py:91 msgid "Source" msgstr "Fonte" #: ../conduit/gtkui/ConflictResolver.py:105 msgid "Resolution" msgstr "Resolución" #. Visible column2 is the display name of source and source data #: ../conduit/gtkui/ConflictResolver.py:110 msgid "Sink" msgstr "Destino" #: ../conduit/gtkui/ConflictResolver.py:150 #: ../conduit/gtkui/ConflictResolver.py:151 #, python-format msgid "Conflicts (%s)" msgstr "Conflitos (%s)" #. name, #url #: ../conduit/gtkui/UI.py:33 msgid "Introduction" msgstr "Introdución" #: ../conduit/gtkui/UI.py:34 msgid "Writing a Data Provider" msgstr "Escribindo un provedores de datos" #: ../conduit/gtkui/UI.py:35 msgid "API Documentation" msgstr "Documentación da API" #: ../conduit/gtkui/UI.py:36 msgid "Test Results" msgstr "Resultados da proba" #: ../conduit/gtkui/UI.py:129 #, python-format msgid " - %s (Development Version)" msgstr " - %s (Versión de desenvolvemento)" #: ../conduit/gtkui/UI.py:131 msgid " - Running Uninstalled" msgstr "" #: ../conduit/gtkui/UI.py:165 msgid "Examples" msgstr "Exemplos" #: ../conduit/gtkui/UI.py:177 msgid "Developers" msgstr "Desenvolvedores" #. Build some liststores to display #: ../conduit/gtkui/UI.py:318 msgid "Convert from" msgstr "Converter de" #: ../conduit/gtkui/UI.py:319 msgid "into" msgstr "en" #: ../conduit/gtkui/UI.py:370 msgid "Relationship Database" msgstr "Base de datos relacional" #: ../conduit/gtkui/UI.py:374 msgid "Conversions Available" msgstr "Conversións dispoñibeis" #: ../conduit/gtkui/UI.py:380 ../conduit/gtkui/Tree.py:348 #: ../conduit/modules/FileModule/FileConfiguration.py:117 msgid "Name" msgstr "Nome" #: ../conduit/gtkui/UI.py:384 msgid "Loaded" msgstr "Cargado" #: ../conduit/gtkui/UI.py:512 ../conduit/hildonui/UI.py:127 msgid "Synchronization in progress. Do you want to cancel it?" msgstr "Sincronización en progreso. Quere cancelalo?" #: ../conduit/gtkui/UI.py:684 msgid "_Synchronize All" msgstr "_Sincronizar todo" #: ../conduit/gtkui/UI.py:684 msgid "Synchronizes All Groups" msgstr "Sincronizar todos os grupos" #: ../conduit/gtkui/UI.py:685 msgid "_Cancel Synchronization" msgstr "_Cancelar a sincronización" #: ../conduit/gtkui/UI.py:685 msgid "Cancels Currently Synchronizing Groups" msgstr "Cancela a sincronización de grupos actual" #: ../conduit/gtkui/UI.py:686 msgid "_Quit" msgstr "_Saír" #: ../conduit/gtkui/UI.py:686 msgid "Close Conduit" msgstr "Pechar Conduit" #: ../conduit/gtkui/UI.py:726 msgid "Synchronization Error" msgstr "Erro de sincronización" #: ../conduit/gtkui/UI.py:729 msgid "Synchronization Complete" msgstr "Sincronización completada" #: ../conduit/gtkui/UI.py:745 msgid "Synchronizing" msgstr "Sincronizando" #: ../conduit/gtkui/Tree.py:357 msgid "Description" msgstr "Descrición" #: ../conduit/gtkui/ConfigItems.py:729 #, python-format msgid "Total: %d" msgstr "Total: %d" #: ../conduit/gtkui/WindowConfigurator.py:14 msgid "Configure" msgstr "Configurar" #: ../conduit/modules/BackpackModule/BackpackModule.py:58 msgid "Backpack Notes" msgstr "Notas Backpack" #: ../conduit/modules/BackpackModule/BackpackModule.py:59 msgid "Store things in Backpack Notes" msgstr "Almacene cousas nas notas Backpack" #: ../conduit/modules/BackpackModule/BackpackModule.py:105 #: ../conduit/modules/FlickrModule/FlickrModule.py:307 #: ../conduit/modules/ZotoModule/ZotoModule.py:243 msgid "Account details" msgstr "Detalles da conta" #: ../conduit/modules/BackpackModule/BackpackModule.py:106 msgid "Login" msgstr "Conta" #: ../conduit/modules/BackpackModule/BackpackModule.py:109 msgid "API key" msgstr "Chave da API" #: ../conduit/modules/BackpackModule/BackpackModule.py:112 msgid "Saved notes" msgstr "Notas gardadas" #: ../conduit/modules/BackpackModule/BackpackModule.py:113 msgid "Save notes in page" msgstr "Gardar as notas na páxina" #: ../conduit/modules/BansheeModule/BansheeModule.py:52 msgid "Banshee Playlists" msgstr "Listas de reprodución de Banshee" #: ../conduit/modules/BansheeModule/BansheeModule.py:53 msgid "Synchronize your Banshee playlists" msgstr "Sincroniza as súas listas de reprodución de Banshee" #: ../conduit/modules/BansheeModule/BansheeModule.py:187 #: ../conduit/modules/BansheeModule/BansheeModule.py:188 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:116 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:117 msgid "Playlists" msgstr "Listas de reprodución" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:29 msgid "Box.net" msgstr "Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:30 msgid "Synchronize your Box.net files" msgstr "Sincroniza os seus ficheiros Box.net" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:290 #: ../conduit/modules/FileModule/FileModule.py:82 msgid "Folder" msgstr "Cartafol" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:291 msgid "Folder name" msgstr "Nome do cartafol" #: ../conduit/modules/BoxDotNetModule/BoxDotNetModule.py:295 msgid "Load folders" msgstr "Cargar cartafoles" #: ../conduit/modules/ConverterModule.py:91 msgid "Note-" msgstr "Nota-" #: ../conduit/modules/DesktopWallpaperModule.py:38 msgid "Wallpaper" msgstr "Fondo de escritorio" #: ../conduit/modules/DesktopWallpaperModule.py:39 msgid "Changes your Desktop Wallpaper" msgstr "Cambia o seu fondo de escritorio" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:107 #, python-format msgid "Select %s" msgstr "Seleccionar %s" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:127 msgid "Evolution Contacts" msgstr "Contactos de Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:128 msgid "Synchronize your contacts" msgstr "Sincroniza os seus contactos" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:178 msgid "Evolution Calendar" msgstr "Calendario de Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:179 msgid "Synchronize your calendar" msgstr "Sincroniza o seu calendario" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:240 msgid "Evolution Tasks" msgstr "Tarefas de Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:241 msgid "Synchronize your tasks" msgstr "Sincroniza as súas tarefas" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:297 msgid "Evolution Memos" msgstr "Notas de Evolution" #: ../conduit/modules/EvolutionModule/EvolutionModule.py:298 msgid "Synchronize your memos" msgstr "Sincroniza as súas notas" #: ../conduit/modules/FacebookModule/FacebookModule.py:38 msgid "Facebook" msgstr "Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:39 msgid "Synchronize your Facebook photos" msgstr "Sincronice as súas fotos de Facebook" #: ../conduit/modules/FacebookModule/FacebookModule.py:124 #: ../conduit/modules/FlickrModule/FlickrModule.py:282 msgid "Loading album list..." msgstr "Cargando lista de álbumes..." #: ../conduit/modules/FacebookModule/FacebookModule.py:128 msgid "Failed to connect" msgstr "Ocorreu un fallo ao conectar" #: ../conduit/modules/FacebookModule/FacebookModule.py:131 msgid "Logged in" msgstr "Identificado" #: ../conduit/modules/FacebookModule/FacebookModule.py:133 msgid "Failed to login" msgstr "Ocorreu un fallo ao iniciar sesión" #: ../conduit/modules/FacebookModule/FacebookModule.py:145 #: ../conduit/modules/FspotModule/FspotModule.py:243 msgid "Status" msgstr "Estado" #: ../conduit/modules/FacebookModule/FacebookModule.py:150 #: ../conduit/modules/iPodModule/iPodModule.py:461 #: ../conduit/modules/ZotoModule/ZotoModule.py:252 msgid "Album" msgstr "Álbum" #: ../conduit/modules/FacebookModule/FacebookModule.py:151 msgid "Album name" msgstr "Nome do álbum" #: ../conduit/modules/FacebookModule/FacebookModule.py:156 msgid "Load albums" msgstr "Cargar álbumes" #: ../conduit/modules/FeedModule/FeedModule.py:58 msgid "RSS Feed" msgstr "Fonte RSS" #: ../conduit/modules/FeedModule/FeedModule.py:59 msgid "Synchronize data from RSS enclosures" msgstr "Sincronice datos desde fontes RSS" #. FIXME: Add Randomize #: ../conduit/modules/FeedModule/FeedModule.py:114 msgid "Feed details" msgstr "Detalles da fonte" #: ../conduit/modules/FeedModule/FeedModule.py:115 msgid "Feed address" msgstr "Enderezo da fonte" #: ../conduit/modules/FeedModule/FeedModule.py:118 msgid "Enclosure settings" msgstr "Configuración de anexados" #: ../conduit/modules/FeedModule/FeedModule.py:119 msgid "Limit downloaded enclosures" msgstr "Límite dos adxuntos descargados" #: ../conduit/modules/FeedModule/FeedModule.py:125 msgid "Limit to" msgstr "Limitar a" #: ../conduit/modules/FeedModule/FeedModule.py:129 msgid "Randomize enclosures" msgstr "Desordenar adxuntos" #: ../conduit/modules/FeedModule/FeedModule.py:133 msgid "Download types" msgstr "Tipos de descarga" #: ../conduit/modules/FeedModule/FeedModule.py:134 msgid "Download audio files" msgstr "Descargar ficheiros de son" #: ../conduit/modules/FeedModule/FeedModule.py:135 msgid "Download video files" msgstr "Descargar ficheiros de vídeo" #: ../conduit/modules/FeedModule/FeedModule.py:136 msgid "Download photo files" msgstr "Descargar ficheiros de foto" #: ../conduit/modules/FileModule/FileConfiguration.py:111 msgid "Icon" msgstr "Icona" #: ../conduit/modules/FileModule/FileConfiguration.py:123 #: ../conduit/modules/GConfModule/GConfModule.py:138 msgid "Items" msgstr "Elementos" #: ../conduit/modules/FileModule/FileConfiguration.py:149 #, python-format msgid "Contains %s files" msgstr "Contén %s ficheiros" #: ../conduit/modules/FileModule/FileConfiguration.py:248 msgid "Include file..." msgstr "Incluír ficheiro..." #: ../conduit/modules/FileModule/FileConfiguration.py:258 msgid "All files" msgstr "Todos os ficheiros" #: ../conduit/modules/FileModule/FileConfiguration.py:271 msgid "Include folder..." msgstr "Incluír cartafol..." #: ../conduit/modules/FileModule/FileConfiguration.py:314 msgid "Please Name All Folders" msgstr "Póñalle nome a todos os seus cartafoles" #: ../conduit/modules/FileModule/FileConfiguration.py:315 msgid "" "All folders require a descriptive name. To name a folder simply click on it" msgstr "" "Todos os cartafoles requiren un nome descritivo. Para dar nome a un cartafo, " "prema sobre el." #: ../conduit/modules/FileModule/FileModule.py:23 msgid "Files" msgstr "Ficheiros" #: ../conduit/modules/FileModule/FileModule.py:24 msgid "Source for synchronizing multiple files" msgstr "Fonte de sincronización para ficheiros múltiples" #: ../conduit/modules/FileModule/FileModule.py:83 msgid "Synchronize folders" msgstr "Sincroniza cartafoles" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:40 msgid "Firefox 3 Bookmarks" msgstr "Marcadores de Firefox 3" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:41 msgid "Syncronize your Firefox 3 Bookmarks" msgstr "Sincroniza os seus marcadores de Firefox 3" #: ../conduit/modules/Firefox3Module/Firefox3Module.py:100 msgid "Firefox Profile" msgstr "Perfil de Firefox" #: ../conduit/modules/FlickrModule/FlickrModule.py:76 msgid "Flickr" msgstr "Flickr" #: ../conduit/modules/FlickrModule/FlickrModule.py:77 msgid "Synchronize your Flickr.com photos" msgstr "Sincronice as súas fotos en Flickr.com" #: ../conduit/modules/FlickrModule/FlickrModule.py:287 msgid "Failed to connect." msgstr "Ocorreu un fallo ao conectar." #: ../conduit/modules/FlickrModule/FlickrModule.py:290 msgid "Album names loaded." msgstr "Nomes dos álbums cargados." #: ../conduit/modules/FlickrModule/FlickrModule.py:292 msgid "Failed to login." msgstr "Ocorreu un fallo ao iniciar sesión." #: ../conduit/modules/FlickrModule/FlickrModule.py:303 msgid "Logging in, please wait..." msgstr "Iniciando sesión, agarde..." #: ../conduit/modules/FlickrModule/FlickrModule.py:308 #: ../conduit/modules/GoogleBookmarksModule.py:67 #: ../conduit/modules/ZotoModule/ZotoModule.py:244 msgid "Username" msgstr "Nome de usuario" #: ../conduit/modules/FlickrModule/FlickrModule.py:318 msgid "Authenticate" msgstr "Autenticar" #: ../conduit/modules/FlickrModule/FlickrModule.py:322 #: ../conduit/modules/ZotoModule/ZotoModule.py:251 msgid "Saved photo settings" msgstr "Axustes para as fotos gardadas" #: ../conduit/modules/FlickrModule/FlickrModule.py:327 msgid "Resize photos" msgstr "Redimensionar fotos" #: ../conduit/modules/FlickrModule/FlickrModule.py:328 msgid "Do not resize" msgstr "Non redimensionar" #: ../conduit/modules/FlickrModule/FlickrModule.py:331 msgid "Photos are public" msgstr "As fotos son públicas" #: ../conduit/modules/FspotModule/FspotModule.py:25 msgid "F-Spot" msgstr "F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:26 msgid "Synchronize your F-Spot photos" msgstr "Sincroniza as súas fotos de F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:152 msgid "F-Spot DBus interface is operating in read-only mode" msgstr "A interface D-Bus de F-Spot está funcionando en modo de só lectura" #: ../conduit/modules/FspotModule/FspotModule.py:218 msgid "F-Spot is running" msgstr "F-Spot está executándose" #: ../conduit/modules/FspotModule/FspotModule.py:219 msgid "Please start F-Spot or activate the D-Bus Extension" msgstr "Inicie F-Spot ou active a extensión de D-Bus" #: ../conduit/modules/FspotModule/FspotModule.py:244 msgid "Start F-Spot" msgstr "Iniciar F-Spot" #: ../conduit/modules/FspotModule/FspotModule.py:248 #: ../conduit/modules/FspotModule/FspotModule.py:249 msgid "Tags" msgstr "Etiquetas" #: ../conduit/modules/FspotModule/FspotModule.py:262 msgid "Add tags" msgstr "Engadir etiquetas" #: ../conduit/modules/FspotModule/FspotModule.py:263 msgid "Tag name" msgstr "Nome da etiqueta" #: ../conduit/modules/FspotModule/FspotModule.py:266 msgid "Add tag" msgstr "Engadir etiqueta" #: ../conduit/modules/GConfModule/GConfModule.py:21 msgid "Application Settings" msgstr "Configuracións do aplicativo" #: ../conduit/modules/GConfModule/GConfModule.py:22 msgid "Synchronize your application settings" msgstr "Sincroniza as configuracións do seu aplicativo" #: ../conduit/modules/GConfModule/GConfModule.py:31 msgid "Metacity" msgstr "Metacity" #: ../conduit/modules/GConfModule/GConfModule.py:32 msgid "Nautilus" msgstr "Nautilus" #: ../conduit/modules/GConfModule/GConfModule.py:33 msgid "Preferred Applications" msgstr "Aplicativos preferidos" #: ../conduit/modules/GConfModule/GConfModule.py:34 msgid "Desktop Interface" msgstr "Interface de escritorio" #: ../conduit/modules/GConfModule/GConfModule.py:35 msgid "Gnome Terminal" msgstr "Terminal de gnome" #: ../conduit/modules/GConfModule/GConfModule.py:137 msgid "Applications to Synchronize" msgstr "Aplicativos a sincronizar" #: ../conduit/modules/GoogleBookmarksModule.py:19 msgid "Google Bookmarks" msgstr "Marcadores de Google" #: ../conduit/modules/GoogleBookmarksModule.py:20 msgid "Sync your Google Bookmarks" msgstr "Sincroniza os seus marcadores de Google" #: ../conduit/modules/GoogleBookmarksModule.py:66 msgid "Login Details" msgstr "Detalles da conta" #: ../conduit/modules/GoogleBookmarksModule.py:70 #: ../conduit/modules/ZotoModule/ZotoModule.py:247 msgid "Password" msgstr "Contrasinal" #: ../conduit/modules/GoogleModule/GoogleModule.py:399 #: ../conduit/modules/GoogleModule/calendar-config.glade.h:4 msgid "Google Calendar" msgstr "Calendario de Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:400 msgid "Synchronize your Google Calendar" msgstr "Sincroniza o seu calendario de Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:582 msgid "Picasa" msgstr "Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:583 msgid "Synchronize your Google Picasa photos" msgstr "Sincronice as súas fotos en Google Picasa" #: ../conduit/modules/GoogleModule/GoogleModule.py:745 msgid "Google Contacts" msgstr "Contactos de Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:746 msgid "Synchronize your Google Mail contacts" msgstr "Sincroniza os seus contactos de Google Mail" #: ../conduit/modules/GoogleModule/GoogleModule.py:1076 msgid "Google Documents" msgstr "Documentos de Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:1077 msgid "Synchronize your Google Documents" msgstr "Sincroniza os seus documentos de Google" #: ../conduit/modules/GoogleModule/GoogleModule.py:1322 #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:69 msgid "Unknown" msgstr "Descoñecido" #: ../conduit/modules/GoogleModule/GoogleModule.py:1323 msgid "miscellaneous" msgstr "misceláneo" #: ../conduit/modules/GoogleModule/GoogleModule.py:1324 msgid "No description." msgstr "Sen descrición." #: ../conduit/modules/GoogleModule/GoogleModule.py:1333 msgid "YouTube" msgstr "YouTube" #: ../conduit/modules/GoogleModule/GoogleModule.py:1334 msgid "Synchronize data from YouTube" msgstr "Sincroniza datos con YouTube" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:1 msgid "Account Details" msgstr "Detalles da conta" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:2 msgid "Calendar:" msgstr "Calendario:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:3 msgid "Email:" msgstr "Correo-e:" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:5 msgid "Load Calendars" msgstr "Cargar calendarios" #: ../conduit/modules/GoogleModule/calendar-config.glade.h:6 msgid "Password:" msgstr "Contrasinal:" #: ../conduit/modules/iPodModule/iPodModule.py:180 msgid "Synchronize your iPod notes" msgstr "Sincroniza os seus contactos de iPod" #: ../conduit/modules/iPodModule/iPodModule.py:295 #: ../conduit/modules/SynceModule.py:311 msgid "Contacts" msgstr "Contactos" #: ../conduit/modules/iPodModule/iPodModule.py:296 msgid "Synchronize your iPod contacts" msgstr "Sincroniza os seus contactos de iPod" #: ../conduit/modules/iPodModule/iPodModule.py:331 #: ../conduit/modules/SynceModule.py:449 msgid "Calendar" msgstr "Calendario" #: ../conduit/modules/iPodModule/iPodModule.py:332 msgid "Synchronize your iPod calendar" msgstr "Sincroniza o seu calendario de iPod" #: ../conduit/modules/iPodModule/iPodModule.py:368 msgid "Synchronize your iPod photos" msgstr "Sincroniza as súas fotos de iPod" #: ../conduit/modules/iPodModule/iPodModule.py:465 msgid "Delete" msgstr "Eliminar" #: ../conduit/modules/iPodModule/iPodModule.py:695 #: ../conduit/modules/iPodModule/iPodModule.py:812 #: ../conduit/modules/N800Module/N800Module.py:77 msgid "Encoding" msgstr "Codificando" #: ../conduit/modules/iPodModule/iPodModule.py:811 msgid "Conversion options" msgstr "Opcións de conversión" #: ../conduit/modules/iPodModule/iPodModule.py:816 msgid "Keep converted files" msgstr "Manter os ficheiros convertidos" #: ../conduit/modules/iPodModule/iPodModule.py:846 msgid "iPod Music" msgstr "Música do iPod" #: ../conduit/modules/iPodModule/iPodModule.py:847 msgid "Synchronize your iPod music" msgstr "Sincroniza a súa música do iPod" #: ../conduit/modules/iPodModule/iPodModule.py:882 msgid "iPod Video" msgstr "Vídeo do iPod" #: ../conduit/modules/iPodModule/iPodModule.py:883 msgid "Synchronize your iPod videos" msgstr "Sincroniza os seus vídeos do iPod" #: ../conduit/modules/iPodModule/iPodModule.py:907 msgid "Movie" msgstr "Película" #: ../conduit/modules/iPodModule/iPodModule.py:908 msgid "Music Video" msgstr "Vídeo musical" #: ../conduit/modules/iPodModule/iPodModule.py:909 msgid "TV Show" msgstr "Series de TV" #: ../conduit/modules/iPodModule/iPodModule.py:911 msgid "Video kind" msgstr "Do tipo de vídeo" #. Translators: Translate this in derived classes. #: ../conduit/modules/N800Module/N800Module.py:55 msgid "Conduit" msgstr "Conduit" #: ../conduit/modules/N800Module/N800Module.py:105 msgid "N800 Files" msgstr "Ficheiro do N800" #: ../conduit/modules/N800Module/N800Module.py:106 msgid "Synchronizes files/folders to a N800 device" msgstr "Sincroniza ficheiros/cartafol cun dispositivo N800" #. To translators: default backup folder of N800 #: ../conduit/modules/N800Module/N800Module.py:111 msgid "Backups" msgstr "Copias de seguranza" #: ../conduit/modules/N800Module/N800Module.py:126 msgid "N800 Music" msgstr "Músca no N800" #: ../conduit/modules/N800Module/N800Module.py:127 msgid "Synchronizes music to a N800 device" msgstr "Sincroniza múscia co dispositivo N800" #. To translators: defaul music folder of N800 #: ../conduit/modules/N800Module/N800Module.py:133 msgid "Music" msgstr "Música" #: ../conduit/modules/N800Module/N800Module.py:150 msgid "N800 Videos" msgstr "Vídeos no N800" #: ../conduit/modules/N800Module/N800Module.py:151 msgid "Synchronizes video to a N800 device" msgstr "Sincroniza vídeo cun dispositivo N800" #. To translators: defaul video folder of N800 #: ../conduit/modules/N800Module/N800Module.py:157 msgid "Video" msgstr "Vídeo" #: ../conduit/modules/N800Module/N800Module.py:174 msgid "N800 Photos" msgstr "Fotos do N800" #: ../conduit/modules/N800Module/N800Module.py:175 msgid "Synchronizes photos to an N800 device" msgstr "Sincroniza música co dispositivo N800" #. To translators: default photos folder of N800 #: ../conduit/modules/N800Module/N800Module.py:181 msgid "Photo" msgstr "Foto" #: ../conduit/modules/NautilusBookmarksModule.py:19 msgid "Nautilus Bookmarks" msgstr "Marcadores do Nautilus" #: ../conduit/modules/NautilusBookmarksModule.py:20 msgid "Sync your Nautilus Bookmarks" msgstr "Sincroniza os seus marcadores de Nautilus" #: ../conduit/modules/NautilusBookmarksModule.py:145 msgid "Sync bookmarks to local places/files" msgstr "Sincronizar os marcadores a lugares/ficheiros locais" #: ../conduit/modules/NautilusBookmarksModule.py:148 msgid "Sync bookmarks to remote places/files" msgstr "Sincronizar marcadores a lugares/ficheiros remotos" #: ../conduit/modules/NetworkModule/Server.py:147 msgid "Network" msgstr "Rede" #: ../conduit/modules/NetworkModule/Server.py:148 msgid "Enable synchronization via network" msgstr "Activar sincronización por medio da rede" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:44 msgid "Rhythmbox Music" msgstr "Música de Rhythmbox" #: ../conduit/modules/RhythmboxModule/RhythmboxModule.py:45 msgid "Synchronize songs from your Rhythmbox playlists" msgstr "Sincroniza as cancións das listas de reprodución de Rhythmbox" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:26 msgid "Shutterfly" msgstr "Shutterfly" #: ../conduit/modules/ShutterflyModule/ShutterflyModule.py:27 msgid "Synchronize your Shutterfly photos" msgstr "Sincroniza as súas fotos en Shutterfly" #: ../conduit/modules/ShutterflyModule/shutterfly/shutterfly.py:33 msgid "%Y-%m-%d %H:%M:%S" msgstr "%Y-%m-%d %H:%M:%S" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:28 msgid "SmugMug" msgstr "SmugMug" #: ../conduit/modules/SmugMugModule/SmugMugModule.py:29 msgid "Synchronize your SmugMug.com photos" msgstr "Sincroniza as súas fotos en SmugMug" #: ../conduit/modules/SynceModule.py:139 msgid "Create Partnership" msgstr "" #: ../conduit/modules/SynceModule.py:312 msgid "Windows Mobile Contacts" msgstr "Contactos de Windows Mobile" #: ../conduit/modules/SynceModule.py:450 msgid "Windows Mobile Calendar" msgstr "Calendario de Windows Mobile" #: ../conduit/modules/SynceModule.py:459 msgid "Tasks" msgstr "Tarefas" #: ../conduit/modules/SynceModule.py:460 msgid "Windows Mobile Tasks" msgstr "Tarefas de Windows Mobile" #: ../conduit/modules/ZotoModule/ZotoModule.py:154 msgid "Zoto" msgstr "Zoto" #: ../conduit/modules/ZotoModule/ZotoModule.py:155 msgid "Synchronize your Zoto photos" msgstr "Sincroniza as súas fotos de Zoto" #~ msgid "Slow Sync" #~ msgstr "Sincronización lenta" #~ msgid "Sync Options" #~ msgstr "Opcións de sincronización" #~ msgid "Two Way Sync" #~ msgstr "Dous modos de sincronización" #~ msgid "Use built in Web browser" #~ msgstr "Usar o navegador web integrado" #~ msgid "_About" #~ msgstr "_Sobre" #~ msgid "About Conduit" #~ msgstr "Sobre Conduit" #~ msgid "Saved Note Settings" #~ msgstr "Configuración de notas gardadas" #~ msgid "Backpack" #~ msgstr "Backpack" #~ msgid "Enabled" #~ msgstr "Activado" #~ msgid "Return Playlists" #~ msgstr "Devolver listas de reprodución" #~ msgid "Banshee" #~ msgstr "Banshee" #~ msgid "Folder:" #~ msgstr "Cartafol:" #~ msgid "Load" #~ msgstr "Cargar" #~ msgid "Addressbook:" #~ msgstr "Libro de enderezos:" #~ msgid "Evolution" #~ msgstr "Evolution" #~ msgid "" #~ "Limit the Number of\n" #~ "Enclosures Downloaded to:" #~ msgstr "" #~ "Limite o número de\n" #~ "anexos descargados a:" #~ msgid "Items to Synchronize" #~ msgstr "Elementos a sincronizar" #~ msgid "Add Directory" #~ msgstr "Engadir directorio" #~ msgid "Add File" #~ msgstr "Engadir ficheiro" #~ msgid "Advanced" #~ msgstr "Avanzado" #~ msgid "File Configuration" #~ msgstr "Configuración de ficheiro" #~ msgid "Folder Configuration" #~ msgstr "Configuración de cartafol" #~ msgid "Folder Location:" #~ msgstr "Localización do cartafol:" #~ msgid "Follow Symbolic Links" #~ msgstr "Seguir as ligazóns simbólicas" #~ msgid "Ignore File Modification Times" #~ msgstr "Ignorar os tempos de modificación de ficheiro" #~ msgid "Include Hidden Files" #~ msgstr "Incluír ficheiros ocultos" #~ msgid "Select A Folder" #~ msgstr "Seleccionar un cartafol" #~ msgid "Photoset Name:" #~ msgstr "Nome do álbum:" #~ msgid "Return Photos Tagged With" #~ msgstr "Devolver fotos etiquetadas con" #~ msgid "Create Tags: " #~ msgstr "Crear etiquetas: " #~ msgid "Sync your desktop preferences" #~ msgstr "Sincronizar as súas preferencias do escritorio" #~ msgid "Downloaded Document Format" #~ msgstr "Formato de documento descargado" #~ msgid "Presentations" #~ msgstr "Presentacións" #~ msgid "Spreadsheets" #~ msgstr "Follas de cálculo" #~ msgid "Download Videos" #~ msgstr "Descargar vídeos" #~ msgid "Favorites of above user" #~ msgstr "Favoritos do usuario de enriba" #~ msgid "Max retrieved videos (0 is unlimited):" #~ msgstr "Máximo número de vídeos recuperados (0 é ilimitado):" #~ msgid "Top rated" #~ msgstr "Mellor puntuado" #~ msgid "Uploaded by above user" #~ msgstr "Subido polo usuario de enriba" #~ msgid "YouTube Source" #~ msgstr "Fonte YouTube" #~ msgid "iPod Photos" #~ msgstr "Fotos do iPod" #~ msgid "%s Format (%s)" #~ msgstr "%s formato (%s)" #~ msgid "unchanged" #~ msgstr "sen cambiar" #~ msgid "Synchronize the Following Playlists" #~ msgstr "Sincronizar as seguintes pistas de reprodución" #~ msgid "Rhythmbox Playlists" #~ msgstr "Listas de reprodución de Rhythmbox" #~ msgid "Please Enter a Folder Name" #~ msgstr "Introduza un nome de cartafol" #~ msgid "" #~ "All folders require a descriptive name. To name a folder enter its name " #~ "where indicated" #~ msgstr "" #~ "Todos os cartafoles requiren un nome descritivo. Para introducir o nome " #~ "dun cartafol introduza o nome onde se indica" #~ msgid "By user" #~ msgstr "Polo usuario" #~ msgid "User: " #~ msgstr "Usuario: " conduit-0.3.17/py-compile0000755000175000017500000001013511326116730012174 00000000000000#!/bin/sh # py-compile - Compile a Python program scriptversion=2009-04-28.21; # UTC # Copyright (C) 2000, 2001, 2003, 2004, 2005, 2008, 2009 Free Software # Foundation, Inc. # 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, 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, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . if [ -z "$PYTHON" ]; then PYTHON=python fi basedir= destdir= files= while test $# -ne 0; do case "$1" in --basedir) basedir=$2 if test -z "$basedir"; then echo "$0: Missing argument to --basedir." 1>&2 exit 1 fi shift ;; --destdir) destdir=$2 if test -z "$destdir"; then echo "$0: Missing argument to --destdir." 1>&2 exit 1 fi shift ;; -h|--h*) cat <<\EOF Usage: py-compile [--help] [--version] [--basedir DIR] [--destdir DIR] FILES..." Byte compile some python scripts FILES. Use --destdir to specify any leading directory path to the FILES that you don't want to include in the byte compiled file. Specify --basedir for any additional path information you do want to be shown in the byte compiled file. Example: py-compile --destdir /tmp/pkg-root --basedir /usr/share/test test.py test2.py Report bugs to . EOF exit $? ;; -v|--v*) echo "py-compile $scriptversion" exit $? ;; *) files="$files $1" ;; esac shift done if test -z "$files"; then echo "$0: No files given. Try \`$0 --help' for more information." 1>&2 exit 1 fi # if basedir was given, then it should be prepended to filenames before # byte compilation. if [ -z "$basedir" ]; then pathtrans="path = file" else pathtrans="path = os.path.join('$basedir', file)" fi # if destdir was given, then it needs to be prepended to the filename to # byte compile but not go into the compiled file. if [ -z "$destdir" ]; then filetrans="filepath = path" else filetrans="filepath = os.path.normpath('$destdir' + os.sep + path)" fi $PYTHON -c " import sys, os, py_compile files = '''$files''' sys.stdout.write('Byte-compiling python modules...\n') for file in files.split(): $pathtrans $filetrans if not os.path.exists(filepath) or not (len(filepath) >= 3 and filepath[-3:] == '.py'): continue sys.stdout.write(file) sys.stdout.flush() py_compile.compile(filepath, filepath + 'c', path) sys.stdout.write('\n')" || exit $? # this will fail for python < 1.5, but that doesn't matter ... $PYTHON -O -c " import sys, os, py_compile files = '''$files''' sys.stdout.write('Byte-compiling python modules (optimized versions) ...\n') for file in files.split(): $pathtrans $filetrans if not os.path.exists(filepath) or not (len(filepath) >= 3 and filepath[-3:] == '.py'): continue sys.stdout.write(file) sys.stdout.flush() py_compile.compile(filepath, filepath + 'o', path) sys.stdout.write('\n')" 2>/dev/null || : # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: conduit-0.3.17/data/0000777000175000017500000000000011326117104011161 500000000000000conduit-0.3.17/data/COPYING0000644000175000017500000000042511172176633012144 00000000000000The Conduit icons in data/icons/hicolor/ are derived from the Tango Project [1] and are licensed under the cc-by-sa 2.5 license [2]. The Conduit application icon was contributed by mejogid. [1] http://tango.freedesktop.org [2] http://creativecommons.org/licenses/by-sa/2.5/ conduit-0.3.17/data/youtube.png0000644000175000017500000000406111172176633013313 00000000000000PNG  IHDR00` PLTE  " !#$!#$'"%%)(,&))*(+'++--0-0-/,.+,01.10203/11414042324133726232423254547373457454648688:9=9;<>9N?8]0n#T[6 {8kũ<ѬXB.hء& f` ,;h| =8 +8:8*97tĔ_3:01Hy]ravGIR6[6.iee)),ThJTG].'C0BE*<,PF>$(F胧Y.%=Jer'E An:ł| y/V :oԤMƆC**|L~)ZIENDB`conduit-0.3.17/data/conduit.pc.in0000644000175000017500000000035611172176633013512 00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@LIBDIR@ dataprovidersdir=@MODULEDIR@ Name: Conduit DataProviders Location Description: Providing the location of Conduit system-wide DataProviders. Requires: pygtk-2.0 Version: @VERSION@ conduit-0.3.17/data/zoto.png0000644000175000017500000000734211172176633012617 00000000000000PNG  IHDR00WsRGBbKGD pHYs  tIME!@9tEXtCommentCreated with GIMPW=IDATh՚su^g0A\D2IQ$;v!% U#yI%q '.7-TD(@R gz7Ә!Te 3|gwN? c6'NB|1}ӱF"&fmk3e,=cR~  `}@)829ċq1w P7Zc޽r)䥗)%RmO W7W&:[Ơ{ iDQ8$# "«wS !khv0Z8>00 `c'[o3g 05f}sa~qg=| Xk1&;N!SǴ_oHh~r1Skv:=L?@/&6GH@D6n/Djf&RvVf@? dž|19" Y BhL#]/)EU.QDskMqx1f@H8yb|cY@ũʎWchL SEЧTp (WkTH] zuaPaRXK'Yg$Aiq5* "bfO_'@0;5sMFfut'^fcǏzf?<⾢2*=Uf_8,p\w~]LO xڈ 0٣ı`qqf/ /"5vCm0yQ.e{խ6hwx_)q1 tHO0M{Q"B5Kz>)BI5Kȋ/-O0NIf9"%Ʊ/-1JRV( 8D`:ջt8>p@V7_L1¼)feN@]>G'=57Nc26˨YJk|obn>R)X@38LfVJX`O^\B?m9ITpnS{,#FIͳ/,V ۶31R/VjrqFJsp'1 6qWπ#ʼn9lUcr㍓T2AF/O/P>@nb$amxmAMcBgD1G}T//_ؙQmѩDaN4M>&QQ8y7cVIu]|'Ui-kŽΞzA~L(/GL |?@x#̍DJJ |ߧˏ(US `)l!_(`6<ߛ'V2>">]Fx)rjx671SF]B 1ƶGG{k 6%_p] 2Po;RJdcA/mR9`'A%Tk5 vmDx.H5"I. ă(:;>"ɮicQEO"ʲZ?#k˗ߑR{ӯ)vCb1]v&z٬B?@KX9Twam j-hѷbkgmB l: ڣfj-iD;pV/_~tT*})I]ǬmBe 95AIզ렪-WO;u:%ΏQn"޿6bU#:-`>I/GZ*hd 㠵4n,SZ"_RرN2lE?(|by ٗk,gN!GQvޣ%V ߼(Yw?r/R %("c,B)%Lc xlvL|]tPJa/b1W1ז%1,#ey+1s{w?|qLߛ-N/VT"(m }(y#D6XUaLR\6d -i,& 2:?$^߫;f ]GOe2 J~4 ^˂ $pD:@ΔKG2d^Cli. :Tӻīf6Wcv0sRʄ҈A@K+urvq{1,ӥ8w2|!iz_>q:_ODj+OdYke%;-8jY;dɏ%3[c@c ؉6(y0^|ӒfMyxc)li#Bf4;Ŀ|t؁ă%ĩي2Y!g4o0^(mP) O^Ū$CM!ˡR| m)œ7%51: J"/Kvi4T*yLOM2991QgLVVR  "`u]̉Y_봚M!%)c) H&2Kl9+>DS#XIENDB`conduit-0.3.17/data/org.conduit.service.in0000644000175000017500000000010611172176633015327 00000000000000[D-BUS Service] Name=org.conduit.Application Exec=@bindir@/conduit -c conduit-0.3.17/data/smugmug.png0000644000175000017500000000123011172176633013276 00000000000000PNG  IHDRw=bKGD pHYs  tIME :-x%IDATHՖ=la/-mLl{1Bt7`,qӡSN~ &.vpS-[)#K#KT.\<zj7߻F#bT cZj٠]Bq; d n>:v9u}ŗ[+&ziX, _)m",L`6zM ^\d 2l˦ݐ U-iP-N݅.0>9rh4fbj͡E)Ng3_0 !!ܣrr\bmهK2k;1?]Oi䋧\"+dgKx۶vlBl:&q .J ǥmAm諭 .(tZ&SH^x d<3;hΆ^LQW}Li<|u̦uh/㌕6TNqM{lA&3*j2{^kf`rݸ?A*cDK|_ƿkwIENDB`conduit-0.3.17/data/Makefile.am0000644000175000017500000000556211321403566013146 00000000000000SUBDIRS = icons ################################################################################ # Package Config Stuff ################################################################################ pkgconfigdir = $(libdir)/pkgconfig pkgconfig_in_files = conduit.pc.in pkgconfig_DATA = $(pkgconfig_in_files:.pc.in=.pc) ################################################################################ # GConf Schemas ################################################################################ # GConf Preference Schemas #schemadir = $(GCONF_SCHEMA_FILE_DIR) #schema_in_files = conduit.schemas.in #schema_DATA = $(schema_in_files:.schemas.in=.schemas) #@INTLTOOL_SCHEMAS_RULE@ ################################################################################ # Icons ################################################################################ gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor install-data-hook: update-icon-cache uninstall-hook: update-icon-cache update-icon-cache: @-if test -z "$(DESTDIR)"; then \ echo "Updating Gtk icon cache."; \ $(gtk_update_icon_cache); \ else \ echo "*** Icon cache not updated. After (un)install, run this:"; \ echo "*** $(gtk_update_icon_cache)"; \ fi resourcesdir = $(pkgdatadir) resources_DATA = \ conduit.ui \ backpack.png \ evolution-tasks.png \ evolution-memos.png \ conduit-splash.png \ facebook.png \ feed.png \ picasa.png \ smugmug.png \ boxdotnet.png \ flickr.png \ shutterfly.png \ youtube.png \ zoto.png \ windows.png conduitbindir = $(libdir)/conduit ################################################################################ # Desktop file ################################################################################ desktopdir = $(datadir)/applications desktop_in_files = conduit.desktop.in desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) @INTLTOOL_DESKTOP_RULE@ ################################################################################ # DBus ################################################################################ dbusservicedir=$(DBUS_SERVICES_DIR) dbusservice_in_files=org.conduit.service.in dbusservice_DATA=$(dbusservice_in_files:.service.in=.service) $(dbusservice_DATA): $(dbusservice_in_files) Makefile @sed -e "s|\@bindir\@|$(bindir)|" $< > $@ ################################################################################ # Build rules ################################################################################ #if GCONF_SCHEMAS_INSTALL #install-data-local: install-schemas #install-schemas: # GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) \ # $(GCONFTOOL) --makefile-install-rule $(schema_DATA) #endif DISTCLEANFILES = \ $(pkgconfig_DATA) \ $(desktop_DATA) EXTRA_DIST = \ $(resources_DATA) \ $(pkgconfig_in_files) \ $(dbusservice_in_files) \ conduit.desktop.in.in \ COPYING CLEANFILES = conduit.desktop org.conduit.service conduit-0.3.17/data/flickr.png0000644000175000017500000000077511172176633013101 00000000000000PNG  IHDRw=bKGD pHYs  tIME 6)tIDATHNQߝJgPMXy]0q `0P,M@X463ɔ ؍.Lf&Ͻퟷw|QFu]+_$t ϱk|GTF9/NW9$C f,cGca= 2Nr7GQx,GxقV(,r7Wu#b#a QQ=pB_ENJ^>~-J[FJLtfvݬNuPD+Djo|ۊ) f &uJR5Zq? u.X0'㍜o5ڴ9p^ YAh=Nh_.5R^e-ah`hIENDB`conduit-0.3.17/data/evolution-memos.png0000644000175000017500000000170411172176633014762 00000000000000PNG  IHDRw=sRGBbKGD pHYs  tIME!1ׄDIDATHՕOhE?ٙ}oGE'H&P/zk=4BUC<7 RA'!Q iEly465m*yag_>Uzpavv|==9]/L؟NvU!:8>{Vc^wsazR,*Dc֤߼jkoϬR4*]C-|ęx1fA&R9ž m}D( QM[ rSч5+k@D##A5o,ٓ_ZX#[ jOĕA8E:{Ƙ?w%VFxAm >r.z=1w饐թ|A@]N0gs~,3^ Γtpj^ae2c1,v.NLpaqq'7 )BDp,"$=&-{Z59ߠ'Ͽ-ry.kZPSmKe<-Yq8[ Bj*{'PIga, (FM6x'*7x> 06*᫉rN'" \"Z_a3Lٹ|?? ,-8fL m_Xh-Uz}qH&uZ;#XX,O.1p3;AGMLN橵 _V19=!Q&Xi @ E@N='{ 6KoHIENDB`conduit-0.3.17/data/conduit-splash.png0000644000175000017500000005101711172176633014557 00000000000000PNG  IHDR,d< sRGBbKGD pHYs  tIME/! tEXtCommentCreated with The GIMPd%n IDATx$uW_tOXh" 1¶LV? ;dQ"iZJ ,v,۷ڷ\Ȫʪz_=ˈuo޼f=sg[ B&MC|E!MC|U26Z_x!>ď V jvu !>ćQZB"=&;ćG;)B K1m"dlF?(F2Rp_,S&$ΤLN `y|GkI1\oE!Fd1̉y>g]CA &x9\{A ʾC|MmDWgӔ|j~cǏ( tUQDOV"I#ӫ0g>rę3xWHiChbl[i4[Ҭ[kwNoJ9] Y.Ƕԛ5UESTjOy!>ď&DTX!ƶb:z.͵/_bYѴA*G{>{;OS7QH+TUBbGk\.!DɒX4P0 X]m`| w=oHb3N`9R˘°gh+7{gjʝU,0t]8`!!>ćZDHP̤\m4QDu =& ׍'D4[ zZmN{mt MDCbw@!kS= b@(!PB(ʥ.`D[cJj\;JRA9=KUU&' e٤iN0Խ=ć?Xgl]?Dۦi)aFU%%qӹV4LnBb>XT.b2Tz=R$1$AY/!>ćZa/L6 6v K% CT*mt ^ӸQRР$Ɛب&5NkE]v 08uHR)!>ćZދ38}LӌK(a4%}EyXG%i\i A 'H CEL~a"bFi8TBL@WC|] 4zW5HD$4H>}԰ZKNzSɤFiMJ\^ uc|'A;#va{{(4JIޤVkn;cO%P(6(rGklQ*EbΈLX{DyvJ!ь WVNRFqx2.\lҨ5Q1ݕqC|]Ux5`S: 5_B+xɩ[ A1BhAR.ݭjuzQOQA]X֩U4 K T!Cb-N>i LJ0akX=w>qMiPcgK*XR$7x!T]2d~fMt]GBnGk(jEĖz0=!L#BcR!. !j^׳~_m 1z6,ѵ)BA7tGp8C)Ynt_\io^ #NEnҞGi)A!rgT+}=,Wyg{y6%:kRЦ5LbI&FtKu%)ԙC::)aӖ),;?3`8wX: %BL$f~kS3?=jw9J[JdiH?*v@=B令 ذkÒ 7qu+}IxVh6; %'ϔPdrVloAH>Lh~fh h9D:>%c[)j q?<omn%10UkUlݤzT&9,faCG{1b\}Yɝы`S?st[HBTM]q S>j )S$Ӯ|?Th9QaM"v-033E>W<#|6k-Z|~YS9?lB{.az>N4?ming3?)R NiBE8<þe fWWq˫dPM lM $ƶ!2hD") \c31jMjVD|jWQ`OQUAHb"k[QP?^`c6kqlf014h0:xN"k7pg| ޿;T{ d ̩cY Ku&Cunu#>q ==1??oE Q|o6GO_;yklr,l;EtEFr h`Ͼ50n;jM|?HP kSU%IL왡4A<*L;,\r csHE. hÌ@A=iiT8lW|9|"Vw̞><]!)fQ򚉦g(癚Iin4=(`2 j:?['fNGQ?c7Zюg6EZv Q`HѴzDy!ZACҦFI $(Ht KCb&wXĻ>g4L*)C_k|!ӢzQ8։ *YQūn҆ƺ2ػr{.a zÍmV RqFM"/mU{iSc CZ CUCJim!y+M dY2;Hѵd2"O?}Mp;F[=^ _~L6CM =}OL.R;[FmLa1;ۨF'ÐkSkH+?lzxOuM{χ5);NZ]|$&m[8Bra9pHU|mvͬ Ęz0DբiH ^п4ttn 5Qa訪& +BG?]"s[T+1!4\男yYCa[ST2g?|"={]+qwIn\aM't}׹*jd|:~5Z8Wpv"?X)jE2ǟA@߼Lk*NydFPN1uII.D\o ';/W߉6\9Jǒؙ<'.:w^cq5uMKT?b/*~bKdT~6jJ<TCI~{LDp)`{[/voj^_J&J9;]@躆iOyX-׆aMUU qURi4ρc{wA;"t@Vv4W.qpiנSZ'~Jwqͧtn~O؁WfͿEP%lLذ]kEh?SZ۝},Q5vl݈ <v<`{+ӌ돬KX)כݥv(̥0-1`BBFӔ7n@ѡ^}}E8zVw0[UI!h4PD8"≬)UN̥ #E: 4UETtMCu C4 L0t ]G44MESUTUEU{)$NJ*3)L4W|jϟ yK*7j Y Td|w€S~۱hzT})AVBEKu+|O1ͧMnQRTfvVۢ_l$5:^AC?#jv\zB>#2|hZ4%Uk1uEbz= ⰜZEףL AdtQihS1d2-2!y+ tS!m<@JHuny?‹mY*JDB(E\ntb:`qU TcfHރڍWcοǨxDu7Wc$O NDŋd=be)p"N7 SPYy3O­yHQ| y,z0ph\vz /߁2<~ hv1-7 ,|w)dmn|q+VjxXcTmd,+)C4hJqXN"tpݠk_mJyhԸ-FߥRFtHG"E( P2DĥkQat5+U )5 E$j (*߰DWAL$ーSߦܷ)f!󧟠 "b B3#J^Fd%xɟ Z*U YXIퟌwgk7:]`c%|6&G.@җA(ζ1Ƴ 7EbHy{ثػF> XR8c e4 "6wC)O>Wo2fHYj7\h?gu]LPajƤOԿ)zGw#gS kߴl״,psĵg_`zȞ"3?98?$~~& XO.2Io\N$a˟4Z*|SΎܣ[? -üV*]5QlA 9jJkS`AIU nnU CPG_EW ݈6Ð < f=2vtE{,Z:LZoRM)w? qF^5g{LMhCWG' 3dO}gN&k}33Aj=]% hr[﫚c=`=N=0iESp`J!hAh@\IPGϤPBME%]Pv?!a~y.AAT_gO5E{ C{/l- ?m:$F+=.A,I hF)NM'γ/.5BO#lȔ/QȆuU5AF#x0Kp{~0ø_X#Nz iX=3谁}?߭P!EQur^\k )KT ǎ`A~ ]dB%ƺUoL.w{/޻x=\8?[<0m Tv\*ޢ ƙ(j"0J_nbjvxǨB΀ +&;6%mX>*X+jc*6 4-J0V>o$]AyB&`:L! |@AE8PUCDp,CIx~V!;]RT0@J|_3|tH{OVo[skvj6.a'Q]B6Z=7/HJdGy/\Qڠ`-M >ˁ)a!0?ޏz#=w4GZ85'FmBxB4QK3};xC A( ~!xGGSD?HWO#TU%5^k/\*'S+=w+sU3ݶi:`} J5˻"1q6wl<pMuӐFx2kzL<߈|$#X{monjL qi9􅔒LFj y?^m̱оmxn)wU"ð :Kطox~o'MB ;xU4=3؉oUb;bPoɘʁ΄wZ{~kEr0gD)@s ذ_} [ʎ79}T:)|%eY]7Ӱhw"#X&j1$YK3;3A`ƒcqd- !+t:3jbS)iW KZմ||Ϗ+nڴjx~ L fgRRXA\laN-|$ dsD ?YvXCYz{U%S֨@y*mX>ʐg| P{XQZ}f 낄6iTLAr?h`6B =9hqo_!M3iި=An}']J1@"vIOt U3iV7J{,.fj[*4WxcHAl撤swoc/ސybaAȵeS*kC6dJ Di"߫0XWGkZ6:~p)5Ii$x&;O9%Ll]޺K5u1ِZJp em,9-T!:E( 2V(\ba$hae&h7vAJVv]qNcT8w ,+q׾Q\@O﻽йC8|X`7?Qldgc -]ط2^}AME(b6,,#.Jfѵu[=[QbZۘ,~'XB1Z^TTKGk%[!q3]AY L a,DWag/M2TX;d~$F J/Ք#?VB syѬbeXiڍ]kSkq:b֦t╡^I6וmYE7m4n۩wmf{y)*VPTZmig Vċh'>KܡSX:l4WΓ94zfrJBq&̌=Cg-刴ڛфDB٫8-vx `Ngّo P6?+N`l w2'~yuv^sB9r73Qݻq+W}r~s*'O ñzfr5ĥ}s5^:ʃLȿs,rOM[T6 IDAT BN\~&",Pkiة4ǏN9x/߼L2XTM*I.mSn4HPg.tN12.fZ!rE`d' w<(騚04pnc-K(L@j;wEP<a&:!5locu5f1WVdWN~?xa͜b/m_'?.ՇNuڛǶ?@ʛac Uv^xvUZWYx 否<1 L4_mQ&g;?_~I?\R|X,7:Ӥ?X|zɃtJmg. k[Y ՠTP1tŅEP78);a&ml6}[?`zzs.JY ֶv.)՚4:7*X4wO[;1I*`Ӥvv7(;;l0Bc#ȧ4VH0`Fۧp3{w]p4'@)en1@ݨ *Bi&-ξ㯘iӤ/0ptY8fcj7LsxC5O=SH:MKxqɌ)7s?e_}kl?S d|#7Kk{JMQuBwVh&KN}B>KpՑ~Xʞ9;?]&pNG_yQJP *&R C)Z3"SϩYXX !z{xA)5MCU5," CIÍ7JJjDz \:H>c3YP̥.2;5*5nnqsmwwyN ;eq?X䜯qNkN& a}6J<23᡺B(@ :LX) `5&bY7u;lmBQ-u8; ШV2D5, <=j|bk^L贰LOhIl7Sha@imQ/FAfɅt|&^cY")6E{ő/3s4+fh5M%YKxq^ϝ`x/M7[܇{xǸ#X -qΝ=Ts1 wn^ɷZ!{Svb߲t Y\n+SOwG*Ɵ2b-ڥR]Ent R^)u2hZVߔ=3 l40S P6 4aE `a,יi%&f_C5)$Lo+8|?lf C ȂүOݟQ$@e~{O+}zUr9LVcv Fr#@Dv:XVPha!Zdڭ&ũ Stb$*!s3Y]ٹ6ܭAr?!btoa<5Qe's]VWxDG*yu4t? _߄|,_ kLdm>q#62N}fgar(סZH'- (JFVi03_`w0,AϹ?>KyiH#YSc'vre3,^aj: 7mܾ2*nG62=vй}Nu#plnńgG>[C)5S.1 !$emʾڟf _ip 腯M1yY(vfA*%q2tFl71S:C|?XYuzL\Rkʡikk,,19=AЍk7yK(P st&L#_^~R9"%70DaQ cUU@5]K[4] hWҾmwn5{${KVb=(k[,,qqx26j˲c"Ks,Ms7~zX5(^#?!dqN{:(pTMikOv~ƩYRJ+Ln]A7Crλgk Fp3!p;ޞEQC׍ǘGcS"7[ fge{k2JIl,\N=uFɧ^xo|[dlwo'z ͱb 2cd IIs}a g7v,\ 2bK0O=MWܙy%PqOSbfnl.o+<BRm{qa'S-İLT͠Y$♓vpV1f'IOӒ v*G]G vPdPF9ćmj3]mg2cI("CzOVDŽ%x5覊ݹyzDC|?8ʇISiݒ 4Oj*o\gyΞq_3z>#>Ǐ~c48ySSTU3~ںɧ?)[UEըF"m45@U \IhI9&5@\wb|ЉF"u۝:sXG.hsGkuB:ԧ>xy.\8?iS Hpp_σ8~ 岜={fG_q:Nw;xa(a@RЃC&B:5V~6 NL.7:g4^Saְ}k™:N`eDc#"!yfo2g?ܞ? f?[C~(?`6-_W?P_Tmey}|::[7+44Ǚ,NA1 ,}6>} ST8S*NywNα;{մB`ro'Ȟx&џmϣ&R R|'EKG 5BÅ>L"6o&Yga=vy39mqquRʼnǹN `$aS{`Lz%j7D(dl^|eVO6FQWFf=)oAfI\Ú9|>TKh>V-(Fj7*Zip2i13=v77m"!+,gveD"Hh((M0 M!k@p-TUG"8vEpA{4^ Z5-@MR{l9_fzXywoVXz3TMdڟ1ws0rm}%>_(*\.hvƵ1sLk/Svݤw9oSCݗPmO,E,;Ş?GNcbe(]:٥'ɥm޽&K_trEMUa{NYݗ*IsJ ˠv(e:nd#AbfomhS8:ST2%obaTmFLw7 D\"qxq&ѱVJ;CGf;b C4 Ȱv5@ZaAV:,+{H)q\kcL.aϟc?fb͜$s)cy3G~TN<"MF2xz;d?KT-_=W'~H-"Ud"Mo_%w ',_}~kr|75՛?-_4g >i ^ IQ|(ѳTG7|gG/!;5R>M[Ϥn*AKOwje8h{/[way>&P"LGX'x2iVB?i4*wQ4=q/lW 6?hKg^ӳ.ƷxqDIB"eSs#++SlQm6,vslZ~:;t/cZ(FQyJhV(40E-0z ![Jb7-.ɄGgns݄hO33 ۶)Jl1MO-f3l[z 3sI:9:uJUct:u5a7a'S1^ڋ&3S#V<Ϯ< 8_gwwuZҿ{+س'K~tsr g EUc=0aUG1NiqoFd(hc7F(ZRhm݌f)h,CSi;. }ϑ>r1nݻ|#hבR,a8y]֕;XG9&3i=}<_VװfŮEv.|_T~Y` @QXòmyΜ9É'P(kP(f3jen7w;}'|zu\CY H=Loc/v\^mv,]6)١Ff<ZNܞi;E?GQ"L&Mhl F1C5P!nO$S\?m?A>msʑ;~gkgE O2Ūe4.1zf$ʅcj*vj}d~j]뮖VϯgOx5~P>Α^Dt\/b6o\kM4T{o*:sU۷?4f;q|>3=D[1h='E7hՓ>}g}g}G#r3eio/'plC*ΜBU4oLO'dg2ݒ†"LfDr6*8#lbH͟Eٔ~07@n?J`MUu"t[lo,텵u]跗h{w~5BŢucyTNwwJ}gyȥSe+qyx5#;9$7u}uxJϰz=ZknGk~~Gu[ZOٔ'#OHc6ny-^%w"^O0)莧.bM`3]G.=y8k19q#ٽK?iB(<%0V6G1gSeGβ&5*ի,< S3T&Z(Z}1>0{͹OIDnrWoQXoڨ RA+W2ן;B}<;?sǟA6hlf*^@i;fT?mS4F';X]u=./2qooU[YDpj,>NXoޝWYaϟoB$1t {MR#8;>\_%{Y4tڭ&>KgpvgݟyVvhF1YJۣ7s7^%p.n/tʵd>woҪl3m5"vF.GCF22tJ]}#537;"j}OgeټI&affMpqp񻪬L~X WLobZ[iP,,05yT*hc)RV.P1=y M5T)WCI$7 ߤʣe&Ii;k#S_H{f0t:9>S Aj a!:e=CI-i.c6F%FKI &OFX!9(B$EQݹrNNOE$\1SSU.1lNIDAT3Ty7!xxbXld_~xov( TA3l٬l}Pa,ruk 3Dԭ!ؾjGz!I4m/} oY3=ʍׯ/bXX,Ȳz7y.N[\2K-ِR!Q)JiH0]?MG߷}K]c{ EX>}_{R X[Qn&E]߉xNodCҴ' 9y1Z ri]Gȗ?x-;.c2};4f*l$:r^k|+b+LB{)-Z[0y6,@h;EILj"+~\}dvfMv ္oaYy$8?+|qQӗyhk:ϐTT >[[[uMUUu.?xFMOo:'+.|X‡¸{܉)Izϲ+?JO: q[|HSݻ7mb=~>&.f#%>6x 1\ -jԺ S:JYx>MF(g,sHӄ|!B*fTVI䱘ٚH4LJ)ROPN;Y~NjBHV`# lXҡVǺx*=-c|=D :-NCWQ#<ϣ'\rߟ# >6` '1 I0_B#b6<|'%4joF9Ꙥ ?&Ȳ>mi[Wh }ߓY)Z*oeqiz/2c̰Ú&߾ý{5{Xf B(E:W=B*ЊY:eUn'iM|5o;k<Ȼ|Õ$`H,$)ҵ5Ɛ_A]n2_O=?s/QO~6UU#DJ9ƈ?JJ"uvyv;㬜s35~1]^{,\ ]+$ gڞkϣ̠ $Q6f0 (3$ Y-f$fa`4X{fIH IQTr}#_QW%hAh5) $}m4ewww0XO_Cg,߽{w}w`%:p.µ+>nǬ-M{~ͺ>;;;g!cܺu 5<`w˾so3ww_AI9p,_؆AiMgj&pwtd: I %uF40 ˌkCd$ }2/@j,pB8dh֔-%$j)$$kBӁ=IYĽs';whۃeY#1G^ZgYYn)aQ!QF!q;wuh.b3PUոey޲,>?ygaae>S%ł(w0$p7b֚j$p١xq] m&Zâo֝g-H%f)uKvT#I)ni,i+`*iڎPZ1_愾GhO+`9vO)>zU%V@i _KK!軞O?_-$ѣGܿOSH};jY!d#v׶aG}CTk|f0aZkG^}US݈.mh/ɇ~8.8#rnkfvU֎{cTzkes-1][j.qbmR#+J CxT^Jl[n"+Hc_3QơmDݿg&TuV гdU9}{p7=oQlI=5/ܼy$~.+uӱ󄁳.[x?Xaqrn#V3vC=U>۷oa>VUha}Dfr%]BYF&yC@3bRHzsrt}?[iqnOZ+ΕK)ʚ7]m Mס#ytZ*h;KuZ4AcןH MB>~4 ȋ cZ;"OPň}=S,sqK|3>t1i=ϭi֚R}z . ^;=AkfZ_bIy'bތ6CrCxY{ !.Femx>cL 4UӍ|OY5nB:SfQ@V48dI+pUV!&$bkNR$$+ʁ]>Y!Bb}(J!BJKEV+tZUI&(CTӎJ)J -U5UuzRk!3okQV_qP< J]pCnV4]?yNY}MpxxMA9#s+Z9?IBVyI2+lPX,yXv E KK"6-o)+!Rڞ;w?eu5V)z)#&oZ-Op]=.빁"VQeIYO:V┥|T+Xጄ]X"+r߽R!VUX!U@Y90E30KcV=i;,! } F4oVC^FTԭÇܽ{TyH' L9]ێdǓGYxmi}?Z]*5(+W;1Yչ+SsZyq4uvO Ϝr y7x/+KZ,j0_^>^豟X4$Ǽ,2 I3/+AZ0`^CgQA̫@H$KjQ^<)FJRkaz,g+/Q ˄5O}Zn,U*  `z&q2+$ '%FNNUY|`Ddel,[T"d:F<<y7x/'ֳ4f*Fĵ%}v,P>IbU)4 XrT5L*G Bi*a2Pa+gxy7x/?|IENDB`conduit-0.3.17/data/shutterfly.png0000644000175000017500000000275611172176633014041 00000000000000PNG  IHDR szzsRGBbKGDC pHYs  tIME 65nIDATXݗkle}u[pݲ1M$D0ש$  K~11jhP\4*01#CXB℠ t e].]}?uk7'99 kqRJs з%8p|2~ϒ "VҾ% L{rxO]SJ)ZMB7\5xD@sm!"mY{VWWֳF;Ҷ1]Z%KMoAh~ȗJ20Tdpc Fss)KOv">xyjo(5sFŨe͇3Qh2{. Ƽ\5H}DH8Kihq*9 BJ"ӂ 9#xf oe~cܴ_{_! cY߱9AXWqחc|XD,[ѥ`=UoJiсd[;Iv.#wb ܭj|}Nuҍ|l5B=mhnh jA(jF\fXGk'~jdЯDQ,8{n\TB–)];ܶj"%wHBҍC8j}԰LvI껙BJD=B!uL4]f|υD{rY9߱UT}6- d}ga=z3<ٽ=q9an.>KxzްN_$umś*jj޷i< 0V;-Vagv^d" Yh_rlq`cFQ/Tr[aX\Գ?pjYd_ @]9٠:o2e+^ýs]H4|jp'Y,ktV7TR_:\@pYaC?΄Fm~|qd:nH+ ^9fXu+Tdxxi<5+֤AXS5Db}(7]H؊f䂓{Vj%i r3VT~vMw~@f#2]e>8ߴTnn+m;.<0:>PQk>@kFmB^iJM3G)ꏢX?x4タ36ZAfW)yU PDvgՑc_?+Ucc)]K*f @#uًNV>E޹Y)d9hV J@ Jt٥+jpk7wQWgZ/v\| jIiLIENDB`conduit-0.3.17/data/facebook.png0000644000175000017500000000104411172176633013366 00000000000000PNG  IHDRw=bKGD pHYs  tIME ,8 4IDATHǽV=HBQ=Wd)AMMT8DCnTKSKK66DK-Ac.-BC̴6O_Owι9߻\Cj!PX)9 VlY!+C4`( ( ӨH,A0$mfO9/uB~I#FnUvSZ Ki^]@X=(I E`Zf%ᒢzI7o'GUH``TV K01u˛6~|hK{܍oabgTC1`)##;?O>f{O߿?y;6=l?ʈ30s@SǏ9߼9 L-ׯ Eԅ9?}Js0PΈFRoiR~^Ne{#9ƚo?~~nD *zMIQFx0F;cŝf2g8rm[aRFFa^IbovMAы4^`z>vV!o30112S/;7{Oa@y!Ǐ=>}V˿_X\{f/`iKeD~"\.%eQ_{J4IENDB`conduit-0.3.17/data/icons/hicolor/16x16/status/conduit-progress-7.png0000644000175000017500000000137511172176633022161 00000000000000PNG  IHDRasBIT|d pHYs|4ktEXtSoftwarewww.inkscape.org<zIDAT8]Ha}̬:3A?R^E?$HP]ԅ QWERAEaնQ[atiXj*j%)83;~])*A99 =EU>sV۝#gq:8]i_ke1ӈa BzD,uݙ+Vzׂ>ض*@4UZK r0ig,,v\0 00.^F!N%`P|eC^T=S=(H,FW`I5Kkib v<N촦 m"t~U]u:3UV;jz%XRQh^װك0Bި IENDB`conduit-0.3.17/data/icons/hicolor/16x16/status/conduit-sink.png0000644000175000017500000000111111172176633021101 00000000000000PNG  IHDRasBIT|d pHYs|4ktEXtSoftwarewww.inkscape.org<IDAT8OkaM&ʶ%)&'E @ګկPŋb'AkACE#bmtIӚ쿼X3hُOoRIp+֒4]*eb^~م8zXFungLG}H&m ͖lM-^lUplԩ=岅N`!g/ 266|r'{(VG(V8'mft[rcV_ }>/=sp 0V1bɋs~[HM7Vz X7D+mg}]j@ңno[(m|oܗXŦ(mɡ>v7> FD366Z;1d `14z8VIENDB`conduit-0.3.17/data/icons/hicolor/16x16/status/conduit-progress-3.png0000644000175000017500000000134211172176633022147 00000000000000PNG  IHDRasBIT|d pHYs|4ktEXtSoftwarewww.inkscape.org<_IDAT8SKLQoOg  %6qaĘƈ.0 MԅqBqCtS108PiJg湑m]~N=^DZS7łh ^66+) 7éյU:`QUUCX'u;~ps86?n$?r 'QLm59+IBHچ,ϑDQk*A[*u;9:` BYYȵCs4$=OYX 񉾾%=,V2jvBu`ٻK\<_-r\Cӕzpr<<_( _>IENDB`conduit-0.3.17/data/icons/hicolor/16x16/status/Makefile.am0000644000175000017500000000071411172176633020030 00000000000000themedir = $(datadir)/icons/hicolor size = 16x16 context = status iconsdir = $(themedir)/$(size)/$(context) icons_DATA = \ conduit-progress-1.png \ conduit-progress-2.png \ conduit-progress-3.png \ conduit-progress-4.png \ conduit-progress-5.png \ conduit-progress-6.png \ conduit-progress-7.png \ conduit-progress-8.png \ conduit-sink.png \ conduit-source.png \ conduit-twoway.png noinst_DATA = EXTRA_DIST = \ $(icons_DATA) \ $(noinst_DATA) conduit-0.3.17/data/icons/hicolor/16x16/status/conduit-progress-8.png0000644000175000017500000000135311172176633022156 00000000000000PNG  IHDRasBIT|d pHYs|4ktEXtSoftwarewww.inkscape.org<hIDAT8[HSqsqdzs\͝9EgAtBԃE˔-z—./>ݑ R*$.Oڅgmnkg[ζs)Tˇ/ @,m[側`Yz}+E Q9IžbU ,$+xs}MuzZ` L>`44DQQNA0{Jx_Uug %=d۹MV& NqYF,r9V+9h`--ITJYuN|~7۟r$$ .ظn&r9șgW}G;uh3Iaɢ-TYIӷ495 08z'u݄='DZTUvP$s-|'i鄪a5X8 y1p$[0\{{gf(.ZLwkZH]_HnhY1DIp,j\@ 'v7J]oNz$礽 li R2pM#NnoyZizBm1W5X8ORv߬IENDB`conduit-0.3.17/data/icons/hicolor/16x16/status/conduit-progress-2.png0000644000175000017500000000141111172176633022143 00000000000000PNG  IHDRasBIT|d pHYs|4ktEXtSoftwarewww.inkscape.org<IDAT8R_HSq>p?65-X!*уF%=*ih ZA MƚsN!>ss>c Sd2`/7Rq6>R+#ܚ˷4f^h7깿 leDB̒"Z :?7|cO Bfl[dc͵).#*^Lmcc ]$NTU9FuS.v/f6$_*h jE~QRYڞ]*N .7&K7Ruljj~?X 5hp1hc1 ï-Ǭv_/FW4]nLjqs]jV7Z\YYY FG CQ(Bcnlv!taMaL֚kFmߵ[``9Y7юB()$B;==3s>iou=IENDB`conduit-0.3.17/data/icons/hicolor/16x16/status/conduit-source.png0000644000175000017500000000112211172176633021437 00000000000000PNG  IHDRasBIT|d pHYs|4ktEXtSoftwarewww.inkscape.org<IDAT8MHTQyw73g0P@Q2(mmKUFZl@Hh֢-RE5ZAkʏq>}\Eٲ {;Qo*s}fg@s׀Z<𨮺<HIL!07_ӣCtحW]!.mjaJ#y'}g@Adz ^T?}*[|K˵TBoMv 7(or6NI7^?XYvR~8Yiz>#p]1^VT>+TsTy^Qᑷ? |r=DHJ "XKG413A{x57rVeE!p, ,K) sH GSCSy|-iצ_ЎIENDB`conduit-0.3.17/data/icons/hicolor/16x16/status/conduit-progress-6.png0000644000175000017500000000135411172176633022155 00000000000000PNG  IHDRasBIT|d pHYs|4ktEXtSoftwarewww.inkscape.org<iIDAT8SKHTa>ǽq3$.mHÂH(ڴlТ趨m,H[d$@iN:yucQJ!<9Dm0x0=aB:!ʊ,O]B?Bݕ:!:i2@fdi~$K33&҄6%X^~f뽽1_dUkQִJtEYSӀWB/~x;1ޔxdenAFVGHn Ƈ*ZZs.W,Ȳ,=Ъ(M⼎沀vbY|_&/_.|l H,[%A]W5U 4m4*j)[2;etχwe4lfB1!o3%`}Maa1( U& F'gBD`^8jk92291- vo$(jIENDB`conduit-0.3.17/data/icons/hicolor/16x16/status/conduit-twoway.png0000644000175000017500000000154011172176633021475 00000000000000PNG  IHDRasBIT|d pHYs|4ktEXtSoftwarewww.inkscape.org<IDAT8}mHSawwwa2^ , Q_>Aѧ>EQ!;KIAeI _9yݻmE?\"rr{~dxMd[fhw4ϝ[Vc-D\Κڊ:{o];@a~`$$/˷MQKx6j7S H@v %3VJ" M׮~ʫw޿Fe"s"2m?eQr(c-3;ree&}N-e874(doA!{$Iemn>"I3N͡ݶ [ # }<E-bY&} -gsUz[镤 ^-J@)**\ ->Gl]`ٶtJ(JRb.oxjkpijN"R ::v' L)a{O rvav>0H{H?Av*IENDB`conduit-0.3.17/data/icons/hicolor/16x16/status/Makefile.in0000644000175000017500000003101211326116730020025 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = data/icons/hicolor/16x16/status DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(iconsdir)" DATA = $(icons_DATA) $(noinst_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ themedir = $(datadir)/icons/hicolor size = 16x16 context = status iconsdir = $(themedir)/$(size)/$(context) icons_DATA = \ conduit-progress-1.png \ conduit-progress-2.png \ conduit-progress-3.png \ conduit-progress-4.png \ conduit-progress-5.png \ conduit-progress-6.png \ conduit-progress-7.png \ conduit-progress-8.png \ conduit-sink.png \ conduit-source.png \ conduit-twoway.png noinst_DATA = EXTRA_DIST = \ $(icons_DATA) \ $(noinst_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/icons/hicolor/16x16/status/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/icons/hicolor/16x16/status/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconsDATA: $(icons_DATA) @$(NORMAL_INSTALL) test -z "$(iconsdir)" || $(MKDIR_P) "$(DESTDIR)$(iconsdir)" @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iconsdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(iconsdir)" || exit $$?; \ done uninstall-iconsDATA: @$(NORMAL_UNINSTALL) @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(iconsdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(iconsdir)" && rm -f $$files tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(iconsdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconsDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconsDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-iconsDATA install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-iconsDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/data/icons/hicolor/16x16/status/conduit-progress-1.png0000644000175000017500000000137111172176633022147 00000000000000PNG  IHDRasBIT|d pHYs|4ktEXtSoftwarewww.inkscape.org<vIDAT8œ_HSqǿ{7mnn霣 ŧ"IFXd(Ȟыe SHTƆ;q7_/Csk fM,' ykK॔٥(M]V/upj mF}%,K`R@5svnX2|8%/6f l}Pֲ}d$oa|^QKNC᥈j7,TnmTKج/\'U]NthR^xC-*;?ݱue=C09ց}q 7:[W+S0i2à Fl3::z,'& Hx() 9ڀ0 qf"ҕd,׮iֆҪҝ} |(uË́ݺ|a``YC/fYo9PI4t/TFQ&r/=sp 0V1bɋs~[HM7Vz X7D+mg}]j@ңno[(m|oܗXŦ(mɡ>v7> FD366Z;1d `14z8VIENDB`conduit-0.3.17/data/icons/hicolor/16x16/hildon/Makefile.am0000644000175000017500000000037211172176633017762 00000000000000themedir = $(datadir)/icons/hicolor size = 16x16 context = apps iconsdir = $(themedir)/$(size)/$(context) icons_DATA = \ conduit-sink.png \ conduit-source.png \ conduit-twoway.png noinst_DATA = EXTRA_DIST = \ $(icons_DATA) \ $(noinst_DATA) conduit-0.3.17/data/icons/hicolor/16x16/hildon/conduit-source.png0000644000175000017500000000112211172176633021371 00000000000000PNG  IHDRasBIT|d pHYs|4ktEXtSoftwarewww.inkscape.org<IDAT8MHTQyw73g0P@Q2(mmKUFZl@Hh֢-RE5ZAkʏq>}\Eٲ {;Qo*s}fg@s׀Z<𨮺<HIL!07_ӣCtحW]!.mjaJ#y'}g@Adz ^T?}*[|K˵TBoMv 7(or6NI7^?XYvR~8Yiz>#p]1^VT>+TsTy^Qᑷ? |r=DHJ "XKG413A{x57rVeE!p, ,K) sH GSCSy|-iצ_ЎIENDB`conduit-0.3.17/data/icons/hicolor/16x16/hildon/conduit-twoway.png0000644000175000017500000000154011172176633021427 00000000000000PNG  IHDRasBIT|d pHYs|4ktEXtSoftwarewww.inkscape.org<IDAT8}mHSawwwa2^ , Q_>Aѧ>EQ!;KIAeI _9yݻmE?\"rr{~dxMd[fhw4ϝ[Vc-D\Κڊ:{o];@a~`$$/˷MQKx6j7S H@v %3VJ" M׮~ʫw޿Fe"s"2m?eQr(c-?R@$5{d>_sٓ؛@w_>=:4 ( W.  U2eYʼn`lIgvB j~@@p+&p:ņō6!gyqGop[g]GXa+s3\ֲ/~G.C{Y5?T.]prqnvlm۬zu۶xa`rZbP(d, x0p\x<"k:Ze$4S흭]R@_6'  h I m.㨨%h@ @(bbbu?ןއGcs'T oO4 `8-6[9 "V*~XYYԋp8Z݄Mq8F4ZӄQBH]I$$IGj CIENDB`conduit-0.3.17/data/icons/hicolor/16x16/apps/Makefile.in0000644000175000017500000003040111326116730017446 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = data/icons/hicolor/16x16/apps DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(iconsdir)" DATA = $(icons_DATA) $(noinst_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ themedir = $(datadir)/icons/hicolor size = 16x16 context = apps iconsdir = $(themedir)/$(size)/$(context) icons_DATA = \ conduit.png noinst_DATA = EXTRA_DIST = \ $(icons_DATA) \ $(noinst_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/icons/hicolor/16x16/apps/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/icons/hicolor/16x16/apps/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconsDATA: $(icons_DATA) @$(NORMAL_INSTALL) test -z "$(iconsdir)" || $(MKDIR_P) "$(DESTDIR)$(iconsdir)" @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iconsdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(iconsdir)" || exit $$?; \ done uninstall-iconsDATA: @$(NORMAL_UNINSTALL) @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(iconsdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(iconsdir)" && rm -f $$files tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(iconsdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconsDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconsDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-iconsDATA install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-iconsDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/data/icons/hicolor/16x16/actions/0000777000175000017500000000000011326117105016161 500000000000000conduit-0.3.17/data/icons/hicolor/16x16/actions/conduit-conflict-delete.png0000644000175000017500000000067111172176633023325 00000000000000PNG  IHDR7bKGD̿ pHYs  tIME+)82tEXtCommentid logow/IDAT(υ.CaC[4B‚Mb徂"]Hx/аHÀ70fD M$TP x~'sa!i5 a =,9Hh&yQt!׸foT$)4&Tk2I>٢0& aR{ϚѯsNIvϔm՛KyCAijn+?  n!3\ Eho3(G>m6,G]nf7pf`H-3 [wE,G_v[ڶ1IENDB`conduit-0.3.17/data/icons/hicolor/16x16/actions/conduit-conflict-right.png0000644000175000017500000000063411172176633023177 00000000000000PNG  IHDR7bKGD̿ pHYs  tIME*'*$t-IDAT(uKBa5? 0h Zm R(Z%.8hTCPX-F#H#$v-o_tyy ˧zailʿ+u_nb KTܿ|du*zfC`މސDSk%[ c2XLPܓv=nᡐ@"LҴsMC Fxq~m_C[qЌt,a A NkE@\$E]4UL3a(|O0ؖ^J)=*їpz*_w?h71IENDB`conduit-0.3.17/data/icons/hicolor/16x16/actions/Makefile.am0000644000175000017500000000052011172176633020140 00000000000000themedir = $(datadir)/icons/hicolor size = 16x16 context = actions iconsdir = $(themedir)/$(size)/$(context) icons_DATA = \ conduit-conflict-delete.png \ conduit-conflict-right.png \ conduit-conflict-left.png \ conduit-conflict-skip.png \ conduit-conflict-ask.png noinst_DATA = EXTRA_DIST = \ $(icons_DATA) \ $(noinst_DATA) conduit-0.3.17/data/icons/hicolor/16x16/actions/conduit-conflict-skip.png0000644000175000017500000000100211172176633023016 00000000000000PNG  IHDR7sRGBbKGD̿ pHYs  tIME IDAT(MK[aI1F:$RǠ!lquBNKJ.A#%VEBpk7zE1ئ{Og}~ &fV7jEY7  .65lP0a6st`͇Y~+.u\-DҜҋw>64BY(Qް. s[ͽ62H.N@+7 1K-|=BEcB< 2"1n( gR`PP6])0B,ЭZO)︠G,2h:tenVT3U@ sIӚ$m悆}8w:Vfܞ88G{.6oW<sӳMIENDB`conduit-0.3.17/data/icons/hicolor/16x16/actions/conduit-conflict-ask.png0000644000175000017500000000101211172176633022627 00000000000000PNG  IHDR7bKGD̿ pHYs  tIME+ JuIDAT(=AHa|^ IVqa@ ">cBg408>Tu0z"EYGkd㝛1,>x۪&#n8'8thIJ|w<M}ٽ>?ˁnSLoДW;%&IENDB`conduit-0.3.17/data/icons/hicolor/16x16/actions/conduit-conflict-left.png0000644000175000017500000000063011172176633023010 00000000000000PNG  IHDR7bKGD̿ pHYs  tIME* S4)IDAT(}KBq?OKCPV -&T48(<ȿ-7S{SZb$P>k虾n g|=ʬ_bJtm*ڳkcJpNKhfĝ/l'2Dz  Vr3g:D" J򨐘4;Cʧ;yqb1PIEܩB)hqO%gsv1?¨'͋m"Zm}~a32 IENDB`conduit-0.3.17/data/icons/hicolor/16x16/actions/Makefile.in0000644000175000017500000003062111326116730020147 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = data/icons/hicolor/16x16/actions DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(iconsdir)" DATA = $(icons_DATA) $(noinst_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ themedir = $(datadir)/icons/hicolor size = 16x16 context = actions iconsdir = $(themedir)/$(size)/$(context) icons_DATA = \ conduit-conflict-delete.png \ conduit-conflict-right.png \ conduit-conflict-left.png \ conduit-conflict-skip.png \ conduit-conflict-ask.png noinst_DATA = EXTRA_DIST = \ $(icons_DATA) \ $(noinst_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/icons/hicolor/16x16/actions/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/icons/hicolor/16x16/actions/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconsDATA: $(icons_DATA) @$(NORMAL_INSTALL) test -z "$(iconsdir)" || $(MKDIR_P) "$(DESTDIR)$(iconsdir)" @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iconsdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(iconsdir)" || exit $$?; \ done uninstall-iconsDATA: @$(NORMAL_UNINSTALL) @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(iconsdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(iconsdir)" && rm -f $$files tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(iconsdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconsDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconsDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-iconsDATA install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-iconsDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/data/icons/hicolor/16x16/Makefile.in0000644000175000017500000004232411326116730016512 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = data/icons/hicolor/16x16 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = actions apps hildon status all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/icons/hicolor/16x16/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/icons/hicolor/16x16/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/data/icons/hicolor/22x22/0000777000175000017500000000000011326117105014513 500000000000000conduit-0.3.17/data/icons/hicolor/22x22/Makefile.am0000644000175000017500000000001711172176633016473 00000000000000SUBDIRS = apps conduit-0.3.17/data/icons/hicolor/22x22/apps/0000777000175000017500000000000011326117105015456 500000000000000conduit-0.3.17/data/icons/hicolor/22x22/apps/Makefile.am0000644000175000017500000000031111172176633017433 00000000000000themedir = $(datadir)/icons/hicolor size = 22x22 context = apps iconsdir = $(themedir)/$(size)/$(context) icons_DATA = \ conduit.png noinst_DATA = EXTRA_DIST = \ $(icons_DATA) \ $(noinst_DATA) conduit-0.3.17/data/icons/hicolor/22x22/apps/conduit.png0000644000175000017500000000174411172176633017565 00000000000000PNG  IHDRĴl;sRGBbKGD pHYs  tIME  ""욦tEXtCommentCreated with GIMPW?IDAT8˵_h[U?3uݲlD\1Hd+vI bM*ؕ*'Q)_e6$%M]vެMmC4p9s#&&Un~訍W^~@-̍-m?lv\\{ yFHRum(d"DmD"hö +J dC?[}TZI옻 8VTm3Ov#RԂ9.)m;, "6\*&tbg}Ts;o\YwC9+GW.ǽokd)V^Dg2~#7ЋΓtt#uVu*R h+C$ܢlȒn9uaZ֮>mJ9|2d.~ "fIO⦂SZVY*z50ŗ|0( 8LgIENDB`conduit-0.3.17/data/icons/hicolor/22x22/apps/Makefile.in0000644000175000017500000003040111326116730017440 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = data/icons/hicolor/22x22/apps DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(iconsdir)" DATA = $(icons_DATA) $(noinst_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ themedir = $(datadir)/icons/hicolor size = 22x22 context = apps iconsdir = $(themedir)/$(size)/$(context) icons_DATA = \ conduit.png noinst_DATA = EXTRA_DIST = \ $(icons_DATA) \ $(noinst_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/icons/hicolor/22x22/apps/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/icons/hicolor/22x22/apps/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconsDATA: $(icons_DATA) @$(NORMAL_INSTALL) test -z "$(iconsdir)" || $(MKDIR_P) "$(DESTDIR)$(iconsdir)" @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iconsdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(iconsdir)" || exit $$?; \ done uninstall-iconsDATA: @$(NORMAL_UNINSTALL) @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(iconsdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(iconsdir)" && rm -f $$files tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(iconsdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconsDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconsDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-iconsDATA install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-iconsDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/data/icons/hicolor/22x22/Makefile.in0000644000175000017500000004227611326116730016512 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = data/icons/hicolor/22x22 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = apps all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/icons/hicolor/22x22/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/icons/hicolor/22x22/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/data/icons/hicolor/Makefile.am0000644000175000017500000000006711172176633015721 00000000000000SUBDIRS = 16x16 22x22 24x24 26x26 32x32 48x48 scalable conduit-0.3.17/data/icons/hicolor/48x48/0000777000175000017500000000000011326117106014534 500000000000000conduit-0.3.17/data/icons/hicolor/48x48/Makefile.am0000644000175000017500000000001711172176633016513 00000000000000SUBDIRS = apps conduit-0.3.17/data/icons/hicolor/48x48/apps/0000777000175000017500000000000011326117106015477 500000000000000conduit-0.3.17/data/icons/hicolor/48x48/apps/Makefile.am0000644000175000017500000000031111172176633017453 00000000000000themedir = $(datadir)/icons/hicolor size = 48x48 context = apps iconsdir = $(themedir)/$(size)/$(context) icons_DATA = \ conduit.png noinst_DATA = EXTRA_DIST = \ $(icons_DATA) \ $(noinst_DATA) conduit-0.3.17/data/icons/hicolor/48x48/apps/conduit.png0000644000175000017500000000632111172176633017601 00000000000000PNG  IHDR00WsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< NIDAThk]u<﹏y03{ @)b.T*UBU IBBjR(Tj*kZۀ1j !3{ýwܩM)K:{Q"YT>!Q'>jG-'x8&Dc̜nz<oݺ_PI͖ܳؠ>Tq7&&&vv&cgqK_Ag "fyc ""rc109/B{GkiC@D H1hi4 {{ TL5Ԥ3i Eǹ_:kq}Mߑep+m4Fx,.K S} lۦW\w[[G岙$NTujC{[Yd2C& y0f|DB!⊾rY<Ϸ ( zkNZtJn]mLo~lOOGcLglc4ZHIq\KQdGF)=ɹscT* E!9I4%ІF 39_񄖌G&eQ5_8c)owCgAhRFk!5Hs_.WRP \G)(,K!b si:-G]sU'&f38MZAg+:F QS@JIщ!qǚ"rR +P BD뻂Rt~6e5*ͤI>FSvl$ e7.H@)Y>r!N@Z05Uf,k}(P(Ѹ۔.A5aa!Iь`tPJ2y#cSQ(&.\M68ͧO.<ŴT#D-0RaSV1$`r]bJFJպa_/"mp\ct|,GoȪBDF(K jJ?( In;!"`e;0uI~'l 6Be>I"*>W^o])mGطnydzQsFGG ӧOG0V1^NI撼'"ZʕK#c)F>i7DhYIpΎ>{Ӫ?M7ƽ?kJG(A8Zkgf U:YMc6k׮4nt6 7 _8 JcYP A:K| =@Y1Sӫ5t P*>vl{!0[TmldׯITYg KhJI1P>ٳ>g/{F]ݚ(~OUmZ޽C~DibbW_ܛC`˖-wR8N$np2lmLCZVDk* #Ʊ3y\yT*<0k>9s ^aYƬmԟMwDiαM:Fヤ8ӎRHR"foƍWA۷o姞lj(ϛb:,t~ry^K)u$H䋫V"&GثwO!aۃ۱s]\}yw7?,e[:c*F>"F@,(ƪի2)p/3>|`ldJlR~@[k&jo޼{wuܷʓNJSa` imP(is׻%=ήNDMZHZG0Vp?Xmn?y饗m0ZG?~7=?MZ$hpѲ3m8Ii2'OW%l~sQK,Uv\$w溡t]$J@r9zzDTITЋ{x76/^ܟ 2=tpfGS~Ԝ}/_m Ds̮%lPiH=%Jنk4DkKd!ۿ' ?͠7CЌRDXp@ݷ7~uFoT[[[Y'VT*a6tÇfۛ ޽ج|qOy+W$* N\pkf'@Y388Hy~r^288HX$jFmP~ܽ,J!B)խOJR1Ɵ(RoR)vmxu#lذ5R 6Ɠk="rj b (\.s 9vȑ_y9ֿc L[RDزe K,P(ЌlP`ǎ\f;QJzjn֦u2 qsNΝ;eY,zbɒ%:[nrJa.Ĩ>h˲exWc-/"ZkKcJ/~01p ۷+V011A*֭[7ae唈}!u?oYg`Wkܽ{tR-Zę3gzɓlڴi|oRT_vtt!O000p̶cj垞wyvc\0 ja^xY5DdmYVىn?HȼgׅBC}/qhv{w>tb(pVD4,l t-@ P@(%{&}VL.3F1` &UC| KF(_,&mPO~IENDB`conduit-0.3.17/data/icons/hicolor/48x48/apps/Makefile.in0000644000175000017500000003040111326116731017461 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = data/icons/hicolor/48x48/apps DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(iconsdir)" DATA = $(icons_DATA) $(noinst_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ themedir = $(datadir)/icons/hicolor size = 48x48 context = apps iconsdir = $(themedir)/$(size)/$(context) icons_DATA = \ conduit.png noinst_DATA = EXTRA_DIST = \ $(icons_DATA) \ $(noinst_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/icons/hicolor/48x48/apps/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/icons/hicolor/48x48/apps/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconsDATA: $(icons_DATA) @$(NORMAL_INSTALL) test -z "$(iconsdir)" || $(MKDIR_P) "$(DESTDIR)$(iconsdir)" @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iconsdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(iconsdir)" || exit $$?; \ done uninstall-iconsDATA: @$(NORMAL_UNINSTALL) @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(iconsdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(iconsdir)" && rm -f $$files tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(iconsdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconsDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconsDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-iconsDATA install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-iconsDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/data/icons/hicolor/48x48/Makefile.in0000644000175000017500000004227611326116731016533 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = data/icons/hicolor/48x48 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = apps all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/icons/hicolor/48x48/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/icons/hicolor/48x48/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/data/icons/hicolor/scalable/0000777000175000017500000000000011326117106015503 500000000000000conduit-0.3.17/data/icons/hicolor/scalable/Makefile.am0000644000175000017500000000001711172176633017462 00000000000000SUBDIRS = apps conduit-0.3.17/data/icons/hicolor/scalable/apps/0000777000175000017500000000000011326117106016446 500000000000000conduit-0.3.17/data/icons/hicolor/scalable/apps/Makefile.am0000644000175000017500000000031411172176633020425 00000000000000themedir = $(datadir)/icons/hicolor size = scalable context = apps iconsdir = $(themedir)/$(size)/$(context) icons_DATA = \ conduit.svg noinst_DATA = EXTRA_DIST = \ $(icons_DATA) \ $(noinst_DATA) conduit-0.3.17/data/icons/hicolor/scalable/apps/conduit.svg0000644000175000017500000020441611172176633020570 00000000000000 image/svg+xml Folder Icon Jakub Steiner http://jimmac.musichall.cz folder directory Andreas Nilsson conduit-0.3.17/data/icons/hicolor/scalable/apps/Makefile.in0000644000175000017500000003041511326116731020435 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = data/icons/hicolor/scalable/apps DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(iconsdir)" DATA = $(icons_DATA) $(noinst_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ themedir = $(datadir)/icons/hicolor size = scalable context = apps iconsdir = $(themedir)/$(size)/$(context) icons_DATA = \ conduit.svg noinst_DATA = EXTRA_DIST = \ $(icons_DATA) \ $(noinst_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/icons/hicolor/scalable/apps/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/icons/hicolor/scalable/apps/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconsDATA: $(icons_DATA) @$(NORMAL_INSTALL) test -z "$(iconsdir)" || $(MKDIR_P) "$(DESTDIR)$(iconsdir)" @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iconsdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(iconsdir)" || exit $$?; \ done uninstall-iconsDATA: @$(NORMAL_UNINSTALL) @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(iconsdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(iconsdir)" && rm -f $$files tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(iconsdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconsDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconsDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-iconsDATA install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-iconsDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/data/icons/hicolor/scalable/Makefile.in0000644000175000017500000004230711326116731017475 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = data/icons/hicolor/scalable DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = apps all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/icons/hicolor/scalable/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/icons/hicolor/scalable/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/data/icons/hicolor/32x32/0000777000175000017500000000000011326117106014516 500000000000000conduit-0.3.17/data/icons/hicolor/32x32/Makefile.am0000644000175000017500000000001711172176633016475 00000000000000SUBDIRS = apps conduit-0.3.17/data/icons/hicolor/32x32/apps/0000777000175000017500000000000011326117106015461 500000000000000conduit-0.3.17/data/icons/hicolor/32x32/apps/Makefile.am0000644000175000017500000000031111172176633017435 00000000000000themedir = $(datadir)/icons/hicolor size = 32x32 context = apps iconsdir = $(themedir)/$(size)/$(context) icons_DATA = \ conduit.png noinst_DATA = EXTRA_DIST = \ $(icons_DATA) \ $(noinst_DATA) conduit-0.3.17/data/icons/hicolor/32x32/apps/conduit.png0000644000175000017500000000407111172176633017563 00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATXW[lT]s'NmTD0QOP>P*Q j|HZ!!Yj>VU"54R*$c1Ā_1Ͻ2"9@@kR'_eQJX'O^Lp~0(aŲ ܹs>^1&}G BC%!S!"mpnNE*UɈ]9לq/ⱦ.ޘD91F36燉I01`oUm[xq2@M"H"H)G &D|>50ƀ[ƘBq AU*\zwt}^~u?Eji6JH-5-1>~a`jJ*cjNY[_o RJ4%._)r\)U.PʠXԈ"((FGg022c,n `YhTe٘~vmCLt%6%v`pT}Kk 4"Y1|hmLUB)X2_L&, vS TBkD+hMm0!1e!bqv+?ΣPDai0,/{r:J+,,H$B$y5C2({P_J@/@PY7a"ˏʂFǶ1KG[,>lq #i,Ed2ԗZ%_\SDQT&g |tsEיT1!;EsK3;wD\7(\.۶aۢ\ |>cIUUԸeu'(޽c 5Zs8FfS}u`ǎ{j1Zhm4RJhimT>( ]- zwlN*)eY۶=2FGUmqd PA)hoa ,'6B" ݳ9868xrn6hjh9SJ۲JwJƘ?o,al߾}0ܴbZ)MwZ_ kW7$@*_zKYWsb[[@j<{ܧ!dl۞hkks(`?ۇҮ.+x1 u<ɈO.\n:8ιd2^WWo dy"zPRmf2:+lRgRU%Q gW=~ (u@!1# KAD<e壯o{~(N8P[[;!vww]vذaCYyffرcnZ~>55: z{{сtA844f\t GMMM3AMOO7={|_JMDK~z<*8!\3۶!,{m<Í7sجmGWdAkoG˲D:{… IDz@*J9O)  xDf2dيbX ,*?ҿݲeK1P($8Nrcud2gH\\-B>EIENDB`conduit-0.3.17/data/icons/hicolor/32x32/apps/Makefile.in0000644000175000017500000003040111326116731017443 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = data/icons/hicolor/32x32/apps DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(iconsdir)" DATA = $(icons_DATA) $(noinst_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ themedir = $(datadir)/icons/hicolor size = 32x32 context = apps iconsdir = $(themedir)/$(size)/$(context) icons_DATA = \ conduit.png noinst_DATA = EXTRA_DIST = \ $(icons_DATA) \ $(noinst_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/icons/hicolor/32x32/apps/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/icons/hicolor/32x32/apps/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconsDATA: $(icons_DATA) @$(NORMAL_INSTALL) test -z "$(iconsdir)" || $(MKDIR_P) "$(DESTDIR)$(iconsdir)" @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iconsdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(iconsdir)" || exit $$?; \ done uninstall-iconsDATA: @$(NORMAL_UNINSTALL) @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(iconsdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(iconsdir)" && rm -f $$files tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(iconsdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconsDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconsDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-iconsDATA install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-iconsDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/data/icons/hicolor/32x32/Makefile.in0000644000175000017500000004227611326116731016515 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = data/icons/hicolor/32x32 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = apps all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/icons/hicolor/32x32/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/icons/hicolor/32x32/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/data/icons/hicolor/24x24/0000777000175000017500000000000011326117105014517 500000000000000conduit-0.3.17/data/icons/hicolor/24x24/Makefile.am0000644000175000017500000000001711172176633016477 00000000000000SUBDIRS = apps conduit-0.3.17/data/icons/hicolor/24x24/apps/0000777000175000017500000000000011326117106015463 500000000000000conduit-0.3.17/data/icons/hicolor/24x24/apps/Makefile.am0000644000175000017500000000031111172176633017437 00000000000000themedir = $(datadir)/icons/hicolor size = 24x24 context = apps iconsdir = $(themedir)/$(size)/$(context) icons_DATA = \ conduit.png noinst_DATA = EXTRA_DIST = \ $(icons_DATA) \ $(noinst_DATA) conduit-0.3.17/data/icons/hicolor/24x24/apps/conduit.png0000644000175000017500000000230011172176633017556 00000000000000PNG  IHDRw=sRGBbKGD pHYs  tIME2GOtEXtCommentCreated with GIMPWIDATHǵMlTU^_2m"~€c&2X5Xeaа0 + 5F`I(Gtڱ0-d|w]B~,8{޽Ϲ u;'|qǶ-s2Dv`ػ4gL`3å.Z3mLBg- 8.&Ab '+Ibf qtLL1:vdD膎8wKjT `dR>dǮηO IDf`xD&Oh#uKje.g`'-Oh}z=r{`LujH! 4 jjɰj*Vc w>,hZ]DwS޸`˹Z'bzYu˗2=4Z7 0<<̩?D|(+E4bJ2½tmGQdHI<RDf =l&pW4i=D$d^Q)*Kuqggpb1,"L2qjHkn*M1c[_GϜ<`_ pl.j9[|hxs\GFB4zSiM=glgmmmN:::_R[_RT6Í)r_ .*C<}ޟo=g텶hIRB!R@w4iDdžb!˵p5L Y P_ijBr05W@wK@.^0d!.ݻB Ÿz*>υYlGI('KnPV@9?7ϼ>E"0xt:M:|xFRp !R*̝<=uS[5Eem;ʕPS^YHCS*ˎ˙Kmb-?<8۷H?W ػMIENDB`conduit-0.3.17/data/icons/hicolor/24x24/apps/Makefile.in0000644000175000017500000003040111326116731017445 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = data/icons/hicolor/24x24/apps DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(iconsdir)" DATA = $(icons_DATA) $(noinst_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ themedir = $(datadir)/icons/hicolor size = 24x24 context = apps iconsdir = $(themedir)/$(size)/$(context) icons_DATA = \ conduit.png noinst_DATA = EXTRA_DIST = \ $(icons_DATA) \ $(noinst_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/icons/hicolor/24x24/apps/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/icons/hicolor/24x24/apps/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconsDATA: $(icons_DATA) @$(NORMAL_INSTALL) test -z "$(iconsdir)" || $(MKDIR_P) "$(DESTDIR)$(iconsdir)" @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iconsdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(iconsdir)" || exit $$?; \ done uninstall-iconsDATA: @$(NORMAL_UNINSTALL) @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(iconsdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(iconsdir)" && rm -f $$files tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(iconsdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconsDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconsDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-iconsDATA install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-iconsDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/data/icons/hicolor/24x24/Makefile.in0000644000175000017500000004227611326116730016516 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = data/icons/hicolor/24x24 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = apps all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/icons/hicolor/24x24/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/icons/hicolor/24x24/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/data/icons/hicolor/26x26/0000777000175000017500000000000011326117106014524 500000000000000conduit-0.3.17/data/icons/hicolor/26x26/Makefile.am0000644000175000017500000000001711172176633016503 00000000000000SUBDIRS = apps conduit-0.3.17/data/icons/hicolor/26x26/apps/0000777000175000017500000000000011326117106015467 500000000000000conduit-0.3.17/data/icons/hicolor/26x26/apps/Makefile.am0000644000175000017500000000031111172176633017443 00000000000000themedir = $(datadir)/icons/hicolor size = 26x26 context = apps iconsdir = $(themedir)/$(size)/$(context) icons_DATA = \ conduit.png noinst_DATA = EXTRA_DIST = \ $(icons_DATA) \ $(noinst_DATA) conduit-0.3.17/data/icons/hicolor/26x26/apps/conduit.png0000644000175000017500000000230511172176633017567 00000000000000PNG  IHDRJLsRGBbKGD pHYs  tIME%-%tEXtCommentCreated with GIMPW IDATHǽ]lUwfv]PFK6D$B ,ƯTY4< > yÐ4IZ l.ntvap^sw9w 8xY`2˯?YVwxKZJ%9udl%-tjCW[6 ]|UAh*KH$Ӝ|l1TAA Bwd,)fLL2>1t.?*)ƓS E$Bl/_HreX"0󂠙]54> RJK4ȣ;j} 0S_8; ]ΌguM:7y#jkxtKd{:w;99K7N%Ļg|d'%M?9#g9ݵNGiX^/W,+L2Y뽯JxiV:t}>!8GYCCCZ;v{%|T* S*UD"%Jq4 :_#J/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/data/icons/hicolor/Makefile.in0000644000175000017500000004232411326116731015726 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = data/icons/hicolor DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = 16x16 22x22 24x24 26x26 32x32 48x48 scalable all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/icons/hicolor/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/icons/hicolor/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/data/icons/Makefile.in0000644000175000017500000004222711326116730014270 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = data/icons DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = hicolor all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/icons/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/icons/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/data/feed.png0000644000175000017500000000451511172176633012526 00000000000000PNG  IHDR00WsBIT|dtEXtSoftwarewww.inkscape.org<IDATh՚{p\U?ܻnlGh,%$v(p?(`(#qt18#BƉP:2"RԤ@Ҧ4Md s#ޛ`3IN997Wcp5\,ځviYZ_Z+,}moVQT ZPlCk±550eci47ע/nESpȥR)$tfS@׺5B ys)&p9\St@ @H1 BG(CZI90ѿJ@׺5S! d@OO ~,B !"JnXq GEc ]mK*%8Q55W("z#aim] p  ěā sm%p%!3fTr%E獷ȧ3l`y8rbCtNS#eu'o4,X|:k"Lu<j2NleL oAH$ LqE/U[VoY1ջ{[(v?hj"1v)-keٞy~{o[Ws6ҲI@=!VB_ߒAZ ~6rl))(]2'_yU ި݃=U:}9IRHǷۧ~d!ؔx~MR-cE[߹cN[}Wq *wF=ZI0c1ȿ2ڈ]5uJٟExa TTŝO}k䞹 }|"d] />lh=%x(?#nT+x3a~ƓwB`܃рI'0t0p7) jϳ}^}y} Lqx"Ua!cǺq +f`u?X#<\Qjƾ> 'F`Ms>KS)mrjF2^iÏJ^t}Ε|YUynyVL>هoMX|UFG+ ӹ/#g_mRQ[~юgUw`eBj}akLJv϶2T⛧7rJqVnL鉰ؗUy^O{YN ?q Y^n~#:r> R8L~&".z`OvlZx96"<]݅AoAL~hr+%&WBh'{=c.vmm0BfUC;X>o7k$'y C8k`{Uy>7m_ rF6?zw@v˕6w_ro͜~y`)/mÈ(g^v{ټʐ{)P _P:k'pK>}O!T_/L{_tqYϿ S̻֯`+FVo_v?B֝6"8 kUf5osT}.7|ם+$^6a_p D Ubs>wUʽSpeY^e˳Wyv ,X< ŷV}lTs/{o͜]N'<[zRmf4N*ȼ (߲|1v[Ψ7T)w4=ɃU')=ԏ:k+6jTЀ{ݙjh;<b Wd8^eRC3=%Jq դG]#Fr3V}jx ̥>@{Lz#"v&{I0+Vu8@:^t65Vg\icH]\* ):Q48C fú.țRyFs=9+d-!xx鷩mN&˶tfS-g4<b2xtfS[GQX9 +:=z(@[G1X8&򌁗~ qJ_55hJ}o m2xL'X1m`*>rRR:=*_n_} E+]IENDB`conduit-0.3.17/data/conduit.desktop.in.in0000644000175000017500000000033611172176633015164 00000000000000[Desktop Entry] Version=1.0 Type=Application Terminal=false _Name=Conduit Synchronizer _GenericName=Conduit Synchronizer _Comment=Synchronization for GNOME Icon=conduit Exec=@BINDIR@/conduit Categories=GNOME;GTK;Utility; conduit-0.3.17/data/backpack.png0000644000175000017500000001330611172176633013360 00000000000000PNG  IHDR:0@ iNbKGD pHYs  tIME 17SIDAThޕُ%qqNn7uo!LXd a 6 E/@>o"cF$k,;R<]+lS(zzUk_ȯ8ǜ~_zm{reU3oyY8yI#Ogt[Y|%hCzzYƵorr[Vd$"]+F VV$޳wnqkK^OrQKPҟml?%A1Un4eD\OftDF.ֶv7a"6fi'%02*17)`+M\)cuـdh8#b8yͻo?ʗo;D0<98 zN<\[/STr;?@DR6 Y( 551'PsS9IOsq;O=CYVl#ccY1F40'klyl/m,0ޱZRzIr#0ׇ Bl8?gbA]|9Ɔl~|vASq0`}!i899 a>ܒ&̌vjϊ/ S#\_}V-rR4~ÊV3q {YƠt1'YƆDWgp0Knaquw5}NF!VMx1g$I*prn&"j`YM^%,0F}.0nr&HD.e孡8 >Sd^t_sC>oxJ\Θ_0=;T%b6Ir >w"idE YYj^`˛W6ϊɲqcYAl3T9NL' $!LuUfS,|/l0ayl0YXL)&?wX>yۯs]s3[,;@ Ն}Y1yi ޡrOz~ @M-7\K./(" C.it:PxOykO> QpmeQ0φAWɎX.fxZ4N8hוӢ8)QuXev bE VZTUE^LS0$"rOͦ|{7M1O>EDd)(c6 Tq)_/D[y??+Ɠ$Y0 ʣeٯU{V$mʢN2A8D9ʲ,K%锲,뚺9~vW^CҴC% ixWWWcHѧL6M aOGI C:!`ClF(35lrS}Dll6YI$iJet:0$CX.X,0ưp4W?)y (4BKprBHjge3ꇶd;)A|e7jADT F)1qLt::q3 ts7svwvX<, s...E1IETU,ѣG{T(#̋)s&omJW%Sʦ}ZԽ׺q y5r}n͜` &UU,Ă $#YF2*eY1_̘MgTUE8X.܁=ܿ۾۷n /}l|kz # nO,(:-U=P1R9wf|vz;XcWB, _R\>|H'͈,K'lomS%y/r%eY4 aGUUyR($I!yM#eŭIAhz]MoY0v?cbUŻXk`Â*VNF'퐦)]T, +w||\mȍY)rvV޷.2N9??GUicZ.!Oπ7'%x%DI#;X:Hjh4"/ 꺦ia>cý^$Iӳ3f)(8,Ko1^PsVNxV~7+f7ݳ8ME4^@ltգ0dI7no4 i(?|AFۢxzVA:f$e}^Z ;.S~🨗ҔpbNY49n8N{ Y,EA]U4Msc]vw8:zʓSN?e!U~-qp[`ׂ@/o$o2.]O\ڪ)LzY!~OO0`CK$t:,e<5x@vȋgb1XKt UķGX. fOEsElvwn7w:X4~\N_pUSUm? g#&vf0XD؀(X.,sFlǤU΃cޏ2^ҖP})4^.JD+eA*x]Sov^=/x H?Sz06옾'dv~GHUBuxo:_V]q77rxxs_RU-{mZ]1mQmخu[F r!yQclMyu*Cqf6i8\DʂcFfA0#y9Z8&MS%ٌF+Ⱦ~زZ؅mߪKK[it~r5|rRG:_Q 8["^1b0ԃ!+Jq"XHLL#Ɇ¨PEWFԵ=nSi+TOa\WUĚ?{=Uo'EsG=Y㖱 n|ہ#5{WmynKcĐ`׼BώE#Ml|&:+ԗT>]jo7Kc\/x,zdz祻ھ>t⩊(zK>_v 3׺o$|$+OBT֎սӢy|w\ԓM_%WŽxZ գl.jcg9"bѴ鯧nM Q.]7Ba ruK+r9/WĚ#(EUy1Yy9XTO퓢ΏD&ש4.EuYP6gvqkG0Z-PA0&D$"f$Dpån w$-ӫS: s+2$4:ke6vT-D/j Kׅ^ȝߺ($3"=#ddW RGΗrSܜ(@+v1.V5;!A =P90Lw;+r;N5ыvl6Fv*ET5|njNk(E=(1vہ*kZ^m}Uꮇ6}Pb ZM>`H@\hAZiJNKuf|nCMdΞv+RaPV(+ v-E/;PνoN1 =1!F^3k)O ZXOy&̒92rFmspwF/BHmtxͬ>&.iw] .Y*[kKᴻ4w&6|`0H ծ>%S^bt?.myg51vI!gU(ik| *4[21Ge{pbXZm38l<3"@gE1Lgk*8_n>?![K׃:^I(0/g{H#غsfC=Y~>?"(Ȳ>_`t~X0__w?v@dԛbAy·} SG^ {hOA*w*13684 _~S 1ess[߳ uiI9-dꯣb 't@Ւ䱫b F>8,|쪨*זӧf3-d U"Ƀpr_ HWQNaK H9 : 嶐aq5&EL=OR4U z=gKNq@Sog%p\=/8b0LOU" e<<{bqAB0@WָD,&t}W-"0>R*hhh%&>Yim@+u2b{ ]ޖZE#lgB&$g_,7q/',$|L$yk(ɐ8\ m6/eIRB3 Title Editor True vertical True True _File True gtk-save True True True Synchronize All True image7 False Cancel Synchronization True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK image8 False True gtk-quit True True True True _Edit True Clear Canvas True image9 False True gtk-preferences True True True True _Help True gtk-help True True True gtk-about True True True False False 0 True True 250 True vertical True Data Providers False 0 True True automatic automatic in 1 False False True True vertical True vertical True True never automatic 0 False False True True True vertical True True never automatic 0 True True end True True True False True 0 0 True 2 True gtk-find False False 0 True Compare True False False 1 False False 0 gtk-cancel True True True False True False False 1 True True True False True 0 0 True 2 True gtk-apply False False 0 True Resolve Conflicts True False False 1 False False 2 0 36 True True False 3 True gtk-fullscreen False False 1 False False 1 True Conflicts False False False False 1 True False False 2 Regresh Group True image1 False Synchronize Group True image2 False True Delete Group True image3 False True True Synchronization Options True True Slow Synchronization True True Two-Way Synchronization True True Always Up-To-Date True True Conflict Options True True Ask Me What to Do True True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Replace the Older Item True True conflict_ask True Skip True True conflict_ask True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Delete Options True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Ask Me What to Do True True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Delete the Corresponding Item True True deleted_ask True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Skip True True deleted_ask Refresh Item True image4 False Configure Item True image5 False True Delete Item True image6 False Conduit Preferences 350 450 dialog True vertical True True True vertical True 0 none True 12 True vertical 5 Start Conduit at login True True False True 0 Save settings on exit True True False True True False False 1 Show status icon True True False True True False False 2 Minimize to notification area True True False True True False False 3 Show Hints True True False True 4 True <b>General</b> True False 0 True 0 none True 12 True vertical 5 True 0 When an item has been deleted: False False 0 True True vertical 5 Ask me what to do True True False True True False False 0 Delete from the corresponding sink True True False True True deleted_ask_radio False False 1 Skip True True False True True deleted_ask_radio False False 2 False 12 0 False 1 True 0 When there is a two-way conflict: False False 2 True True vertical 5 Ask me what to do True True False True True False False 0 Replace the older item True True False True True conflict_ask_radio False False 1 Skip True True False True True conflict_ask_radio False False 2 False 12 0 False 3 True <b>Default Synchronization Options</b> True 1 True Configuration False True True True True 1 True Data Providers 1 False True True True True 2 True Data Conversions 2 False 2 True end gtk-cancel True True True False True False False 0 gtk-ok True True True False True False False 1 False end 0 helpbutton1 button30 True gtk-refresh True gtk-execute True gtk-delete True gtk-refresh True gtk-preferences True gtk-delete True gtk-execute True gtk-cancel True gtk-clear conduit-0.3.17/data/picasa.png0000644000175000017500000000151511172176633013060 00000000000000PNG  IHDRw=sBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<IDATHKHQ?bd VdTXDV{ml DD-$z - E(E2BF T3N:3ݜwr*&c52 re`NՑ>#z*8. NvBY]DǕVgRmi ^wNZJŠ>) .Ϳpӓ4ˠ׽$)!NjyJ+sR] zݓz2d][ˮmL˺xpITUU*TRh/߹iYw'EIqb30?Ibķ0-' lռ$I"l/mj2Ӳ$vPY_r3>x$"4 y9lafH#̠=7hۑMə=o! ?G3W5[# >dUvEc,7{Ch_p$+dbˮk዆wըS K1ޚ!n],|$?*',3Nŭ n]5`9֫hX{ߠnnl|rn'-ŁK~8Ory 2" њ"@n+1 u{]-mI{g#v((x;a[Kg8 ::m1{^Տ9iֲIENDB`conduit-0.3.17/data/windows.png0000644000175000017500000000254711172176633013320 00000000000000PNG  IHDRw=sBIT|d pHYs6GtEXtSoftwarewww.inkscape.org<IDATH[]9sΌIN&I EDjQ{c Ii H$6hi-U{{4MJZx!ڙ$N:ɘ̜>{oo9 {DU$|ꀻE&D߽b/LB[Wғ Y{SuՄ,d?Q;nH<,RZs<x>.8.ZUY$ӋK~Ox{DnFW{FJ }n8xȚ?ɦi*~,Gd_8;I|HV %cJ0Q^J{dzgi!@\d ⊰vsL]gxG{Is-꘩3gms~>z(`|7 "}`Os0]̭ww~oNU g>8w,٩ UA-hE6KK{^IL+skRH3z.Vd3IuC"A^T2.d,mt)r82xP׆rQQ=o: Ou ]bԢ[趐J jkT+ HZ?x7R-("Ѣ^gd +rȺlszr4Z2Y6_Kw-;Rn c:E([T`0?8'ѕ.Q=@p`aӞVU}է["T2PJ,v~s#oZ;S9h_۶1{7`4&=QUDDc0C6v=3'W:/¾9-p h\C ߻*Y z'*xXIENDB`conduit-0.3.17/data/Makefile.in0000644000175000017500000006303511326116730013155 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = data DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/conduit.desktop.in.in $(srcdir)/conduit.pc.in \ COPYING ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = conduit.desktop.in conduit.pc CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(dbusservicedir)" \ "$(DESTDIR)$(desktopdir)" "$(DESTDIR)$(pkgconfigdir)" \ "$(DESTDIR)$(resourcesdir)" DATA = $(dbusservice_DATA) $(desktop_DATA) $(pkgconfig_DATA) \ $(resources_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = icons ################################################################################ # Package Config Stuff ################################################################################ pkgconfigdir = $(libdir)/pkgconfig pkgconfig_in_files = conduit.pc.in pkgconfig_DATA = $(pkgconfig_in_files:.pc.in=.pc) ################################################################################ # GConf Schemas ################################################################################ # GConf Preference Schemas #schemadir = $(GCONF_SCHEMA_FILE_DIR) #schema_in_files = conduit.schemas.in #schema_DATA = $(schema_in_files:.schemas.in=.schemas) #@INTLTOOL_SCHEMAS_RULE@ ################################################################################ # Icons ################################################################################ gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor resourcesdir = $(pkgdatadir) resources_DATA = \ conduit.ui \ backpack.png \ evolution-tasks.png \ evolution-memos.png \ conduit-splash.png \ facebook.png \ feed.png \ picasa.png \ smugmug.png \ boxdotnet.png \ flickr.png \ shutterfly.png \ youtube.png \ zoto.png \ windows.png conduitbindir = $(libdir)/conduit ################################################################################ # Desktop file ################################################################################ desktopdir = $(datadir)/applications desktop_in_files = conduit.desktop.in desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) ################################################################################ # DBus ################################################################################ dbusservicedir = $(DBUS_SERVICES_DIR) dbusservice_in_files = org.conduit.service.in dbusservice_DATA = $(dbusservice_in_files:.service.in=.service) ################################################################################ # Build rules ################################################################################ #if GCONF_SCHEMAS_INSTALL #install-data-local: install-schemas #install-schemas: # GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) \ # $(GCONFTOOL) --makefile-install-rule $(schema_DATA) #endif DISTCLEANFILES = \ $(pkgconfig_DATA) \ $(desktop_DATA) EXTRA_DIST = \ $(resources_DATA) \ $(pkgconfig_in_files) \ $(dbusservice_in_files) \ conduit.desktop.in.in \ COPYING CLEANFILES = conduit.desktop org.conduit.service all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): conduit.desktop.in: $(top_builddir)/config.status $(srcdir)/conduit.desktop.in.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ conduit.pc: $(top_builddir)/config.status $(srcdir)/conduit.pc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-dbusserviceDATA: $(dbusservice_DATA) @$(NORMAL_INSTALL) test -z "$(dbusservicedir)" || $(MKDIR_P) "$(DESTDIR)$(dbusservicedir)" @list='$(dbusservice_DATA)'; test -n "$(dbusservicedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dbusservicedir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dbusservicedir)" || exit $$?; \ done uninstall-dbusserviceDATA: @$(NORMAL_UNINSTALL) @list='$(dbusservice_DATA)'; test -n "$(dbusservicedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(dbusservicedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(dbusservicedir)" && rm -f $$files install-desktopDATA: $(desktop_DATA) @$(NORMAL_INSTALL) test -z "$(desktopdir)" || $(MKDIR_P) "$(DESTDIR)$(desktopdir)" @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(desktopdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(desktopdir)" || exit $$?; \ done uninstall-desktopDATA: @$(NORMAL_UNINSTALL) @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(desktopdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(desktopdir)" && rm -f $$files install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files install-resourcesDATA: $(resources_DATA) @$(NORMAL_INSTALL) test -z "$(resourcesdir)" || $(MKDIR_P) "$(DESTDIR)$(resourcesdir)" @list='$(resources_DATA)'; test -n "$(resourcesdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(resourcesdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(resourcesdir)" || exit $$?; \ done uninstall-resourcesDATA: @$(NORMAL_UNINSTALL) @list='$(resources_DATA)'; test -n "$(resourcesdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(resourcesdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(resourcesdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(dbusservicedir)" "$(DESTDIR)$(desktopdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(resourcesdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dbusserviceDATA install-desktopDATA \ install-pkgconfigDATA install-resourcesDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-dbusserviceDATA uninstall-desktopDATA \ uninstall-pkgconfigDATA uninstall-resourcesDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-data-am install-strip tags-recursive \ uninstall-am .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-data-hook \ install-dbusserviceDATA install-desktopDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgconfigDATA install-ps \ install-ps-am install-resourcesDATA install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-dbusserviceDATA uninstall-desktopDATA uninstall-hook \ uninstall-pkgconfigDATA uninstall-resourcesDATA install-data-hook: update-icon-cache uninstall-hook: update-icon-cache update-icon-cache: @-if test -z "$(DESTDIR)"; then \ echo "Updating Gtk icon cache."; \ $(gtk_update_icon_cache); \ else \ echo "*** Icon cache not updated. After (un)install, run this:"; \ echo "*** $(gtk_update_icon_cache)"; \ fi @INTLTOOL_DESKTOP_RULE@ $(dbusservice_DATA): $(dbusservice_in_files) Makefile @sed -e "s|\@bindir\@|$(bindir)|" $< > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/data/evolution-tasks.png0000644000175000017500000000215411172176633014767 00000000000000PNG  IHDRw=sRGBbKGD pHYs B(xtIME (*fmIDATHǽmLe< &*0QXRjiVlIl7sRFLACI*cD0!ˁp^A<҇{vC]{aUJ)RJR4ӥe` q>5v8ُp(T=4T M)%ʣk022d+04+kX )eܼ'rMJIL~˭^B~{epoTd͟ĶoIޜEC_$HIނwl}z/l@CFa3kB6y<"!p޺,5Ào%)uWg?IENDB`conduit-0.3.17/intltool-extract.in0000644000175000017500000000000011326116723014024 00000000000000conduit-0.3.17/NEWS0000644000175000017500000004165411326115663010705 00000000000000NEW in 0.3.17: ============== * Fix dbus and configuration, install eog and nautilus extensions by default * Port to GtkBuilder * Use system gdata * UI improvements for hints * Autostart management from UI is improved * Use system installed flickrapi >= 1.2 * Update pyfacebook * DB stability improvements * Fix configuration UI * Many translation updates * Many many bug fixes * Remove gnomevfs support * Support for Mac OSX added to Wallpaper Module * Support for Mac OSX added to Firefox 3 Module NEW in 0.3.16: ============== * New Configuration System * Support Firefox3 Bookmarks * Support Google Bookmarks * Support Nautilus Bookmarks * Add dataprovider for changing desktop wallpaper * Autostart capability can now be controlled from the preferences UI * Fixed #510126, Support Firefox 3 bookmarks (Andrew Stormont) * Fixed #529327, Lacking string hyphenation (Philip Withnall) * Fixed #529328, Informal use of "sync" (Alexandre Rosenfeld ) * Fixed #531250, Support Nautilus' "bookmarks" (when they point to any "remote-looking" URI) (John Stowers) * Fixed #548962, Debug mode (John Stowers) * Fixed #550641, Conduit should not display ready if dataproviders need configuration first (John Stowers) * Fixed #552418, F-Spot module fails to open configuration dialogue (Alexandre Rosenfeld) * Fixed #555404, Fix sync to a fat filesystem (John Stowers) * Fixed #556892, More flexible search for JSON libraries (John Stowers) * Fixed #557589, Unable to sync 2 folders over local network connection (John Stowers) * Fixed #557669, Conduit halts with error (John Stowers) * Fixed #558176, GIO FileMonitor is busted (John Stowers) * Fixed #559055, The documentation URI is invalid (John Stowers) * Fixed #559599, Facebook does not respect default browser (John Stowers) * Fixed #561354, conduit locks up in EvoCalendarTwoWay.refresh() method (John Stowers) * Fixed #561554, Depends on gio (but not checked in configure) (Tom Parker) * Fixed #561555, "pygst.require() must be called before importing gst" causes *many* import failures (Tom Parker) * Fixed #561557, Catching import errors using importfile is non-trivial (Tom Parker) * Fixed #562516, Syncing Folder to Facebook only uploads 1 photo (John Stowers) * Fixed #564020, Tomboy module XML detection fails - borks notes (Brian Teague) * Fixed #564141, Evolution calendar sync import fails (Brian Teague) * Fixed #564144, Evolution Calendar sync updates data endlessly (Brian Teague) * Fixed #564187, Tomboy note filenames don't save with special characters (Brian Teague) * Fixed #566588, Conduit Crashes with segfault on Box.net login window close - 32/64 bit (John Stowers) * Fixed #568091, Patch to add Google Bookmarks data source (Andrew Stormont) * Fixed #568293, Bookmarks should convert to .desktop files (Andrew Stormont) * Fixed #568361, Conflict resolution needs data type conversion (Brian Teague) * Fixed #568362, File data type's hash always returns 0 (Brian Teague) * Fixed #568363, Tomboy module misuses SynchronizeConflictError (Brian Teague) * Fixed #568372, Firefox 3 bookmarks dataprovider should suport multiple profiles (Andrew Stormont) * Fixed #568380, File data type's hash always returns 0 when using GIO (John Stowers) * Fixed #570434, Event datatype needs to import re (Brian Teague) * Fixed #571506, Import error module WindowConfigurator (Manuel Rego Casasnovas) * Fixed #572005, Patch for "--with-file-impl" configure flag to set File Implementation (Andrew Stormont) * Fixed #572132, Conduit displays category without name for ipods without name. Patch attached. (Andrew Stormont) * Fixed #574907, It should be possible to select groups in google contacts (Michael Thompson) * Fixed #547133, Getting mtime over http backend is broken (John Stowers) Translations: * Updated el: Jennie Petoumenou * Updated fr: Claude Paroz * Updated zh_HK: Hong Kong * Updated pt_BR: Og Maciel, Leonardo Ferreira Fontenelle * Updated pt: Duarte Loreto * Updated ca: Gil Forcada * Updated de: Mario Blättermann, Andre Klapper * Updated sv: Daniel Nylander * Updated hu: Gabor Kelemen * Updated ar: Djihed Afifi * Updated it: Luca Ferretti * Updated en_GB: Philip Withnall * Updated cs: Petr Kovar * Updated fi: Timo Jyrinki * Updated zh_TW: Taiwan * Updated es: Jorge Gonzalez, Jorge Gonzalez Help Manual Translations: * Updated de: Andre Klapper , Mario Blättermann NEW in 0.3.15: ============== * Fixed #523181, Can't sync folders - escaping/unicode problem (John Stowers) * Fixed #555401, fix get_removable_volume_info call (Luca Ognibene) * Fixed #555403, some fixes to File datatype (Luca Ognibene) * Fixed #555421, fix sync with directories with illegal chars (Luca Ognibene) * Fixed #557105, Removable Volume support is broken on GIO (John Stowers) * Fixed #532854, Italian translation don't work (John Stowers) Translations: * Updated nb: Kjartan Maraas * Updated de: Hendrik Richter * Updated fr: Claude Paroz * Updated pt_BR: Og Maciel * Updated sv: Daniel Nylander Manual Translations: * Updated de: Mario Blättermann NEW in 0.3.14: ============== * Merge improved iPod support by Alexandre Rosenfeld. This was implemented as part of GSOC08 and features * Improved audio/video transcoding using GStreamer * Support Webkit web browser * Support GIO * Fixed #510279, Support iPod Music (Alexandre Rosenfeld) * Fixed #526423, Use Gstreamer for Sound/Video conversion (Alexandre Rosenfeld) * Fixed #545464, conduit can't be started up without bash (Christian Schlotter) * Fixed #545824, Error Synchronizing in Picasa when the album doesn't exists (Manuel J. Garrido) * Fixed #546478, Firefox directory is not found on Gentoo (Christian Schlotter) * Fixed #547600, Banshee playlist icon (John Stowers) * Fixed #547604, Don't draw treeview lines (John Stowers) * Fixed #547615, No splashscreen needed (John Stowers) * Fixed #547617, Fix Evolution dataprovider icons (John Stowers) * Fixed #547618, About item in tray icon (John Stowers) * Fixed #548404, Three typos: N800 photo module, File dataprovider and Dataprovider (Christian Schlotter) * Fixed #548959, No module named MediaFile (Michael Monreal) * Fixed #548960, Deal with missing pygst better (John Stowers) * Fixed #548974, Window icon for preferences and config dialogs (John Stowers) * Fixed #548989, PicasaTwoWay ignores configured picture resize (Antonio G) * Fixed #549750, tries to sync from f-spot to evolution address book (John Stowers) * Fixed #549751, tries to sync f-spot to tomboy (John Stowers) Translations: * Updated fi: Timo Jyrinki * Updated ar: Djihed Afifi * Updated pl: Tomasz Dominikowski * Updated es: Jorge Gonzalez Help Manual Translations: * Updated fr: Claude Paroz * Updated de: Christian Kirbach NEW in 0.3.13.1: ============== * Brown paper bag release * Fixed #546161, Remove unecessary scrollbar on Canvas (John Stowers) * Fixed #546273, Error syncing files with Flickr (John Stowers) * Fixed #546343, Web browser fails when installed (John Stowers) Translations: * Updated gl: Jorge Gonzalez * Updated es: Jorge Gonzalez NEW in 0.3.13: ============== * Much inproved RSS feed enclosure support, thanks to the use of the python-feedparser module. * Merge platform abstraction branch for improved startup time and a great many architectural improvements. * Conflict inprovements. Duplicate conflicts should no longer be shown in the UI. * The UI should will now reuse your theme colors * Finer borders and smaller rectangles to match closer with GNOME style * Usage hints are now displayed at the bottom of the window, indicating steps that should be taken after one adds items to the Canvas * A number of example Conduits can be created from the File->Examples menu * Fixed #516646, Welcome message remains on canvas after dataprovider added (John Stowers) * Fixed #517877, Scrolling in Canvas Pane not working correctly (John Stowers) * Fixed #525259, the canvas pane become a mess for remote startup (John Stowers) * Fixed #528221, Evo to iPod synchronisation fails (John Carr) * Fixed #530768, update conflicts after a new sync (John Stowers) * Fixed #543366, Replacement of modified items could be more efficient (Manuel J. Garrido) * Fixed #543534, The "Conduit Manual" window crashes. (John Stowers) * Fixed #543685, Feedmodule should use feedparser (John Stowers) * Fixed #543738, Patch: Add data-type for bookmarks. (Andrew Stormont) * Fixed #544712, "Add directory" button throws error when adding "Files" source (John Stowers) * Fixed #545129, GoogleContact : Crash to push a contact with not email (Roumano) * Fixed #545728, Picasa doesn't delete photos in one way syncs (Manuel J. Garrido) * Fixed #509702, conduit segfaults when quitting (John Stowers) Translations: * Updated gl: Ignacio Casal Quinteiro * Updated es: Jorge Gonzalez * Updated ar: Djihed Afifi * Updated pt_BR: Leonardo Ferreira Fontenelle * Updated pt: Duarte Loreto Help Manual Translations: * Updated es: Jorge Gonzalez, Jorge Gonzalez NEW in 0.3.12: ============== * Support google documents upload/sync * Support youtube video upload * Factories can now be configured * Facebook photos can now be added to albums * Fixed #532142, Remove folder name option in folder dataprovider (John Stowers) * Fixed #510120, Support Google Docs (John Stowers) * Fixed #521196, Conduit does not sync F-Spot photos with changed tags/captions (Matt Brown, Manuel J. Garrido) * Fixed #522120, Support Youtube video upload (Philip Withnall) * Fixed #524758, the password of some data providers is clear text (John Stowers) * Fixed #532545, conduit not syncing modified files between local disk and gnome ssh mount (John Stowers) * Fixed #537068, Conduit launcher does not detect Firefox on 64-bit systems (Michel Alexandre Salim) * Fixed #538416, Support YouTube video replacement (Philip Withnall) * Fixed #542239, Totem plugin (Philip Withnall) * Fixed #542429, Help not clear (John Stowers) * Fixed #542551, Tab title not marked for translation (Claude Paroz) Translations: * Updated pt_BR: Jonh Wendell * Updated vi: Clytie Siddall * Updated nb: Kjartan Maraas * Updated pa: Amanpreet Singh * Updated oc: Yannig Marchegay * Updated ar: Djihed Afifi * Updated gl: Ignacio Casal Quinteiro * Updated es: Jorge Gonzalez Help Manual Translations: * Updated es: Jorge Gonzalez, Jorge Gonzalez NEW in 0.3.11.2: ============== * Brown paper bag release * Fixed #536485, Google Data Provider (Andreas Böttger) Translations: None Help Manual Translations: None NEW in 0.3.11.1: ============== * Brown paper bag release * Fixed #536400, new version drops old configuration (John Stowers) * Fixed #536485, Google Data Provider (Andreas Böttger) Translations: * Updated vi: and to LINGUAS Help Manual Translations: None NEW in 0.3.11: ============== * Support ZOTO Photos * Update to latest version of pyfacebook, flickrapi, pybackpack * Updated to latest version of gdata and improved support for google contacts * Fixed #530929, Folder doesn't follow symlinks (P. Henrique Silva) * Fixed #530979, f-spot to flickr: no comments syncronised (John Stowers) * Fixed #530980, FlickrModule trying to add photo twice to a photoset (P. Henrique Silva) Translations: * Updated fr: Claude Paroz * Updated nb: Kjartan Maraas * Updated it: Luca Ferretti * Updated ar: Djihed Afifi * Updated gl: Ignacio Casal Quinteiro * Updated es: Jorge Gonzalez Help Manual Translations: None NEW in 0.3.10: ============== * Improve error logging and debug messages at startup * Improve network sync performance * Improve dataprovider config dialogs * You can now see the available photosets (Flickr) * You can now see the available photo albums (Picasa) * You can now see the available folders (Box.net) * You can create f-spot tags from the fspot dialog * You can see, and delete the available albums on your iPod * Fixed #510101, tomboy notes are unicode, but ipod notes are not (tumi.st@gmail.com) * Fixed #510127, Support Rhythmbox Playlists (Alexandre Rosenfeld) * Fixed #517928, GUI Corrections Needed (Claude Paroz) * Fixed #520748, Move Utils.py to its own module (Claude Paroz) * Fixed #520785, Syncing two folders can lead to data loss (John Stowers) * Fixed #523551, .conduit on removeable devices just contain the last finished sync (John Stowers) * Fixed #523575, conduit display wrong arrow (John Stowers) * Fixed #523579, too long names in folder-provider causes some strange ui behavior (John Stowers) * Fixed #523692, Tomboy dataprovider doesn't work with tomboy 0.10.0 (Thomas Van Machelen) * Fixed #523915, Make picasa config dialog better (Thomas Van Machelen) * Fixed #524451, Illegal Char in filename / (John Stowers) * Fixed #526292, DPs which call web login() from configure freeze the GUI (John Stowers) * Fixed #527438, Missing file separator in synchronisation with smb-shares (John Stowers) * Fixed #517536, Create Tag on F-Spot (Thomas Van Machelen) Translations: * Updated fi: Ilkka Tuohela * Updated sl: Matej Urbančič * Updated en_GB: Philip Withnall * Updated es: Jorge Gonzalez * Updated hu: Gabor Kelemen Help Manual Translations: * Updated es: Jorge Gonzalez NEW in 0.3.9: ============== * Add Conduit documentation (Brent Gueth) * You can now specify your own labels when saving emails * Removed the build dependency on dbus, just check for python-dbus > 0.80.0 * Restore the expanded columns in the data provider pane * Improved removable volume support (like USB keys). Now, inserting a USB key that has been synchronized on another computer will automatically create a preconfigured dataprovider for synchronizing the folders of interest. * Fixed #510124, Cant cancel sync without closing conduit (John Stowers) * Fixed #511691, Improve removable folder support (John Stowers) * Fixed #512230, 'Folder' should display as folder_name (John Stowers) * Fixed #515328, There is NO documentation (Brent Gueth) * Fixed #518592, Get rid of .conduit and follow fd.o specifications (John Stowers) * Fixed #518704, Youtube download doesnt work for old videos (Thomas Van Machelen) * Fixed #519708, TomboyModole says note with unicode characters in title has disappeared (Thomas Van Machelen) * Fixed #521194, Add "caption" support to Photos/Images (Matt Brown) * Fixed #521349, Sync icons in status bar keep 'turning around' (Thomas Van Machelen) * Fixed #522436, Conduit fails to sync files with special character % in filename (John Stowers) Translations: * Updated fr: Stéphane Raimbault * Updated pt_BR: Leonardo Ferreira Fontenelle * Updated pt: Duarte Loreto * Updated ca: Gil Forcada * Updated it: Luca Ferretti * Updated sv: Daniel Nylander * Updated es: Jorge Gonzalez * Updated nb: Kjartan Maraas * Updated en_GB: Philip Withnall Help Manual Translations: * Updated C: John Stowers NEW in 0.3.8: ============== * New icons (mejogid) * Fixed #515648, [Patch] Added RGBA support for conduit (Jon Bolt, Andrea Cimitan) * Fixed #516410, Error in GoogleModule loading (John Stowers) * Fixed #516523, RSS FEED of mp3 doesn't download (John Stowers) * Fixed #516567, Please fix conduit.desktop file... (Jose Carlos Garcia Sogo) Translations: None Help Manual Translations: None NEW in 0.3.7: ============== * Update to the latest versions of our shipped static libraries * flickrapi (fixes many Flickr bugs) * pyfacebook * python-gdata (and use this for Picasa support) * libgmail * The Eye of gnome plugin now shows status while synchronizing * Add support for syncing Gmail contacts * Add a 'developer' submenu to the help menu. This is shown if the user is running a development version and contains items which link to the newly improved developer documentation. The linked pages are displayed in conduit's built in web browser. * Make the Conflict preferences per Conduit * Add descriptive icons to the preferences menu * Improvements in two-way contact/tomboy/calendar sync over the network * Use maintainer.py to make the release * Fixed #508645, sort f-spot tag by name (maxxer) * Fixed #509021, F-Spot dataproviders glade incompatibility (maxxer) * Fixed #510091, Make configuration of dps dependant on their position (John Stowers) * Fixed #510094, Conflict Settings should be per conduit (John Stowers) * Fixed #510107, Add support for tomboy tags (and notebooks) (John Stowers) * Fixed #510129, Picasa should use google gdata bindings (Renato Araujo Oliveira Filho) * Fixed #510471, picasa upload should keep filename (Thomas Van Machelen) * Fixed #510523, folder dataprovider changes folder (John Stowers) * Fixed #511017, [GmailModule] Configure dialogue doesn't save data (Julian Rötter) * Fixed #512379, Python warnings about gtkmozembed declaration (John Stowers) * Fixed #512540, Mirror/Delete Option for One-Way-Sync (Thomas Van Machelen) * Fixed #514589, YouTube - Folder synchronization bug (Thomas Van Machelen) * Fixed #514729, GoogleModule.py is a mess (John Stowers) * Fixed #515270, Logger prints entries twice (Thomas Van Machelen) Translations: * Updated ca: Gil Forcada * Updated sv: John Stowers * Updated it: Luca Ferretti Help Manual Translations: * Updated es: Jorge Gonzalez None None None None conduit-0.3.17/gnome-doc-utils.make0000644000175000017500000005410611326116724014046 00000000000000# gnome-doc-utils.make - make magic for building documentation # Copyright (C) 2004-2005 Shaun McCance # # 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. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. ################################################################################ ## @@ Generating Header Files ## @ DOC_H_FILE ## The name of the header file to generate DOC_H_FILE ?= ## @ DOC_H_DOCS ## The input DocBook files for generating the header file DOC_H_DOCS ?= $(DOC_H_FILE): $(DOC_H_DOCS); @rm -f $@.tmp; touch $@.tmp; echo 'const gchar* documentation_credits[] = {' >> $@.tmp list='$(DOC_H_DOCS)'; for doc in $$list; do \ xmlpath="`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`:$(srcdir)/`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`"; \ if ! test -f "$$doc"; then doc="$(srcdir)/$$doc"; fi; \ xsltproc --path "$$xmlpath" $(_credits) $$doc; \ done | sort | uniq \ | awk 'BEGIN{s=""}{n=split($$0,w,"<");if(s!=""&&s!=substr(w[1],1,length(w[1])-1)){print s};if(n>1){print $$0;s=""}else{s=$$0}};END{if(s!=""){print s}}' \ | sed -e 's/\\/\\\\/' -e 's/"/\\"/' -e 's/\(.*\)/\t"\1",/' >> $@.tmp echo ' NULL' >> $@.tmp echo '};' >> $@.tmp echo >> $@.tmp list='$(DOC_H_DOCS)'; for doc in $$list; do \ xmlpath="`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`:$(srcdir)/`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`"; \ if ! test -f "$$doc"; then doc="$(srcdir)/$$doc"; fi; \ docid=`echo "$$doc" | sed -e 's/.*\/\([^/]*\)\.xml/\1/' \ | sed -e 's/[^a-zA-Z_]/_/g' | tr 'a-z' 'A-Z'`; \ echo $$xmlpath; \ ids=`xsltproc --xinclude --path "$$xmlpath" $(_ids) $$doc`; \ for id in $$ids; do \ echo '#define HELP_'`echo $$docid`'_'`echo $$id \ | sed -e 's/[^a-zA-Z_]/_/g' | tr 'a-z' 'A-Z'`' "'$$id'"' >> $@.tmp; \ done; \ echo >> $@.tmp; \ done; cp $@.tmp $@ && rm -f $@.tmp dist-check-gdu: if !HAVE_GNOME_DOC_UTILS @echo "*** GNOME Doc Utils must be installed in order to make dist" @false endif .PHONY: dist-doc-header dist-doc-header: $(DOC_H_FILE) @if test -f "$(DOC_H_FILE)"; then d=; else d="$(srcdir)/"; fi; \ echo "$(INSTALL_DATA) $${d}$(DOC_H_FILE) $(distdir)/$(DOC_H_FILE)"; \ $(INSTALL_DATA) "$${d}$(DOC_H_FILE)" "$(distdir)/$(DOC_H_FILE)"; doc-dist-hook: dist-check-gdu $(if $(DOC_H_FILE),dist-doc-header) .PHONY: clean-doc-header _clean_doc_header = $(if $(DOC_H_FILE),clean-doc-header) clean-local: $(_clean_doc_header) distclean-local: $(_clean_doc_header) mostlyclean-local: $(_clean_doc_header) maintainer-clean-local: $(_clean_doc_header) clean-doc-header: rm -f $(DOC_H_FILE) all: $(DOC_H_FILE) ################################################################################ ## @@ Generating Documentation Files ## @ DOC_MODULE ## The name of the document being built DOC_MODULE ?= ## @ DOC_ID ## The unique identifier for a Mallard document DOC_ID ?= ## @ DOC_PAGES ## Page files in a Mallard document DOC_PAGES ?= ## @ DOC_ENTITIES ## Files included with a SYSTEM entity DOC_ENTITIES ?= ## @ DOC_INCLUDES ## Files included with XInclude DOC_INCLUDES ?= ## @ DOC_FIGURES ## Figures and other external data DOC_FIGURES ?= ## @ DOC_FORMATS ## The default formats to be built and installed DOC_FORMATS ?= docbook _DOC_REAL_FORMATS = $(if $(DOC_USER_FORMATS),$(DOC_USER_FORMATS),$(DOC_FORMATS)) ## @ DOC_LINGUAS ## The languages this document is translated into DOC_LINGUAS ?= _DOC_REAL_LINGUAS = $(if $(filter environment,$(origin LINGUAS)), \ $(filter $(LINGUAS),$(DOC_LINGUAS)), \ $(DOC_LINGUAS)) _DOC_ABS_SRCDIR = @abs_srcdir@ ################################################################################ ## Variables for Bootstrapping _xml2po ?= `which xml2po` _xml2po_mode = $(if $(DOC_ID),mallard,docbook) _db2html ?= `$(PKG_CONFIG) --variable db2html gnome-doc-utils` _db2omf ?= `$(PKG_CONFIG) --variable db2omf gnome-doc-utils` _malrng ?= `$(PKG_CONFIG) --variable malrng gnome-doc-utils` _chunks ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/chunks.xsl _credits ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/credits.xsl _ids ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/ids.xsl if ENABLE_SK _ENABLE_SK = true _skpkgdatadir ?= `scrollkeeper-config --pkgdatadir` _sklocalstatedir ?= `scrollkeeper-config --pkglocalstatedir` _skcontentslist ?= $(_skpkgdatadir)/Templates/C/scrollkeeper_cl.xml endif ################################################################################ ## @@ Rules for OMF Files db2omf_args = \ --stringparam db2omf.basename $(DOC_MODULE) \ --stringparam db2omf.format $(3) \ --stringparam db2omf.dtd \ $(shell xmllint --format $(2) | grep -h PUBLIC | head -n 1 \ | sed -e 's/.*PUBLIC \(\"[^\"]*\"\).*/\1/') \ --stringparam db2omf.lang $(notdir $(patsubst %/$(notdir $(2)),%,$(2))) \ --stringparam db2omf.omf_dir "$(OMF_DIR)" \ --stringparam db2omf.help_dir "$(HELP_DIR)" \ --stringparam db2omf.omf_in "$(_DOC_OMF_IN)" \ $(if $(_ENABLE_SK), \ --stringparam db2omf.scrollkeeper_cl "$(_skcontentslist)") \ $(_db2omf) $(2) ## @ _DOC_OMF_IN ## The OMF input file _DOC_OMF_IN = $(if $(DOC_MODULE),$(wildcard $(_DOC_ABS_SRCDIR)/$(DOC_MODULE).omf.in)) ## @ _DOC_OMF_DB ## The OMF files for DocBook output _DOC_OMF_DB = $(if $(_DOC_OMF_IN), \ $(foreach lc,C $(_DOC_REAL_LINGUAS),$(DOC_MODULE)-$(lc).omf)) $(_DOC_OMF_DB) : $(_DOC_OMF_IN) $(_DOC_OMF_DB) : $(DOC_MODULE)-%.omf : %/$(DOC_MODULE).xml @test "x$(_ENABLE_SK)" != "xtrue" -o -f "$(_skcontentslist)" || { \ echo "The file '$(_skcontentslist)' does not exist." >&2; \ echo "Please check your ScrollKeeper installation." >&2; \ exit 1; } xsltproc -o $@ $(call db2omf_args,$@,$<,'docbook') || { rm -f "$@"; exit 1; } ## @ _DOC_OMF_HTML ## The OMF files for HTML output _DOC_OMF_HTML = $(if $(_DOC_OMF_IN), \ $(foreach lc,C $(_DOC_REAL_LINGUAS),$(DOC_MODULE)-html-$(lc).omf)) $(_DOC_OMF_HTML) : $(_DOC_OMF_IN) $(_DOC_OMF_HTML) : $(DOC_MODULE)-html-%.omf : %/$(DOC_MODULE).xml if ENABLE_SK @test "x$(_ENABLE_SK)" != "xtrue" -o -f "$(_skcontentslist)" || { \ echo "The file '$(_skcontentslist)' does not exist" >&2; \ echo "Please check your ScrollKeeper installation." >&2; \ exit 1; } endif xsltproc -o $@ $(call db2omf_args,$@,$<,'xhtml') || { rm -f "$@"; exit 1; } ## @ _DOC_OMF_ALL ## All OMF output files to be built # FIXME _DOC_OMF_ALL = \ $(if $(filter docbook,$(_DOC_REAL_FORMATS)),$(_DOC_OMF_DB)) \ $(if $(filter html HTML,$(_DOC_REAL_FORMATS)),$(_DOC_OMF_HTML)) .PHONY: omf omf: $(_DOC_OMF_ALL) ################################################################################ ## @@ C Locale Documents ## @ _DOC_C_MODULE ## The top-level documentation file in the C locale _DOC_C_MODULE = $(if $(DOC_MODULE),C/$(DOC_MODULE).xml) ## @ _DOC_C_PAGES ## Page files in a Mallard document in the C locale _DOC_C_PAGES = $(foreach page,$(DOC_PAGES),C/$(page)) ## @ _DOC_C_ENTITIES ## Files included with a SYSTEM entity in the C locale _DOC_C_ENTITIES = $(foreach ent,$(DOC_ENTITIES),C/$(ent)) ## @ _DOC_C_XINCLUDES ## Files included with XInclude in the C locale _DOC_C_INCLUDES = $(foreach inc,$(DOC_INCLUDES),C/$(inc)) ## @ _DOC_C_DOCS ## All documentation files in the C locale _DOC_C_DOCS = \ $(_DOC_C_ENTITIES) $(_DOC_C_INCLUDES) \ $(_DOC_C_PAGES) $(_DOC_C_MODULE) ## @ _DOC_C_DOCS_NOENT ## All documentation files in the C locale, ## except files included with a SYSTEM entity _DOC_C_DOCS_NOENT = \ $(_DOC_C_MODULE) $(_DOC_C_INCLUDES) \ $(_DOC_C_PAGES) ## @ _DOC_C_FIGURES ## All figures and other external data in the C locale _DOC_C_FIGURES = $(if $(DOC_FIGURES), \ $(foreach fig,$(DOC_FIGURES),C/$(fig)), \ $(patsubst $(srcdir)/%,%,$(wildcard $(srcdir)/C/figures/*.png))) ## @ _DOC_C_HTML ## All HTML documentation in the C locale # FIXME: probably have to shell escape to determine the file names _DOC_C_HTML = $(foreach f, \ $(shell xsltproc --xinclude \ --stringparam db.chunk.basename "$(DOC_MODULE)" \ $(_chunks) "C/$(DOC_MODULE).xml"), \ C/$(f).xhtml) ############################################################################### ## @@ Other Locale Documentation ## @ _DOC_POFILES ## The .po files used for translating the document _DOC_POFILES = $(if $(DOC_MODULE)$(DOC_ID), \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(lc)/$(lc).po)) .PHONY: po po: $(_DOC_POFILES) ## @ _DOC_LC_MODULES ## The top-level documentation files in all other locales _DOC_LC_MODULES = $(if $(DOC_MODULE), \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(lc)/$(DOC_MODULE).xml)) ## @ _DOC_LC_PAGES ## Page files in a Mallard document in all other locales _DOC_LC_PAGES = \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach page,$(_DOC_C_PAGES), \ $(lc)/$(notdir $(page)) )) ## @ _DOC_LC_XINCLUDES ## Files included with XInclude in all other locales _DOC_LC_INCLUDES = \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach inc,$(_DOC_C_INCLUDES), \ $(lc)/$(notdir $(inc)) )) ## @ _DOC_LC_HTML ## All HTML documentation in all other locales # FIXME: probably have to shell escape to determine the file names _DOC_LC_HTML = \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach doc,$(_DOC_C_HTML), \ $(lc)/$(notdir $(doc)) )) ## @ _DOC_LC_DOCS ## All documentation files in all other locales _DOC_LC_DOCS = \ $(_DOC_LC_MODULES) $(_DOC_LC_INCLUDES) $(_DOC_LC_PAGES) \ $(if $(filter html HTML,$(_DOC_REAL_FORMATS)),$(_DOC_LC_HTML)) ## @ _DOC_LC_FIGURES ## All figures and other external data in all other locales _DOC_LC_FIGURES = $(foreach lc,$(_DOC_REAL_LINGUAS), \ $(patsubst C/%,$(lc)/%,$(_DOC_C_FIGURES)) ) _DOC_SRC_FIGURES = \ $(foreach fig,$(_DOC_C_FIGURES), $(foreach lc,C $(_DOC_REAL_LINGUAS), \ $(wildcard $(srcdir)/$(lc)/$(patsubst C/%,%,$(fig))) )) $(_DOC_POFILES): @if ! test -d $(dir $@); then \ echo "mkdir $(dir $@)"; \ mkdir "$(dir $@)"; \ fi @if test ! -f $@ -a -f $(srcdir)/$@; then \ echo "cp $(srcdir)/$@ $@"; \ cp "$(srcdir)/$@" "$@"; \ fi; @docs=; \ list='$(_DOC_C_DOCS_NOENT)'; for doc in $$list; do \ docs="$$docs $(_DOC_ABS_SRCDIR)/$$doc"; \ done; \ if ! test -f $@; then \ echo "(cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e $$docs > $(notdir $@).tmp && \ cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp)"; \ (cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e $$docs > $(notdir $@).tmp && \ cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp); \ else \ echo "(cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e -u $(notdir $@) $$docs)"; \ (cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e -u $(notdir $@) $$docs); \ fi # FIXME: fix the dependancy # FIXME: hook xml2po up $(_DOC_LC_DOCS) : $(_DOC_POFILES) $(_DOC_LC_DOCS) : $(_DOC_C_DOCS) if ! test -d $(dir $@); then mkdir $(dir $@); fi if [ -f "C/$(notdir $@)" ]; then d="../"; else d="$(_DOC_ABS_SRCDIR)/"; fi; \ po="$(dir $@)$(patsubst %/$(notdir $@),%,$@).po"; \ if [ -f "$${po}" ]; then po="../$${po}"; else po="$(_DOC_ABS_SRCDIR)/$${po}"; fi; \ (cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e -p "$${po}" \ "$${d}C/$(notdir $@)" > $(notdir $@).tmp && \ cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp) ## @ _DOC_POT ## A pot file _DOC_POT = $(if $(DOC_MODULE),$(DOC_MODULE).pot) .PHONY: pot pot: $(_DOC_POT) $(_DOC_POT): $(_DOC_C_DOCS_NOENT) $(_xml2po) -m $(_xml2po_mode) -e -o $@ $^ ################################################################################ ## @@ All Documentation ## @ _DOC_HTML_ALL ## All HTML documentation, only if it's built _DOC_HTML_ALL = $(if $(filter html HTML,$(_DOC_REAL_FORMATS)), \ $(_DOC_C_HTML) $(_DOC_LC_HTML)) _DOC_HTML_TOPS = $(foreach lc,C $(_DOC_REAL_LINGUAS),$(lc)/$(DOC_MODULE).xhtml) $(_DOC_HTML_TOPS): $(_DOC_C_DOCS) $(_DOC_LC_DOCS) xsltproc -o $@ --xinclude --param db.chunk.chunk_top "false()" --stringparam db.chunk.basename "$(DOC_MODULE)" --stringparam db.chunk.extension ".xhtml" $(_db2html) $(patsubst %.xhtml,%.xml,$@) ################################################################################ ## All all: \ $(_DOC_C_DOCS) $(_DOC_LC_DOCS) \ $(_DOC_OMF_ALL) $(_DOC_DSK_ALL) \ $(_DOC_HTML_ALL) $(_DOC_POFILES) ################################################################################ ## Clean .PHONY: clean-doc-omf clean-doc-dsk clean-doc-lc clean-doc-dir clean-doc-omf: ; rm -f $(_DOC_OMF_DB) $(_DOC_OMF_HTML) clean-doc-dsk: ; rm -f $(_DOC_DSK_DB) $(_DOC_DSK_HTML) clean-doc-lc: rm -f $(_DOC_LC_DOCS) @list='$(_DOC_POFILES)'; for po in $$list; do \ if ! test "$$po" -ef "$(srcdir)/$$po"; then \ echo "rm -f $$po"; \ rm -f "$$po"; \ fi; \ done @for lc in C $(_DOC_REAL_LINGUAS); do \ if test -f "$$lc/.xml2po.mo"; then \ echo "rm -f $$lc/.xml2po.mo"; \ rm -f "$$lc/.xml2po.mo"; \ fi; \ done clean-doc-dir: clean-doc-lc @for lc in C $(_DOC_REAL_LINGUAS); do \ for dir in `find $$lc -depth -type d`; do \ if ! test $$dir -ef $(srcdir)/$$dir; then \ echo "rmdir $$dir"; \ rmdir "$$dir"; \ fi; \ done; \ done _clean_omf = $(if $(_DOC_OMF_IN),clean-doc-omf) _clean_dsk = $(if $(_DOC_DSK_IN),clean-doc-dsk) _clean_lc = $(if $(_DOC_REAL_LINGUAS),clean-doc-lc) _clean_dir = $(if $(DOC_MODULE)$(DOC_ID),clean-doc-dir) clean-local: \ $(_clean_omf) $(_clean_dsk) \ $(_clean_lc) $(_clean_dir) distclean-local: \ $(_clean_omf) $(_clean_dsk) \ $(_clean_lc) $(_clean_dir) mostlyclean-local: \ $(_clean_omf) $(_clean_dsk) \ $(_clean_lc) $(_clean_dir) maintainer-clean-local: \ $(_clean_omf) $(_clean_dsk) \ $(_clean_lc) $(_clean_dir) ################################################################################ ## Dist .PHONY: dist-doc-docs dist-doc-pages dist-doc-figs dist-doc-omf dist-doc-dsk doc-dist-hook: \ $(if $(DOC_MODULE)$(DOC_ID),dist-doc-docs) \ $(if $(_DOC_C_FIGURES),dist-doc-figs) \ $(if $(_DOC_OMF_IN),dist-doc-omf) # $(if $(_DOC_DSK_IN),dist-doc-dsk) dist-doc-docs: $(_DOC_C_DOCS) $(_DOC_LC_DOCS) $(_DOC_POFILES) @for lc in C $(_DOC_REAL_LINGUAS); do \ echo " $(mkinstalldirs) $(distdir)/$$lc"; \ $(mkinstalldirs) "$(distdir)/$$lc"; \ done @list='$(_DOC_C_DOCS) $(_DOC_LC_DOCS) $(_DOC_POFILES)'; \ for doc in $$list; do \ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ docdir=`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ if ! test -d "$(distdir)/$$docdir"; then \ echo "$(mkinstalldirs) $(distdir)/$$docdir"; \ $(mkinstalldirs) "$(distdir)/$$docdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$doc $(distdir)/$$doc"; \ $(INSTALL_DATA) "$$d$$doc" "$(distdir)/$$doc"; \ done dist-doc-figs: $(_DOC_SRC_FIGURES) @list='$(_DOC_C_FIGURES) $(_DOC_LC_FIGURES)'; \ for fig in $$list; do \ if test -f "$$fig"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$fig"; then \ figdir=`echo $$fig | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ if ! test -d "$(distdir)/$$figdir"; then \ echo "$(mkinstalldirs) $(distdir)/$$figdir"; \ $(mkinstalldirs) "$(distdir)/$$figdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$fig $(distdir)/$$fig"; \ $(INSTALL_DATA) "$$d$$fig" "$(distdir)/$$fig"; \ fi; \ done; dist-doc-omf: @if test -f "$(_DOC_OMF_IN)"; then d=; else d="$(srcdir)/"; fi; \ echo "$(INSTALL_DATA) $$d$(_DOC_OMF_IN) $(distdir)/$(notdir $(_DOC_OMF_IN))"; \ $(INSTALL_DATA) "$$d$(_DOC_OMF_IN)" "$(distdir)/$(notdir $(_DOC_OMF_IN))" dist-doc-dsk: @if test -f "$(_DOC_DSK_IN)"; then d=; else d="$(srcdir)/"; fi; \ echo "$(INSTALL_DATA) $$d$(_DOC_DSK_IN) $(distdir)/$(notdir $(_DOC_DSK_IN))"; \ $(INSTALL_DATA) "$$d$(_DOC_DSK_IN)" "$(distdir)/$(notdir $(_DOC_DSK_IN))" ################################################################################ ## Check .PHONY: check-doc-docs check-doc-omf check: \ $(if $(DOC_MODULE),check-doc-docs) \ $(if $(DOC_ID),check-doc-pages) \ $(if $(_DOC_OMF_IN),check-doc-omf) check-doc-docs: $(_DOC_C_DOCS) $(_DOC_LC_DOCS) @for lc in C $(_DOC_REAL_LINGUAS); do \ if test -f "$$lc"; \ then d=; \ xmlpath="$$lc"; \ else \ d="$(srcdir)/"; \ xmlpath="$$lc:$(srcdir)/$$lc"; \ fi; \ echo "xmllint --noout --noent --path $$xmlpath --xinclude --postvalid $$d$$lc/$(DOC_MODULE).xml"; \ xmllint --noout --noent --path "$$xmlpath" --xinclude --postvalid "$$d$$lc/$(DOC_MODULE).xml"; \ done check-doc-pages: $(_DOC_C_PAGES) $(_DOC_LC_PAGES) for lc in C $(_DOC_REAL_LINGUAS); do \ if test -f "$$lc"; \ then d=; \ xmlpath="$$lc"; \ else \ d="$(srcdir)/"; \ xmlpath="$$lc:$(srcdir)/$$lc"; \ fi; \ for page in $(DOC_PAGES); do \ echo "xmllint --noout --noent --path $$xmlpath --xinclude --relaxng $(_malrng) $$d$$lc/$$page"; \ xmllint --noout --noent --path "$$xmlpath" --xinclude --relaxng "$(_malrng)" "$$d$$lc/$$page"; \ done; \ done check-doc-omf: $(_DOC_OMF_ALL) @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \ echo "xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' $$omf"; \ xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' $$omf; \ done ################################################################################ ## Install .PHONY: install-doc-docs install-doc-html install-doc-figs install-doc-omf install-doc-dsk _doc_install_dir = $(if $(DOC_ID),$(DOC_ID),$(DOC_MODULE)) install-data-local: \ $(if $(DOC_MODULE)$(DOC_ID),install-doc-docs) \ $(if $(_DOC_HTML_ALL),install-doc-html) \ $(if $(_DOC_C_FIGURES),install-doc-figs) \ $(if $(_DOC_OMF_IN),install-doc-omf) # $(if $(_DOC_DSK_IN),install-doc-dsk) install-doc-docs: @for lc in C $(_DOC_REAL_LINGUAS); do \ echo "$(mkinstalldirs) $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$lc"; \ $(mkinstalldirs) $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$lc; \ done @list='$(_DOC_C_DOCS) $(_DOC_LC_DOCS)'; for doc in $$list; do \ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ docdir="$$lc/"`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ docdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$docdir"; \ if ! test -d "$$docdir"; then \ echo "$(mkinstalldirs) $$docdir"; \ $(mkinstalldirs) "$$docdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ $(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc; \ done install-doc-figs: @list='$(patsubst C/%,%,$(_DOC_C_FIGURES))'; for fig in $$list; do \ for lc in C $(_DOC_REAL_LINGUAS); do \ figsymlink=false; \ if test -f "$$lc/$$fig"; then \ figfile="$$lc/$$fig"; \ elif test -f "$(srcdir)/$$lc/$$fig"; then \ figfile="$(srcdir)/$$lc/$$fig"; \ else \ figsymlink=true; \ fi; \ figdir="$$lc/"`echo $$fig | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ figdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$figdir"; \ if ! test -d "$$figdir"; then \ echo "$(mkinstalldirs) $$figdir"; \ $(mkinstalldirs) "$$figdir"; \ fi; \ figbase=`echo $$fig | sed -e 's/^.*\///'`; \ if $$figsymlink; then \ echo "cd $$figdir && $(LN_S) -f ../../C/$$fig $$figbase"; \ ( cd "$$figdir" && $(LN_S) -f "../../C/$$fig" "$$figbase" ); \ else \ echo "$(INSTALL_DATA) $$figfile $$figdir$$figbase"; \ $(INSTALL_DATA) "$$figfile" "$$figdir$$figbase"; \ fi; \ done; \ done install-doc-html: echo install-html install-doc-omf: $(mkinstalldirs) $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir) @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \ echo "$(INSTALL_DATA) $$omf $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ $(INSTALL_DATA) $$omf $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf; \ done @if test "x$(_ENABLE_SK)" = "xtrue"; then \ echo "scrollkeeper-update -p $(DESTDIR)$(_sklocalstatedir) -o $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)"; \ scrollkeeper-update -p "$(DESTDIR)$(_sklocalstatedir)" -o "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)"; \ fi; install-doc-dsk: echo install-dsk ################################################################################ ## Uninstall .PHONY: uninstall-doc-docs uninstall-doc-html uninstall-doc-figs uninstall-doc-omf uninstall-doc-dsk uninstall-local: \ $(if $(DOC_MODULE)$(DOC_ID),uninstall-doc-docs) \ $(if $(_DOC_HTML_ALL),uninstall-doc-html) \ $(if $(_DOC_C_FIGURES),uninstall-doc-figs) \ $(if $(_DOC_OMF_IN),uninstall-doc-omf) # $(if $(_DOC_DSK_IN),uninstall-doc-dsk) uninstall-doc-docs: @list='$(_DOC_C_DOCS) $(_DOC_LC_DOCS)'; for doc in $$list; do \ echo " rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ done uninstall-doc-figs: @list='$(_DOC_C_FIGURES) $(_DOC_LC_FIGURES)'; for fig in $$list; do \ echo "rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$fig"; \ rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$fig"; \ done; uninstall-doc-omf: @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \ if test "x$(_ENABLE_SK)" = "xtrue"; then \ echo "scrollkeeper-uninstall -p $(_sklocalstatedir) $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ scrollkeeper-uninstall -p "$(_sklocalstatedir)" "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ fi; \ echo "rm -f $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ rm -f "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ done conduit-0.3.17/intltool-merge.in0000644000175000017500000000000011326116723013451 00000000000000conduit-0.3.17/Makefile.in0000644000175000017500000005651011326116731012245 00000000000000# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/configure AUTHORS COPYING \ ChangeLog INSTALL NEWS TODO install-sh missing mkinstalldirs \ py-compile ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/gnome-doc-utils.m4 \ $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/python.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d "$(distdir)" \ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr "$(distdir)"; }; } am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ BROWSER_IMPL = @BROWSER_IMPL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DATADIRNAME = @DATADIRNAME@ DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPFILEDIR = @DESKTOPFILEDIR@ DISTCHECK_CONFIGURE_FLAGS = --disable-scrollkeeper --disable-nautilus-extension --disable-eog-plugin DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EOG_PLUGIN_DIR = @EOG_PLUGIN_DIR@ EXEEXT = @EXEEXT@ FILE_IMPL = @FILE_IMPL@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MODULEDIR = @MODULEDIR@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGDATADIR = @PKGDATADIR@ PKG_CONFIG = @PKG_CONFIG@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PYTHON = @PYTHON@ PYTHONDIR = @PYTHONDIR@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOTEM_PLUGIN_DIR = @TOTEM_PLUGIN_DIR@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = conduit data po help tools DISTCLEANFILES = \ intltool-extract \ intltool-merge \ intltool-update \ gnome-doc-utils.make EXTRA_DIST = \ NEWS \ TODO \ ChangeLog \ intltool-update.in \ intltool-extract.in \ intltool-merge.in \ gnome-doc-utils.make all: all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ dist-lzma dist-shar dist-tarZ dist-xz dist-zip distcheck \ distclean distclean-generic distclean-local distclean-tags \ distcleancheck distdir distuninstallcheck dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am release: dist scp $(PACKAGE)-$(VERSION).tar.gz jstowers@master.gnome.org: ssh jstowers@master.gnome.org install-module $(PACKAGE)-$(VERSION).tar.gz # ChangeLog generation from nautils distclean-local: if test "$(srcdir)" = "."; then :; else \ rm -f ChangeLog; \ fi ChangeLog: @echo Creating $@ @if test -d "$(srcdir)/.git"; then \ (GIT_DIR=$(top_srcdir)/.git ./missing --run git log 0.3.16.. --stat -M -C --name-status --date=short --no-color) | fmt --split-only > $@.tmp \ && mv -f $@.tmp $@ \ || ($(RM) $@.tmp; \ echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \ (test -f $@ || echo git-log is required to generate this file >> $@)); \ else \ test -f $@ || \ (echo A git checkout and git-log is required to generate ChangeLog >&2 && \ echo A git checkout and git-log is required to generate this file >> $@); \ fi # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: conduit-0.3.17/install-sh0000755000175000017500000003253711326116726012213 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2009-04-28.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then trap '(exit $?); exit' 1 2 13 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; -*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: conduit-0.3.17/intltool-update.in0000644000175000017500000000000011326116723013634 00000000000000