diff options
Diffstat (limited to 'jtlib/plugins/new_plugin.py')
-rw-r--r-- | jtlib/plugins/new_plugin.py | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/jtlib/plugins/new_plugin.py b/jtlib/plugins/new_plugin.py new file mode 100644 index 0000000..b10b4a1 --- /dev/null +++ b/jtlib/plugins/new_plugin.py @@ -0,0 +1,82 @@ +# Copyright 2010-2015 Lars Wirzenius +# +# 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 3 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, see <http://www.gnu.org/licenses/>. + + +import cliapp +import os +import shutil +import string +import time + +import jtlib + + +class NewCommand(cliapp.Plugin): + + _default_new_note_template = '''\ +[[!meta title="%(title)s"]] +[[!tag ]] +[[!meta date="%(date)s"]] +%(topiclink)s + +''' + + def enable(self): + self.app.add_subcommand('new', self.run, arg_synopsis='TITLE') + + def run(self, args): + '''Create a new journal entry draft.''' + + self._check_args_and_settings(args) + + topic = self.app.settings['topic'] + values = { + 'title': args[0], + 'date': time.strftime('%Y-%m-%d %H:%M', self.app.now_tuple), + 'topiclink': self._get_topic_link(topic), + } + + drafts_dir = jtlib.DraftsDirectory(self.app.drafts_dir()) + drafts_dir.create_if_missing() + draft_id = drafts_dir.create_draft( + self._get_new_note_template() % values) + self.app.edit_file(drafts_dir.get_draft_pathname(draft_id)) + + def _check_args_and_settings(self, args): + if not args: + raise cliapp.AppException('Usage: journal-note new TITLE') + + self.app.settings.require('source') + topic = self.app.settings['topic'] + if topic and not self._topic_page_exists(topic): + raise cliapp.AppException('Topic %s does not exist yet' % topic) + + def _topic_page_exists(self, topic): + pathname = os.path.join(self.app.settings['source'], topic + '.mdwn') + return os.path.exists(pathname) + + def _get_topic_link(self, topic): + if topic: + return '[[!meta link="%s"]]' % topic + else: + return '' + + def _get_new_note_template(self): + filename = self.app.settings['new-note-template'] + if filename: + with open(filename) as f: + return f.read() + else: + return self._default_new_note_template |