wwmoraes
5/5/2015 - 2:42 AM

Integração entre Radium e Lembretes, criando um lembrete para cada faixa na lista de desejos.

Integração entre Radium e Lembretes, criando um lembrete para cada faixa na lista de desejos.

TITLE=Lembretes Radium
TOOLSRC=checkModifierKeys.m
TOOLOUT=checkModifierKeys
SCRIPTSRC='$(TITLE).applescript'
SCRIPTOUT='$(TITLE).app'

.PHONY: all script tool movetool clean

all: script tool movetool

script:
	@echo [$(TITLE)] Compilando o script...
	osacompile -o $(SCRIPTOUT) $(SCRIPTSRC)
	@echo [$(TITLE)] Script compilado!

tool:
	@echo [$(TITLE)] Compilando a ferramenta de detecção de teclas...
	clang -fobjc-arc -Wall -framework Foundation -framework AppKit $(TOOLSRC) -o $(TOOLOUT)
	@echo [$(TITLE)] Ferramenta compilada!
	
movetool:
	@echo [$(TITLE)] Movendo a ferramenta para dentro do Bundle...
	@if [ ! -f $(TOOLOUT) ]; then echo [$(TITLE)] Compile a ferramenta antes!; exit 1; fi;
	@if [ ! -d $(SCRIPTOUT) ]; then echo [$(TITLE)] Compile o script antes!; exit 1; fi;
	mv $(TOOLOUT) $(SCRIPTOUT)/Contents/MacOS
	@echo [$(TITLE)] Movido!

clean:
	@echo [$(TITLE)] Removendo arquivos compilados...
	@if [ -f $(TOOLOUT) ]; then rm $(TOOLOUT); fi;
	@if [ -d $(SCRIPTOUT) ]; then rm -rf $(SCRIPTOUT); fi;
	@echo [$(TITLE)] Feito!
#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>

int main (int argc, const char * argv[]) {
  unsigned int modifiers = [NSEvent modifierFlags];
  if (argc == 1)
    printf("%d\n", modifiers);
  else {
    int i, result = 1;
    for (i = 1; i < argc; ++i) {
      if (0 == strcmp(argv[i], "shift"))
      result = result && (modifiers & NSShiftKeyMask);
      else if (0 == strcmp(argv[i], "option"))
      result = result && (modifiers & NSAlternateKeyMask);
      else if (0 == strcmp(argv[i], "cmd"))
      result = result && (modifiers & NSCommandKeyMask);
      else if (0 == strcmp(argv[i], "control"))
      result = result && (modifiers & NSControlKeyMask);
    }
    printf("%d\n", result);
  }
  return 0;
}
use AppleScript version "2.3" # Modelo 2.3 inserido no OSX Mavericks
use scripting additions # Necess�rio para utilizar comandos de interface em scripts no modelo 2.3

# Obtem as teclas modificadoras o quanto antes
tell application "Finder" to set _pwd to (path to me as alias)
set _info to info for _pwd
if package folder of _info is true then # executando como um app
	tell application "Finder" to set _pwd to (POSIX path of _pwd) & "Contents/MacOS/"
else if folder of _info is false and kind of _info contains "AppleScript" then # executando como um script
	tell application "Finder" to set _pwd to (POSIX path of (container of _pwd as alias))
else
	# Jamais deve entrar aqui!
	error number -128
end if

try
	set _modifiers to (do shell script (quoted form of _pwd & "checkModifierKeys option")) as integer
on error number 127
	display dialog "O execut�vel checkModifierKeys n�o existe!\n\nPor favor, compile o mesmo e caso esteja me executando como script, deixe-o junto, na mesma pasta; caso esteja me executando como aplicativo, execute o comando make movetool na pasta de compila��o ou mova manualmente o execut�vel para a masta Contents/MacOS/ dentro do Bundle." with title _title buttons {"OK"}
	error number -128
end try

# Propriedades "fixas" do script
property _title : "Lembretes Radium"
property _id : "com.wwmoraes.radiumreminders"
property _basepath : path to preferences folder from user domain as text
property _plistpath : _basepath & _id & ".plist" # Prefer�ncias do script
property _radiumplistpath : (path to library folder from user domain as text) & "Containers:com.catpigstudios.Radium3:Data:Library:Application Support:Radium:wishlist" # Plist contendo a lista de desejos

# Obrigado OSX Mavericks: Sem mais blocos 'tell'! :D
use application "System Events"
use application "Reminders"
use application "Finder"

# Globais para armazenar dados tempor�rios
global _accountName, _listName, _plist

# Checa se h� o plist do Radium
try
	_radiumplistpath as alias
on error number -43
	display dialog "Sem m�sicas na Lista de Desejos! Adicione algumas m�sicas na lista e execute-me novamente!" with title _title buttons {"OK"}
	error number -128
end try

try
	# Se a tecla Alt/Option estiver pressionada, executa a configura��o
	if _modifiers is 1 then
		display dialog "Detectei a tecla Alt pressionada. Pulando para a configura��o..." with title _title buttons {"OK"}
		setup()
	end if
	set _plist to property list file _plistpath
	set _accountName to get value of property list item "account" of contents of _plist
	set _listName to get value of property list item "list" of contents of _plist
on error number -1728 # Se n�o conseguir abrir o arquivo e carregar as prefer�ncias, [re]configura
	display dialog "N�o foi encontrada configura��o anterior! Executando o processo de configura��o..." with title _title buttons {"OK"}
	setup()
end try

# main (entendedores entender�o)
set _list to list _listName of account _accountName # Pega a refer�ncia da lista no Lembretes
set _currentreminders to name of reminders of _list # Obt�m os itens atualmente na lista
set _radiumplist to property list file _radiumplistpath # Pega a refer�ncia da plist do Radium
tell application "Reminders" to activate # Acorda!
repeat with _item in (value of property list item "$objects" of contents of _radiumplist as list) # para cada item na lista...
	if _item contains " - " and _item is not in _currentreminders then # ... que for uma faixa...
		# Este tell � necess�rio pois o comando "make" faz parte do Core Object, ou seja, todos aqui envolvidos possuem!
		tell application "Reminders" to make new reminder with properties {name:_item} at _list # ... adicionar no Lembretes
	end if
end repeat
tell me to activate
display dialog "Conclu�do!" with title _title buttons {"OK"}

on setup()
	try
		set _accountName to item 1 of (choose from list (get name of accounts) with title "Selecione a conta") as string
		set _listName to item 1 of (choose from list (get name of lists of account _accountName) with title "Selecione a lista") as string
		set _plist to make new property list file with properties {name:_plistpath}
		set value of contents of _plist to {|account|:_accountName, |list|:_listName}
		display dialog "Configura��o conclu�da!" with title _title
	on error number -1700
		error number -128
	end try
end setup