Железо Делаем пульт для мака. Часть вторая

Статус
В этой теме нельзя размещать новые ответы.

Markus Lang

Постоялец
Регистрация
8 Июл 2008
Сообщения
267
Реакции
170
В мы научились управлять QuickTime Player и iTunes. Это хорошо, но при просмотре любимых сериалов все равно приходится вставать с дивана, чтобы включить следующую серию. Будем это исправлять.

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, user-scalable=no" />
<title>iRemote</title>
<link rel="stylesheet" href="/remote/style.css" />
</head>
<body>

<?php

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

echo '<h1>' . $root . '</h1>';
?>

<ul>
<?php

echo '<li><a href="/remote/finder/index.php?folder=' . dirname($root) . '/">./</a></li>';

$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 '<li><a class="folder" href="/remote/finder/index.php?folder=' . $root . trim($file) . '/">' . trim($file) . '</a></li>';
}

$files = explode(',', exec('osascript -e \'tell application "Finder" to get files ' . $cmd . '\''));
foreach ($files as $file) {
echo '<li><a href="/remote/commands.php?app=Finder&cmd=Open&file=' . trim($file) . '&folder=' . $root . '">' . trim($file) . '</a></li>';
}
?>
</ul>

</body>
</html>

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

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

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

echo '<h1>' . $root . '</h1>';


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

echo '<li><a href="/remote/finder/index.php?folder=' . dirname($root) . '/">./</a></li>';


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

$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 '<li><a class="folder" href="/remote/finder/index.php?folder=' . $root . trim($file) . '/">' . trim($file) . '</a></li>';
}



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

$files = explode(',', exec('osascript -e \'tell application "Finder" to get files ' . $cmd . '\''));
foreach ($files as $file) {
echo '<li><a href="/remote/commands.php?app=Finder&cmd=Open&file=' . trim($file) . '&folder=' . $root . '">' . trim($file) . '</a></li>';
}

Стоит заметить что при выборе папки мы будем вызывать этот же скрипт, но с другим параметром корневой папки, а при выборе файла передадим управление нашему скрипту из первой части 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'у открыть файл. Для удобства на главной странице сделаем ссылку на обзор файлов.

<h1>Finder</h1>
<ul>
<li><a href="/remote/finder/">Browse</a></li>
</ul>


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

1577693_320x480.PNG


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

Для просмотра ссылки Войди или Зарегистрируйся
 
ни в первой ни во второй части нет ни слова о том, откуда взялся "osascript".
Хотелось бы поподробнее.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху