Skip to content

Commit

Permalink
Fixes #4 / Fixes #7 - sort by frequency / fit long messages into UI (#8)
Browse files Browse the repository at this point in the history
  • Loading branch information
briangonzalez committed Aug 4, 2017
1 parent 7e0d287 commit 23be7c8
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 51 deletions.
45 changes: 26 additions & 19 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,33 @@ const helpers = require('./lib/applescript-helpers.js');

const input = (alfy.input || 'brian this is a message').split(' ');
const query = input[0];
const message = input.slice(1, input.length).join(' ');
const message = input.slice(1, input.length).join(' ').trim();

(async () => {
let output = await helpers.buddySearch(query);
if (!output) {
return alfy.output([{
title: `No results found for ${query}`,
subtitle: 'Please try another query'
}]);
}
let output = await helpers.buddySearch(query);
if (!output) {
return alfy.output([{
title: `No results found for ${query}`,
subtitle: 'Please try another query'
}]);
}

alfy.output(output.map(buddy => {
return {
title: buddy.name,
subtitle: message ? `Send "${message}" to ${buddy.handle}` : `Type to send message to ${buddy.handle}`,
arg: JSON.stringify({
handle: buddy.handle,
name: buddy.name,
message
})
}
}));
alfy.output(output.map(buddy => {
let displayMessage = message
if (message.length > 60) {
const first = message.slice(0, 20)
const last = message.slice(message.length - 20, message.length)
displayMessage = `${first}.............${last}`
}

return {
title: buddy.name,
subtitle: message ? `Send "${displayMessage}" to ${buddy.handle}` : `Type to send message to ${buddy.handle}`,
arg: JSON.stringify({
handle: buddy.handle,
name: buddy.name,
message
})
}
}));
})()
46 changes: 24 additions & 22 deletions info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,16 @@
<key>disabled</key>
<false/>
<key>name</key>
<string>messages</string>
<string>Messages</string>
<key>objects</key>
<array>
<dict>
<key>config</key>
<dict>
<key>alfredfiltersresults</key>
<false/>
<key>argumenttrimmode</key>
<integer>0</integer>
<key>argumenttype</key>
<integer>0</integer>
<key>escaping</key>
Expand Down Expand Up @@ -88,27 +90,6 @@
<key>version</key>
<integer>2</integer>
</dict>
<dict>
<key>config</key>
<dict>
<key>lastpathcomponent</key>
<false/>
<key>onlyshowifquerypopulated</key>
<false/>
<key>removeextension</key>
<false/>
<key>text</key>
<string>{query}</string>
<key>title</key>
<string>Message Sent</string>
</dict>
<key>type</key>
<string>alfred.workflow.output.notification</string>
<key>uid</key>
<string>5E7EC504-1A9C-438B-9E11-55D8A07B4918</string>
<key>version</key>
<integer>1</integer>
</dict>
<dict>
<key>config</key>
<dict>
Expand All @@ -132,6 +113,27 @@
<key>version</key>
<integer>2</integer>
</dict>
<dict>
<key>config</key>
<dict>
<key>lastpathcomponent</key>
<false/>
<key>onlyshowifquerypopulated</key>
<false/>
<key>removeextension</key>
<false/>
<key>text</key>
<string>{query}</string>
<key>title</key>
<string>Message Sent</string>
</dict>
<key>type</key>
<string>alfred.workflow.output.notification</string>
<key>uid</key>
<string>5E7EC504-1A9C-438B-9E11-55D8A07B4918</string>
<key>version</key>
<integer>1</integer>
</dict>
</array>
<key>readme</key>
<string></string>
Expand Down
42 changes: 33 additions & 9 deletions lib/applescript-helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,19 @@ const Store = require('jfs');
const cacheVersion = require('../package.json').version;
const db = new Store('data', { pretty: true });

function cleanupResults(results) {
return _.chain(results)
async function cleanupResults(results) {
results = _.chain(results)
.uniqBy(item => `${item.name} ${item.handle}`)
.sortBy(r => r.handle)

resultsWithFreq = []
for (let result of results) {
result.frequency = await getFrequencyForHandle(result.handle)
resultsWithFreq.push(result)
}

resultsWithFreq.sort((r1, r2) => r2.frequency - r1.frequency)
return resultsWithFreq
}

async function getCachedData(key) {
Expand All @@ -21,33 +30,48 @@ async function getCachedData(key) {
}

async function buddySearch(query) {
const cacheKey = `${cacheVersion}:${query}`;
const cacheID = `${cacheVersion}:${query}`;

return new Promise(async (resolve, reject) => {

const data = await getCachedData(cacheKey);
if (data) resolve(cleanupResults(data));
const data = await getCachedData(cacheID);
if (data) { resolve(await cleanupResults(data)) }

osa.executeFile(
'applescripts/buddy-search.scpt',
{ searchQuery: query },
(err, results, raw) => {
async (err, results, raw) => {
if (err) return resolve(null)
if (!results.length) return resolve(null);

results = cleanupResults(results)
results = await cleanupResults(results)
resolve(results);
db.save(cacheKey, results);
db.save(cacheID, results);
});
})
}

async function sendMessage(handle, message) {
const cacheID = `${cacheVersion}:${handle}:frequency`;

const frequency = await getFrequencyForHandle(handle);
db.save(cacheID, frequency + 1)

osa.executeFile('applescripts/send-message.scpt',
{ theHandle: handle, textMessage: message },
(err, results, raw) => {
if (err) console.log(err);
});
}

function getFrequencyForHandle(handle) {
const cacheID = `${cacheVersion}:${handle}:frequency`;

return new Promise((resolve, reject) => {
db.get(cacheID, (err, data) => {
if (err) resolve(0);
resolve(data + 1)
})
})
}

module.exports = { buddySearch, sendMessage }
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "alfred-messages",
"version": "0.0.6",
"version": "0.0.7",
"description": "Send messages through Alfred",
"license": "MIT",
"repository": "briangonzalez/alfred-messages",
Expand Down

0 comments on commit 23be7c8

Please sign in to comment.