Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Autocomplete Tags in Search and Create, and List Recent #13

Open
wants to merge 11 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions core.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#!/usr/bin/python
# encoding: utf-8

"""
Core shared functions
"""

import queries

def separateTags(query):
textList = []
tags = set([])
items = query.split()
for i in items:
if i.startswith('#'):
tags.add(i[1:])
else:
textList.append(i)
text = ' '.join(textList)
return text.strip(), tags

def autocompleteTags(workflow, LOGGER, query):
"""
populates workflow with autocompletes for tags
"""
LOGGER.debug('autocompleteTags >> query: {!r}'.format(query))

qItems = query.split()
if len(qItems) > 0 and not query.endswith(' '):
last = qItems[-1]
if last.startswith('#'):
tag_results = queries.search_tags_by_title(workflow, LOGGER, last[1:])
for t in tag_results:
tag = '#'+t[0]
# add final to the end of the query
new_qItems = qItems[:-1]
new_qItems.append(tag)
complete = ' '.join(new_qItems) + ' '
workflow.add_item(
title=tag,
autocomplete=complete,
valid=False)

def addToWorkflow(workflow, LOGGER, results):
for r in results:
LOGGER.debug(r)
workflow.add_item(
title=r[1],
subtitle="Open note",
arg=r[0],
valid=True)

def addRecent(workflow, LOGGER):
recent_results = queries.list_recent(workflow, LOGGER)
addToWorkflow(workflow, LOGGER, recent_results)
64 changes: 25 additions & 39 deletions create.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,21 @@
import sys
from urllib import quote
from workflow import Workflow, ICON_SYNC
import clipboard
import queries
import core

LOGGER = None

# Update workflow from GitHub repo
UPDATE_SETTINGS = {'github_slug': 'chrisbro/alfred-bear'}
SHOW_UPDATES = True


def main(workflow):
"""
I'm just here so I don't get fined by pylint
"""

