Support playlist management
[infodrom/musiikki-web.git] / class / ajax.class.php
1 <?php
2
3 class AJAX {
4     protected static function callCommand($cmd, array $data=array())
5     {
6         if (($pipe = popen($cmd, 'w')) === false)
7             return false;
8
9         foreach ($data as $value)
10             fwrite($pipe, $value . "\n");
11
12         pclose($pipe);
13         return true;
14     }
15
16     public static function getdatetimeAction()
17     {
18         return array('year' => date('Y'),
19                      'month' => date('m'),
20                      'day' => date('d'),
21                      'hour' => date('H'),
22                      'minute' => date('i'),
23                      'second' => date('s'));
24     }
25
26     public static function datetimeAction()
27     {
28         $date = sprintf("%04d-%02d-%02d", $_POST['year'], $_POST['month'], $_POST['day']);
29         $time = sprintf("%02d:%02d:%02d", $_POST['hour'], $_POST['minute'], $_POST['second']);
30
31         $ok = self::callCommand("super musiikki-datetime", array($date, $time));
32
33         return $ok;
34     }
35
36     public static function getwifiAction()
37     {
38         if (!file_exists('/etc/hostapd/hostapd.conf'))
39             return array();
40
41         if (($f = fopen('/etc/hostapd/hostapd.conf', 'r')) === false)
42             return array();
43
44         $essid = '';
45         $password = '';
46
47         while (($line = fgets($f)) !== false) {
48             $line = trim($line);
49             if (substr($line,0,1) == '#') continue;
50             if (!strlen($line)) continue;
51
52             $parts = explode('=', $line, 2);
53             if ($parts[0] == 'ssid')
54                 $essid = $parts[1];
55             elseif ($parts[0] == 'wpa_passphrase')
56                 $password = $parts[1];
57         }
58
59         fclose($f);
60
61         return array('essid' => $essid,
62                      'password' => $password);
63     }
64
65     public static function wifiAction()
66     {
67         $ok = self::callCommand("super musiikki-wifi", array($_POST['essid'], $_POST['password']));
68
69         return $ok;
70     }
71
72     public static function getsharesAction()
73     {
74         return array('ro_name' => '\\\\' . $_SERVER['SERVER_ADDR'] .'\\'. Config::SHARE_READ,
75                      'ro_user' => Config::SHARE_READ,
76                      'ro_password' => '',
77                      'rw_name' => '\\\\' . $_SERVER['SERVER_ADDR'] .'\\'. Config::SHARE_WRITE,
78                      'rw_user' => Config::SHARE_WRITE,
79                      'rw_password' => '');
80     }
81
82     public static function sharesAction()
83     {
84         $ok = self::callCommand("super musiikki-shares", array($_POST['ro_password'], $_POST['rw_password']));
85
86         return $ok;
87     }
88
89     public static function getpasswdAction()
90     {
91         return array();
92     }
93
94     public static function passwdAction()
95     {
96         if (!strlen($_POST['password'])) return false;
97
98         if (($f = fopen(Config::main()->get('password'), 'w')) === false) return false;
99
100         fwrite($f, sprintf("admin:%s\n", $_POST['password']));
101         fclose($f);
102
103         return true;
104     }
105
106     public static function gethaltAction()
107     {
108         return array();
109     }
110
111     public static function haltAction()
112     {
113         $ok = self::callCommand("super musiikki-halt");
114
115         return $ok;
116     }
117
118     public static function getrescanAction()
119     {
120         $mtime = filemtime(Config::main()->get('cache'));
121
122         return array('modified' => date ("d. F Y H:i:s", $mtime));
123     }
124
125     public static function rescanAction()
126     {
127         $mtime = filemtime(Config::main()->get('cache'));
128         if ($mtime > time()-10)
129             return array('info' => 'Rescan läuft gerade und kann nicht erneut getriggert werden.');
130
131         if (($f = fopen(Config::main()->get('rescan_file'), 'w')) !== false) {
132             fwrite($f, time());
133             fclose($f);
134             return true;
135         }
136
137         return false;
138     }
139
140     public static function getsearchAction()
141     {
142         return array();
143     }
144
145     public static function searchAction()
146     {
147         $cache = new Cache();
148
149         $list = $cache->findTitles($_POST['keyword']);
150
151         return ['results' => $list,
152                 'playlist' => $_SESSION['playlist']];
153     }
154
155     public static function getresultsAction()
156     {
157         return array();
158     }
159
160     public static function playlistSelectAction()
161     {
162         $_SESSION['playlist'] = $_POST['name'];
163     }
164
165     public static function getplaylistsAction()
166     {
167         $playlists = new Playlists();
168         $selected = null;
169         if (array_key_exists('playlist', $_SESSION))
170             $selected = $_SESSION['playlist'];
171
172         return ['list' => $playlists->getList(),
173                 'selected' => $selected];
174     }
175
176     public static function playlistAction()
177     {
178         $playlists = new Playlists();
179
180         return ['title' => $_POST['name'],
181                 'list' => $playlists->getContents($_POST['name'])];
182     }
183
184     public function playlistNewAction()
185     {
186         $playlists = new Playlists();
187         $playlists->create($_POST['name']);
188     }
189
190     public function playlistAddAction()
191     {
192         $cache = new Cache();
193         $playlists = new Playlists();
194
195         if (!array_key_exists('playlist', $_SESSION))
196             return;
197
198         $playlists->add($_SESSION['playlist'], $cache->getRelativePath($_POST['id']));
199     }
200 }