diff --git a/Changelog.draft.rst b/Changelog.draft.rst index bf0b460..76a0ea3 100644 --- a/Changelog.draft.rst +++ b/Changelog.draft.rst @@ -10,24 +10,11 @@ others. `WIP (coming releases)` ======================= -* Gmail "realdelete" is considered harmful and has the potential for data loss. Analysis at http://article.gmane.org/gmane.mail.imap.offlineimap.general/5265 -Warnings were added to offlineimap.conf - New Features ------------ Changes ------- -* Rather than to write out the nametrans'lated folder names for mbnames, - we now write out the local untransformed box names. This is generally - what we want. This became relevant since we support nametrans rules on - the local side since only a short time. Reported by Paul Collignan. - -* Some sanity checks and improved error messages. - -* Revert 6.5.1.1 change to use public imaplib2 function, it was reported to - not always work. - Bug Fixes --------- diff --git a/Changelog.rst b/Changelog.rst index f7a7dd3..53a8a0c 100644 --- a/Changelog.rst +++ b/Changelog.rst @@ -11,17 +11,27 @@ ChangeLog on releases. And because I'm lazy, it will also be used as a draft for the releases announces. -OfflineIMAP v6.5.2-rc1 (2012-01-09) -=================================== -Commits v6.5.1.1 - v6.5.2-rc1: -note: Proper Changelog still in Changelog-draft.rst -d72bb88 Improve error message -3284e01 Revert "use .response() rather _get_untagged_response()" -81f194a mbnames should write out local and not nametransformed box names -7184ec2 Sanity check return value of UIDVALIDTY response -50de217 Allow to pass 'force' arg to selectro() to enforce a new select -ed71805 Changelog entry about "realdelete" option -0a275b9 Add scary warnings about "realdelete" option +OfflineIMAP v6.5.2 (2012-01-17) +=============================== + +* Gmail "realdelete" option is considered harmful and has the potential + for data loss. Analysis at + http://article.gmane.org/gmane.mail.imap.offlineimap.general/5265 + Warnings were added to offlineimap.conf + +* Rather than write out the nametrans'lated folder names for mbnames, we + now write out the local untransformed box names. This is generally + what we want. This became relevant since we support nametrans rules on + the local side since only a short time. Reported by Paul Collignan. + +* Some sanity checks and improved error messages. + +* Revert 6.5.1.1 change to use public imaplib2 function, it was reported to + not always work. + +* Don't fail when ~/netrc is not readable by us. + +* Don't emit noisy regular sleeping announcements in Basic UI. OfflineIMAP v6.5.1.2 (2012-01-07) - "Baby steps" ================================================ diff --git a/docs/INSTALL.rst b/docs/INSTALL.rst index e2ed87a..d14c574 100644 --- a/docs/INSTALL.rst +++ b/docs/INSTALL.rst @@ -1,81 +1,90 @@ .. -*- coding: utf-8 -*- - -.. _OfflineIMAP: https://github.com/nicolas33/offlineimap - -.. contents:: -.. sectnum:: - -============= -Prerequisites -============= - -In order to use `OfflineIMAP`_, you need to have these conditions satisfied: - -1. Your mail server must support IMAP. Most Internet Service Providers and - corporate networks do, and most operating systems have an IMAP implementation - readily available. A special Gmail mailbox type is available to interface with - Gmail's IMAP front-end. - -2. You must have Python version 2.6 or above installed. If you are running on - Debian GNU/Linux, this requirement will automatically be taken care of for you. - If you do not have Python already, check with your system administrator or - operating system vendor; or, download it from the Python website. If you intend - to use the SSL interface, your Python must have been built with SSL support. - -3. Have a mail reader that supports the Maildir mailbox format. Most modern - mail readers have this support built-in, so you can choose from a wide variety - of mail servers. This format is also known as the "qmail" format, so any mail - reader compatible with it will work with `OfflineIMAP`_. If you do not have a - mail reader that supports Maildir, you can often install a local IMAP server and - point both `OfflineIMAP`_ and your mail reader at it. - +.. _OfflineIMAP: https://github.com/spaetz/offlineimap +.. _OLI_git_repo: git://github.com/spaetz/offlineimap.git ============ Installation ============ -You have three options: +.. contents:: +.. .. sectnum:: -1. a system-wide installation with Debian -2. a system-wide installation with other systems -3. a single-user installation. You can checkout the latest version of - `OfflineIMAP`_ from official `OfflineIMAP`_ repository. +------------- +Prerequisites +------------- + +In order to use `OfflineIMAP`_, you need to have these conditions satisfied: + +1. Your mail server must support IMAP. Mail access via POP is not + supported. A special Gmail mailbox type is available to interface + with Gmail's IMAP front-end, although Gmail has a very peculiar and + non-standard implementation of its IMAP interface. + +2. You must have Python version 2.6 or above installed. If you are + running on Debian GNU/Linux, this requirement will automatically be + taken care of for you. If you intend to use the SSL interface, + your Python must have been built with SSL support. + +3. If you use OfflineImap as an IMAP<->Maildir synchronizer, you will + obviously need to have a mail reader that supports the Maildir + mailbox format. Most modern mail readers have this support built-in, + so you can choose from a wide variety of mail servers. This format + is also known as the "qmail" format, so any mail reader compatible + with it will work with `OfflineIMAP`_. -System-Wide Installation, Debian -================================ +------------ +Installation +------------ -If you are tracking Debian unstable, you may install `OfflineIMAP`_ by simply -running the following command as root:: +Installing OfflineImap should usually be quite easy, as you can simply unpack and run OfflineImap in place if you wish to do so. There are a number of options though: - apt-get install offlineimap +#. system-wide :ref:`installation via your distribution package manager ` +#. system-wide or single user :ref:`installation from the source package ` +#. system-wide or single user :ref:`installation from a git checkout ` -If you are not tracking Debian unstable, download the Debian `.deb` package from -the `OfflineIMAP`_ website and then run ``dpkg -i`` to install the downloaded -package. Then, skip to below. You will type offlineimap to invoke the -program. +Having installed OfflineImap, you will need to configure it, to be actually useful. Please check the :ref:`Configuration` section in the :doc:`MANUAL` for more information on the configuration step. -System-Wide Installation, Other -=============================== +.. _inst_pkg_man: -Check your distribution packaging tool, OfflineIMAP may already be packaged for -you. +System-Wide Installation via distribution +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +The easiest way to install OfflineIMAP is via your distribution's package manager. OfflineImap is available under the name `offlineimap` in most Linux and BSD distributions. -System-Wide Installation, From source -===================================== -Get your own copy of the official git repository at `OfflineIMAP`_:: +.. _inst_src_tar: - git clone git://github.com/nicolas33/offlineimap.git +Installation from source package +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Download the latest source archive from our `download page `_. Simply click the "Download as .zip" or "Download as .tar.gz" buttons to get the latest "stable" code from the master branch. If you prefer command line, you will want to use: + wget https://github.com/spaetz/offlineimap/tarball/master -This will download all the sources with history. By default, git set up the -local master branch up which is most likely what you want. If not, you can -checkout a particular release:: +Unpack and continue with the :ref:`system-wide installation ` or the :ref:`single-user installation ` section. + + +.. _inst_git: + +Installation from git checkout +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Get your own copy of the `official git repository `_ at `OfflineIMAP`_:: + + git clone git://github.com/spaetz/offlineimap.git + +This will download the source with history. By default, git sets up the +`master` branch up, which is most likely what you want. If not, you can +checkout a particular release like this:: cd offlineimap - git checkout -b local_version v6.3.3 + git checkout v6.5.2.1 -The latter creates a local branch called "local_version" of the v6.3.3 release. +You have now a source tree available and proceed with either the :ref:`system-wide installation ` or the :ref:`single-user installation `. + + +.. _system_wide_inst: + +System-wide installation +++++++++++++++++++++++++ Then run these commands, to build the python package:: @@ -86,47 +95,38 @@ Finally, install the program (as root):: python setup.py install -Next, proceed to below. You will type offlineimap to invoke the program. +Next, proceed to below. You tofflineimap to invoke the program. -Single-Account Installation -=========================== + +.. _single_user_inst: + +Single-user installation +++++++++++++++++++++++++ Download the git repository as described above. Instead of installing the program as root, you type `./offlineimap.py`; there is no installation step necessary. -============= -Configuration -============= - -`OfflineIMAP`_ is regulated by a configuration file that is normally stored in -`~/.offlineimaprc`. `OfflineIMAP`_ ships with a file named `offlineimap.conf` -that you should copy to that location and then edit. This file is vital to -proper operation of the system; it sets everything you need to run -`OfflineIMAP`_. Full documentation for the configuration file is included -within the sample file. - - -`OfflineIMAP`_ also ships a file named `offlineimap.conf.minimal` that you can -also try. It's useful if you want to get started with the most basic feature -set, and you can read about other features later with `offlineimap.conf`. - - -=============== +--------- Uninstall -=============== +--------- If you installed a system-wide installation via "python setup.py -install", there are a few files to purge to uninstall it again. I assume -that /usr/local is the standard prefix that your system and you use -python 2.7. Adapt to your system. In that case you need to: +install", there are a few files to purge to cleanly uninstall +`OfflineImap`_ again. Assuming that `/usr/local` is the standard prefix of +your system and that you use python 2.7, you need to: + +#) Delete the OfflineImap installation itself:: -1) Delete: /usr/local/lib/python2.7/dist-packages/offlineimap-6.4.4.egg-info /usr/local/lib/python2.7/dist-packages/offlineimap -2) Delete the cache at (default location) ~/.offlineimap - Delete your manually created (default loc) ~/.offlineimaprc + In case, you did the single-user installation, simply delete your + offlineimap directory. + +#) Delete all files that OfflineImap creates during its operation. + - The cache at (default location) ~/.offlineimap + - Your manually created (default loc) ~/.offlineimaprc (It is possible that you created those in different spots) That's it. Have fun without OfflineImap. diff --git a/docs/MANUAL.rst b/docs/MANUAL.rst index da09141..21a5dd6 100644 --- a/docs/MANUAL.rst +++ b/docs/MANUAL.rst @@ -43,6 +43,23 @@ Most configuration is done via the configuration file. However, any setting can OfflineImap is well suited to be frequently invoked by cron jobs, or can run in daemon mode to periodically check your email (however, it will exit in some error situations). +.. _configuration: + +Configuration +============= + +`OfflineIMAP`_ is regulated by a configuration file that is normally stored in +`~/.offlineimaprc`. `OfflineIMAP`_ ships with a file named `offlineimap.conf` +that you should copy to that location and then edit. This file is vital to +proper operation of the system; it sets everything you need to run +`OfflineIMAP`_. Full documentation for the configuration file is included +within the sample file. + + +`OfflineIMAP`_ also ships a file named `offlineimap.conf.minimal` that you can +also try. It's useful if you want to get started with the most basic feature +set, and you can read about other features later with `offlineimap.conf`. + Check out the `Use Cases`_ section for some example configurations. diff --git a/docs/dev-doc-src/API.rst b/docs/dev-doc-src/API.rst new file mode 100644 index 0000000..c901938 --- /dev/null +++ b/docs/dev-doc-src/API.rst @@ -0,0 +1,55 @@ +.. OfflineImap API documentation + +.. currentmodule:: offlineimap + +Welcome to :mod:`offlineimaps`'s documentation +============================================== + +Within :mod:`offlineimap`, the classes :class:`OfflineImap` provides the high-level functionality. The rest of the classes should usually not needed to be touched by the user. Email repositories are represented by a :class:`offlineimap.repository.Base.BaseRepository` or derivatives (see :mod:`offlineimap.repository` for details). A folder within a repository is represented by a :class:`offlineimap.folder.Base.BaseFolder` or any derivative from :mod:`offlineimap.folder`. + +This page contains the main API overview of OfflineImap |release|. + +OfflineImap can be imported as:: + + from offlineimap import OfflineImap + +:mod:`offlineimap` -- The OfflineImap module +============================================= + +.. module:: offlineimap + +.. autoclass:: offlineimap.OfflineImap(cmdline_opts = None) + + + .. automethod:: run + + .. automethod:: parse_cmd_options + +.. .. autoattribute:: ui + + :todo: Document + +:class:`offlineimap.account` +============================ + +An :class:`accounts.Account` connects two email repositories that are to be synced. It comes in two flavors, normal and syncable. + +.. autoclass:: offlineimap.accounts.Account + +.. autoclass:: offlineimap.accounts.SyncableAccount + :members: + :inherited-members: + + .. autodata:: ui + + Contains the current :mod:`offlineimap.ui`, and can be used for logging etc. + +:exc:`OfflineImapError` -- A Notmuch execution error +-------------------------------------------------------- + +.. autoexception:: offlineimap.error.OfflineImapError + :members: + + This execption inherits directly from :exc:`Exception` and is raised + on errors during the offlineimap execution. It has an attribute + `severity` that denotes the severity level of the error. diff --git a/docs/dev-doc-src/FAQ.rst b/docs/dev-doc-src/FAQ.rst new file mode 120000 index 0000000..e3ca8b5 --- /dev/null +++ b/docs/dev-doc-src/FAQ.rst @@ -0,0 +1 @@ +../FAQ.rst \ No newline at end of file diff --git a/docs/dev-doc-src/INSTALL.rst b/docs/dev-doc-src/INSTALL.rst new file mode 120000 index 0000000..356deb7 --- /dev/null +++ b/docs/dev-doc-src/INSTALL.rst @@ -0,0 +1 @@ +../INSTALL.rst \ No newline at end of file diff --git a/docs/dev-doc-src/MANUAL.rst b/docs/dev-doc-src/MANUAL.rst new file mode 120000 index 0000000..a45b3ee --- /dev/null +++ b/docs/dev-doc-src/MANUAL.rst @@ -0,0 +1 @@ +../MANUAL.rst \ No newline at end of file diff --git a/docs/dev-doc-src/conf.py b/docs/dev-doc-src/conf.py index f583a9c..e961ab2 100644 --- a/docs/dev-doc-src/conf.py +++ b/docs/dev-doc-src/conf.py @@ -94,7 +94,7 @@ pygments_style = 'sphinx' # The theme to use for HTML and HTML Help pages. Major themes that come with # Sphinx are currently 'default' and 'sphinxdoc'. html_theme = 'default' - +#html_style = '' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. diff --git a/docs/dev-doc-src/index.rst b/docs/dev-doc-src/index.rst index 7cf27e2..e1b957e 100644 --- a/docs/dev-doc-src/index.rst +++ b/docs/dev-doc-src/index.rst @@ -1,69 +1,42 @@ .. OfflineImap documentation master file +.. _OfflineImap: http://offlineimap.org -.. currentmodule:: offlineimap Welcome to :mod:`offlineimaps`'s documentation ============================================== -The :mod:`offlineimap` module provides the user interface for synchronization between IMAP servers and MailDirs or between IMAP servers. The homepage containing the source code repository can be found at the `offlineimap homepage `_. The following provides the developer documentation for those who are interested in modifying the source code or otherwise peek into the OfflineImap internals. End users might want to check the MANUAL, our INSTALLation instructions, and the FAQ. +`OfflineImap`_ synchronizes email between an IMAP server and a MailDir or between two IMAP servers. It offers very powerful and flexible configuration options, that allow things such as the filtering of folders, transposing of names via static configuration or python scripting. It plays well with mutt and other MailDir consuming email clients. + +The documentation contains the end user documentation in a first part. It also contains use cases and example configurations. It is followed by the internal :doc:`API documentation ` for those interested in modifying the source code or otherwise peek into the OfflineImap internals in a second part. + + +If you just want to get started with minimal fuzz, have a look at our `online quick start guide `_. Do note though, that our configuration options are many and powerful. Perusing our precious documentation does often pay off! + +More information on specific topics can be found on the following pages: + +**User documentation** + * :doc:`installation/uninstall ` + * :doc:`user manual/Configuration ` + * :doc:`command line options ` + * :doc:`Frequently Asked Questions ` + +**Developer documentation** + * :doc:`API documentation ` for internal details on the + :mod:`offlineimap` module + +.. toctree:: + :hidden: + + INSTALL + MANUAL + offlineimap + FAQ + + API + repository + ui -Within :mod:`offlineimap`, the classes :class:`OfflineImap` provides the high-level functionality. The rest of the classes should usually not needed to be touched by the user. Email repositories are represented by a :class:`offlineimap.repository.Base.BaseRepository` or derivatives (see :mod:`offlineimap.repository` for details). A folder within a repository is represented by a :class:`offlineimap.folder.Base.BaseFolder` or any derivative from :mod:`offlineimap.folder`. .. moduleauthor:: John Goerzen, and many others. See AUTHORS and the git history for a full list. :License: This module is covered under the GNU GPL v2 (or later). - -This page contains the main API overview of OfflineImap |release|. - -OfflineImap can be imported as:: - - from offlineimap import OfflineImap - -More information on specific topics can be found on the following pages: - -.. toctree:: - :maxdepth: 1 - - repository - ui - offlineimap - -:mod:`offlineimap` -- The OfflineImap module -============================================= - -.. module:: offlineimap - -.. autoclass:: offlineimap.OfflineImap(cmdline_opts = None) - - .. automethod:: lock - - .. automethod:: run - -.. .. autoattribute:: ui - - :todo: Document - -:class:`offlineimap.account` -============================ - -An :class:`accounts.Account` connects two email repositories that are to be synced. It comes in two flavors, normal and syncable. - -.. autoclass:: offlineimap.accounts.Account - -.. autoclass:: offlineimap.accounts.SyncableAccount - :members: - :inherited-members: - - .. autodata:: ui - - Contains the current :mod:`offlineimap.ui`, and can be used for logging etc. - -:exc:`OfflineImapError` -- A Notmuch execution error --------------------------------------------------------- - -.. autoexception:: offlineimap.error.OfflineImapError - :members: - - This execption inherits directly from :exc:`Exception` and is raised - on errors during the offlineimap execution. It has an attribute - `severity` that denotes the severity level of the error. diff --git a/offlineimap/__init__.py b/offlineimap/__init__.py index 99fc2b0..6b7b404 100644 --- a/offlineimap/__init__.py +++ b/offlineimap/__init__.py @@ -1,7 +1,7 @@ __all__ = ['OfflineImap'] __productname__ = 'OfflineIMAP' -__version__ = "6.5.2-rc1" +__version__ = "6.5.2" __copyright__ = "Copyright 2002-2012 John Goerzen & contributors" __author__ = "John Goerzen" __author_email__= "john@complete.org" diff --git a/offlineimap/ui/TTY.py b/offlineimap/ui/TTY.py index cedd8a6..2b3e834 100644 --- a/offlineimap/ui/TTY.py +++ b/offlineimap/ui/TTY.py @@ -84,3 +84,19 @@ class TTYUI(UIBase): else: UIBase.mainException(self) + def sleeping(self, sleepsecs, remainingsecs): + """Sleep for sleepsecs, display remainingsecs to go. + + Does nothing if sleepsecs <= 0. + Display a message on the screen if we pass a full minute. + + This implementation in UIBase does not support this, but some + implementations return 0 for successful sleep and 1 for an + 'abort', ie a request to sync immediately. + """ + if sleepsecs > 0: + if remainingsecs//60 != (remainingsecs-sleepsecs)//60: + self.logger.info("Next refresh in %.1f minutes" % ( + remainingsecs/60.0)) + time.sleep(sleepsecs) + return 0 diff --git a/offlineimap/ui/UIBase.py b/offlineimap/ui/UIBase.py index dc9e935..66ecd4f 100644 --- a/offlineimap/ui/UIBase.py +++ b/offlineimap/ui/UIBase.py @@ -493,7 +493,7 @@ class UIBase(object): """ if sleepsecs > 0: if remainingsecs//60 != (remainingsecs-sleepsecs)//60: - self.logger.info("Next refresh in %.1f minutes" % ( + self.logger.debug("Next refresh in %.1f minutes" % ( remainingsecs/60.0)) time.sleep(sleepsecs) return 0