Alfred Today:我写插件的经验

在内部,工作流将检测配置菜单项的输出是否包含字符串refresh ,如果这样做,它将确定其set命令,否则将假定为toggle命令。 set命令将使用工作流变量text_to_display检测我们要设置的内容

在这两种情况下,变量value_to_store都将通过以下脚本填充并存储到磁盘

 导入系统 
导入 argparse
工作流导入工作流,ICON_WEB,ICON_WARNING,ICON_NOTE,Web,PasswordNotFound,Workflow3

def main (wf):

导入操作系统
工作流程。通知导入通知

键= os.environ ['settings_value']
值= os.environ ['value_to_store']

如果键=='密码':
wf.save_password('today.workflow.password',值)
通知(“密码已更新”)
其他
wf.settings [key] = {'value':value}
文字= os.environ ['text_to_display']

如果键=='use_google':
如果值=='0':
notify(“ Google日历支持”,u'\ u274C已禁用')
其他
notify(“ Google日历支持”,u'\ u2705已启用')
elif键=='use_exchange':
如果 '0'==值:
notify(“ Exchange Server支持”,u'\ u274c已禁用')
其他
notify(“ Exchange Server支持”,u'\ u2705已启用')
其他
notify('Updated'+ text,“ To:” + value)


如果 __name__ == u“ __ main__”:
wf = Workflow3(库= ['./ lib'])
sys.exit(wf.run(main))

而且,一旦将值存储到磁盘上就很好了,就会弹出一个不错的小通知,警告用户有关更改的内容。 在这一点上,工作流是可以共享的,并且可以被其他人使用。

外部触发器和缓存

因此,尽管我有一个可用的工作流程,但我并不满意,因为它太慢了。 每次我运行“ 今天”命令时,该插件都会查询Exchange服务器以检查更新,因为如果今天的菜单没有告诉您今天实际发生的情况,那么它就是今天的菜单。 这花费了2到5秒之间的时间,这并不快,特别是对于所谓的提高生产率

我在插件中内置了有限的缓存支持,但对结果不满意。 如果缓存很长(30分钟),则插件响应速度非常快,但是您可能会错过会议更改。 如果缓存时间短,则数据将是最新的,但运行速度很慢。 我脑子里有一个解决问题的方法,但是用Alfred 3.0不可能实现

阿尔弗雷德3.1

幸运的是Alfred 3.1发行了两个新功能,外部触发器和Hide Alfred动作。 通过一些创造性的缓存和Python魔术,我能够实现我想要的。

现在,现在和将来的基本工作流程现在可以通过关键字或这两个外部触发器对象之一来触发。