PDA

Просмотр полной версии : Делаем пульт для мака. Часть вторая


Markus Lang
11.02.2009, 04:09
В




Для просмотра скрытого содержимого необходимо иметь 1 сообщение, у вас 0 сообщений.


мы научились управлять QuickTime Player и iTunes. Это хорошо, но при просмотре любимых сериалов все равно приходится вставать с дивана, чтобы включить следующую серию. Будем это исправлять.

Для этой задачи сделаем удаленное управление Finder'ом. Создадим подпапку finder в папке с нашим проектом, в моем случае доступ к списку файлов будет по адресу localhost/remote/finder/. Созданим файл index.php со следующим содержанием.







iRemote


' . $root . '';
?>

./';

$folders = array_reverse(explode('/', trim($root, '/')));
foreach ($folders as $folder) {
$cmd = $cmd . ' of folder "' . $folder . '"';
}

$cmd = $cmd . ' of startup disk of application "Finder"';

$files = explode(',', exec('osascript -e \'tell application "Finder" to get folders ' . $cmd . '\''));
foreach ($files as $file) {
echo '' . trim($file) . '';
}

$files = explode(',', exec('osascript -e \'tell application "Finder" to get files ' . $cmd . '\''));
foreach ($files as $file) {
echo '' . trim($file) . '';
}
?>




И так поясню код.

Для начала определяем каталог, для которого будем выводить список файлов и покажем его в заголовке. По умолчанию я определил свою пользовательскую директорию "/Users/Ex/".



if (isset($_GET['folder']))
{
$root = $_GET['folder'];
}
else
{
$root = '/Users/Ex/';
}

echo '' . $root . '';




Первой ссылкой выведем путь к папке верхнего уровня.



echo './';




Дальше идут несколько магических строчек.



$folders = array_reverse(explode('/', trim($root, '/')));
foreach ($folders as $folder) {
$cmd = $cmd . ' of folder "' . $folder . '"';
}

$cmd = $cmd . ' of startup disk of application "Finder"';




Дело в том, что в AppleScript Finder не понимаем в качестве параметров путь вида "/Users/Ex/". Для передачи в скрипт путь нужно привести к такому хитрому виду «folder Ex of folder Users». В принципе этот код это и делает, переводит путь из одного вида в другой.

Далее выводим список папок.



$files = explode(',', exec('osascript -e \'tell application "Finder" to get folders ' . $cmd . '\''));
foreach ($files as $file) {
echo '' . trim($file) . '';
}




Выводим список файлов.



$files = explode(',', exec('osascript -e \'tell application "Finder" to get files ' . $cmd . '\''));
foreach ($files as $file) {
echo '' . trim($file) . '';
}



Стоит заметить что при выборе папки мы будем вызывать этот же скрипт, но с другим параметром корневой папки, а при выборе файла передадим управление нашему скрипту из первой части commands.php. В качестве параметров передадим имя файла, который нужно открыть и путь к нему. И так, добавим обработку открытия файла в commands.php.



if ($_GET['app'] == 'Finder')
{
if ($_GET['cmd'] == 'Open')
{
$folders = array_reverse(explode('/', trim($_GET['folder'], '/')));

foreach ($folders as $folder) {
$cmd = $cmd . ' of folder "' . $folder . '"';
}

$cmd = $cmd . ' of startup disk of application "Finder"';
$cmd = 'tell application "Finder" to open file "' . $_GET['file'] . '" ' . $cmd;
}
}
>




Тут все просто. Приводим путь в нужному виду и говорим Finder'у открыть файл. Для удобства на главной странице сделаем ссылку на обзор файлов.



Finder

Browse





Вот в принципе и все. У вас должно получиться примерно следующее.

http://www.picamatic.com/show/2008/12/21/10/10/1577692_320x480.PNG

http://www.picamatic.com/show/2008/12/21/10/10/1577693_320x480.PNG

Еще можно для удобства запоминать последний посещенный каталог в куках, но думаю с этим вы справитесь сами.
Теперь все. Потравит полчаса времени сэкономим кучу калорий

CjGuSSa
13.02.2009, 14:12
Есть программа называется Remote Buddy, она позволяет делать тоже самое, только помимо этого управлять маком с пульта Д.У.
Если кому надо - выложу.

http://www.iospirit.com/index.php?mode=view&obj_type=infogroup&obj_id=24&sid=8949194G7c97052442dcb01d (https://href.li/?http://www.iospirit.com/index.php?mode=view&obj_type=infogroup&obj_id=24&sid=8949194G7c97052442dcb01d)

vitaliyphp
26.02.2009, 16:17
Шикарно =)

GEEPERS
30.03.2009, 10:22
ни в первой ни во второй части нет ни слова о том, откуда взялся "osascript".
Хотелось бы поподробнее.