if SHOW_UPDATES and workflow.update_available:
workflow.add_item('A new version is available',
'Action this item to install the update',
Expand All @@ -31,62 +33,46 @@ def main(workflow):
query = workflow.args[0]
LOGGER.debug(query)

tags = extract_tags(query)
core.autocompleteTags(workflow, LOGGER, query)

# construct result
title, tags = core.separateTags(query)

tags_string = ', '.join(tags)
title_string = strip_tags_from_string(tags, query)
query_string = create_query_output(query, tags)
LOGGER.debug(title_string)
LOGGER.debug(query_string)
query_string = constructCreateQuery(title, tags)

LOGGER.debug('title: {!r}'.format(title))
LOGGER.debug('query_string: {!r}'.format(query_string))
if tags:
workflow.add_item(title='Create note with title ' + title_string,
workflow.add_item(title="Create note with title '{}' ".format(title),
subtitle='Tags: ' + tags_string, arg=query_string, valid=True)
else:
workflow.add_item(title='Create note with title ' + title_string,
workflow.add_item(title="Create note with title '{}'".format(title),
arg=query_string, valid=True)

workflow.send_feedback()


def create_query_output(title, tags):
"""
Generates what query parameters to pass to the Alfred callback step.
"""

def constructCreateQuery(title, tags):
query_string = ''
if title:
query_string += 'title=' + quote(title.encode('utf-8'))
query_string += '&text=' + quote(title.encode('utf-8'))

if tags:
tags_string = ''
for tag in tags:
tags_string += quote(tag.encode('utf-8')) + ','
query_string = strip_tags_from_string(tags, query_string)
tags_string = tags_string[:-1]
query_string += '&tags=' + tags_string

LOGGER.debug(query_string)


# use clipboard as contents if it has text
clip_string = clipboard.paste()
if clip_string != '':
query_string += '&text=' + quote(clip_string.encode('utf-8'))
else:
# other wise empty
query_string += '&text=' + quote(''.encode('utf-8'))
LOGGER.debug('query_string: {!r}'.format(query_string))
return query_string


def strip_tags_from_string(tags, query):
"""
Yanks out all the hashtags from a string.
"""
for tag in tags:
query = query.replace(quote('#' + tag.encode('utf-8')), '')
query = query.replace('#' + tag, '')
return query


def extract_tags(query):
"""
Gets all the tags from the query.
"""
return set(part[1:] for part in query.split() if part.startswith('#'))


if __name__ == '__main__':
WORKFLOW = Workflow(update_settings=UPDATE_SETTINGS)
LOGGER = WORKFLOW.logger
Expand Down
101 changes: 23 additions & 78 deletions info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<array>
<dict>
<key>destinationuid</key>
<string>A5A16924-B144-4D1A-8E47-FBA4467F58A7</string>
<string>9C99DC50-7088-4463-912E-65308ED979CC</string>
<key>modifiers</key>
<integer>0</integer>
<key>modifiersubtext</key>
Expand All @@ -23,20 +23,17 @@
<array>
<dict>
<key>destinationuid</key>
<string>B7C7DDC1-B797-4FF0-8AA0-0362C306C19A</string>
<string>8ADA234F-D806-45F7-AFC5-814BD9A693F1</string>
<key>modifiers</key>
<integer>0</integer>
<integer>1048576</integer>
<key>modifiersubtext</key>
<string></string>
<string>Create in Background</string>
<key>vitoclose</key>
<false/>
</dict>
</array>
<key>A10CF1DB-F3D4-4248-A45A-0954FE2C61E7</key>
<array>
<dict>
<key>destinationuid</key>
<string>34803D0C-B70E-4032-96FA-E0A5E179236A</string>
<string>B7C7DDC1-B797-4FF0-8AA0-0362C306C19A</string>
<key>modifiers</key>
<integer>0</integer>
<key>modifiersubtext</key>
Expand All @@ -56,34 +53,17 @@
<string>Bear</string>
<key>objects</key>
<array>
<dict>
<key>config</key>
<dict>
<key>browser</key>
<string></string>
<key>spaces</key>
<string></string>
<key>url</key>
<string>bear://x-callback-url/open-note?id={query}</string>
<key>utf8</key>
<true/>
</dict>
<key>type</key>
<string>alfred.workflow.action.openurl</string>
<key>uid</key>
<string>A5A16924-B144-4D1A-8E47-FBA4467F58A7</string>
<key>version</key>
<integer>1</integer>
</dict>
<dict>
<key>config</key>
<dict>
<key>alfredfiltersresults</key>
<false/>
<key>alfredfiltersresultsmatchmode</key>
<integer>0</integer>
<key>argumenttrimmode</key>
<integer>0</integer>
<key>argumenttype</key>
<integer>0</integer>
<integer>1</integer>
<key>escaping</key>
<integer>102</integer>
<key>keyword</key>
Expand Down Expand Up @@ -123,45 +103,23 @@
<dict>
<key>config</key>
<dict>
<key>alfredfiltersresults</key>
<key>concurrently</key>
<false/>
<key>argumenttrimmode</key>
<integer>0</integer>
<key>argumenttype</key>
<integer>0</integer>
<key>escaping</key>
<integer>102</integer>
<key>keyword</key>
<string>bst</string>
<key>queuedelaycustom</key>
<integer>3</integer>
<key>queuedelayimmediatelyinitially</key>
<true/>
<key>queuedelaymode</key>
<integer>0</integer>
<key>queuemode</key>
<integer>1</integer>
<key>runningsubtext</key>
<string>Searching...</string>
<key>script</key>
<string>/usr/bin/python search.py -t a "{query}"</string>
<string>open "bear://x-callback-url/open-note?id={query}&amp;show_window=yes&amp;new_window=yes"</string>
<key>scriptargtype</key>
<integer>0</integer>
<key>scriptfile</key>
<string></string>
<key>subtext</key>
<string></string>
<key>title</key>
<string>Search Bear Notes by Tag</string>
<key>type</key>
<integer>0</integer>
<key>withspace</key>
<true/>
</dict>
<key>type</key>
<string>alfred.workflow.input.scriptfilter</string>
<string>alfred.workflow.action.script</string>
<key>uid</key>
<string>A10CF1DB-F3D4-4248-A45A-0954FE2C61E7</string>
<string>9C99DC50-7088-4463-912E-65308ED979CC</string>
<key>version</key>
<integer>2</integer>
</dict>
Expand All @@ -173,15 +131,7 @@
<key>escaping</key>
<integer>102</integer>
<key>script</key>
<string>orig_query={query}
echo $orig_query
if [[ $orig_query == ":t:"* ]]; then
new_query=${orig_query:3}
open "bear://x-callback-url/open-tag?name=$new_query"
else
new_query=${orig_query:3}
open "bear://x-callback-url/open-note?id=$new_query"
fi</string>
<string>open "bear://x-callback-url/create?{query}&amp;show_window=no"</string>
<key>scriptargtype</key>
<integer>0</integer>
<key>scriptfile</key>
Expand All @@ -192,7 +142,7 @@ fi</string>
<key>type</key>
<string>alfred.workflow.action.script</string>
<key>uid</key>
<string>34803D0C-B70E-4032-96FA-E0A5E179236A</string>
<string>8ADA234F-D806-45F7-AFC5-814BD9A693F1</string>
<key>version</key>
<integer>2</integer>
</dict>
Expand All @@ -201,6 +151,8 @@ fi</string>
<dict>
<key>alfredfiltersresults</key>
<false/>
<key>alfredfiltersresultsmatchmode</key>
<integer>0</integer>
<key>argumenttrimmode</key>
<integer>0</integer>
<key>argumenttype</key>
Expand Down Expand Up @@ -249,7 +201,7 @@ fi</string>
<key>escaping</key>
<integer>102</integer>
<key>script</key>
<string>open "bear://x-callback-url/create?{query}"</string>
<string>open "bear://x-callback-url/create?{query}&amp;show_window=yes&amp;new_window=yes"</string>
<key>scriptargtype</key>
<integer>0</integer>
<key>scriptfile</key>
Expand Down Expand Up @@ -290,28 +242,21 @@ To install, download a released alfred-bear.alfredworkflow and double-click to o
<key>ypos</key>
<integer>50</integer>
</dict>
<key>34803D0C-B70E-4032-96FA-E0A5E179236A</key>
<dict>
<key>xpos</key>
<integer>520</integer>
<key>ypos</key>
<integer>180</integer>
</dict>
<key>74B5AEA1-6AFC-4867-A76D-0FD11694A60D</key>
<dict>
<key>xpos</key>
<integer>280</integer>
<key>ypos</key>
<integer>310</integer>
<integer>190</integer>
</dict>
<key>A10CF1DB-F3D4-4248-A45A-0954FE2C61E7</key>
<key>8ADA234F-D806-45F7-AFC5-814BD9A693F1</key>
<dict>
<key>xpos</key>
<integer>280</integer>
<integer>520</integer>
<key>ypos</key>
<integer>180</integer>
<integer>190</integer>
</dict>
<key>A5A16924-B144-4D1A-8E47-FBA4467F58A7</key>
<key>9C99DC50-7088-4463-912E-65308ED979CC</key>
<dict>
<key>xpos</key>
<integer>520</integer>
Expand All @@ -323,7 +268,7 @@ To install, download a released alfred-bear.alfredworkflow and double-click to o
<key>xpos</key>
<integer>520</integer>
<key>ypos</key>
<integer>310</integer>
<integer>320</integer>
</dict>
</dict>
<key>version</key>
Expand Down
Loading