chiark / gitweb /
Add documentation and administrivia about `disorder-gstdecode'.
[disorder] / CHANGES.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
2 <html>
3 <head>
4 <title>DisOrder Change History</title>
5 <link rel=StyleSheet type="text/css" href="docs.css">
6 </head>
7
8 <body>
9 <h1>DisOrder Change History</h1>
10
11 <p>This file documents recent user-visible changes to <a
12  href="http://www.greenend.org.uk/rjk/disorder/">DisOrder</a>.</p>
13
14 <p><b>IMPORTANT</b>: you should read <a
15 href="README.upgrades.html">README.upgrades</a> before upgrading.</p>
16
17 <h2>Changes up to version 5.1</h2>
18
19 <div class=section>
20
21   <h3>Removable Device Support</h3>
22
23   <div class=section>
24
25     <p>The server will now automatically initiate a rescan when a filesystem is
26     mounted or unmounted.  (Use the <tt>mount_rescan</tt> option if you want to
27     suppress this behavior.)</p>
28
29     <p>The server takes care not to hold audio files open unnecessarily, so
30     that devices can be unmounted even if tracks from them are currently being
31     buffered.</p>
32
33   </div>
34
35   <h3>Disobedience</h3>
36
37   <div class=section>
38
39     <p>You can now edit the <tt>required-tags</tt> and <tt>prohibited-tags</tt>
40     global preferences in Disobedience
41     (<a href="http://code.google.com/p/disorder/issues/detail?id=29">issue
42     #29</a>).</p>
43
44     <p>The &ldquo;Manage users&rdquo; option is now more reliably greyed out if
45     it will not work.  This depends on a server change too, so it may still be
46     wrong if a new Disobedience is used against an old server.</p>
47
48     <p>A <tt>.desktop</tt> file is now shipped, making Disobedience visible as
49     an application in freedesktop.org-compliant systems.</p>
50
51   </div>
52
53   <h3>Backups</h3>
54
55   <div class=section>
56
57     <p>The Debian package now includes a cronjob that backs up the database
58     daily.  See <tt>/etc/cron.d/disorder</tt>.  You can put settings
59     in <tt>/etc/default/disorder</tt> to turn this off or to control how long
60     the backups are kept for.</p>
61
62     <p>The <tt>disorder-dump -r</tt> option was broken.</p>
63
64     <p><tt>disorder-dump</tt> now gets permissions right automatically (<a
65     href="http://code.google.com/p/disorder/issues/detail?id=56">issue
66     #56</a>).</p>
67
68   </div>
69
70   <h3>GStreamer support</h3>
71
72   <div class=section>
73
74     <p>If it's detected at <tt>configure</tt> time, a new decoder
75     program <tt>disorder-gstdecode</tt> is built.  It uses the GStreamer
76     library for audio decoding and sample-rate conversion, among other
77     features.
78
79     <p>The decoder has a number of options for controlling the sample-rate and
80     audio format conversion, allowing various tradeoffs between quality and
81     processor time.  (High-quality conversion can consume more processor time
82     than decoding, so this is potentially useful on very a small device such as
83     a Raspberry Pi.</p>
84
85     <p>The GStreamer decoder can also use ReplayGain information stored in
86     audio files' metadata to adjust playback volume, so that tracks with very
87     wide dynamic range don't sound really quiet in comparison.  This
88     information can be added using tools such as <tt>mp3gain</tt>,
89     <tt>vorbisgain</tt>, or <tt>metaflac</tt>.  This is turned on by default if
90     you use the decoder; you can choose between per-album or per-track
91     settings, or turn it off entirely, using command-line options.</p> 
92
93     <p>The GStreamer decoder is not used by default, but it can be enabled
94     easily enough by dropping something like the following into the server
95     configuration file:
96       <pre>
97         player
98         player *.flac execraw /usr/sbin/disorder-gstdecode -ralbum -f-8.0
99         player *.mp2 execraw /usr/sbin/disorder-gstdecode -ralbum -f-8.0
100         player *.mp3 execraw /usr/sbin/disorder-gstdecode -ralbum -f-8.0
101         player *.ogg execraw /usr/sbin/disorder-gstdecode -ralbum -f-8.0
102         player *.wav execraw /usr/sbin/disorder-gstdecode -ralbum -f-8.0
103       </pre>
104     </p>
105
106   <h3>General</h3>
107
108   <div class=section>
109
110     <p>Unicode support has been upgraded to <a
111     href="http://www.unicode.org/versions/Unicode6.0.0/">Unicode
112     6.0.0</a>.</p>
113
114     <p>Client programs no longer depend on libdb.</p>
115     
116     <p>The following have been removed:</p>
117
118     <ul>
119
120       <li>The <tt>allow</tt>, <tt>gap</tt>, <tt>lock</tt>, <tt>prefsync</tt>, 
121       <tt>restrict</tt>, <tt>trust</tt> configuration commands.  If they still
122       appear in your configuration file then the server will not start.</li>
123
124       <li>The <tt>columns</tt> web interface option.  It will generate an
125       message in your error log but otherwise be ignored.</li>
126
127       <li>The <tt>--wait-for-device</tt> player option.  If it still appears in
128       any player commands, they will not work.</li>
129
130       <li>Support for automatically importing pre-3.0 users.</li>
131
132     </ul>
133
134     <p>Various minor bug fixes.</p>
135
136   </div>
137
138 </div>
139
140 <h2>Changes up to version 5.0.3</h2>
141
142 <div class=section>
143
144 <p><b>Security</b>: Local connections can no longer create and delete users
145 unless they are properly authorized.</p>
146
147 </div>
148
149 <h2>Changes up to version 5.0.2</h2>
150
151 <div class=section>
152
153 <p>The login form now indicates that a cookie will be set.</p>
154
155 </div>
156
157 <h2>Changes up to version 5.0.1</h2>
158
159 <div class=section>
160
161 <h3>Disobedience</h3>
162
163 <div class=section>
164
165 <p>The sense of the Control &#x2192; Playing menu item was fixed.</p>
166
167 </div>
168
169 </div>
170
171 <h2>Changes up to version 5.0</h2>
172
173   <div class=section>
174   
175     <h3>Server</h3>
176  
177     <div class=section>
178
179       <p>The <tt>device</tt> configuration option now works under OS X.
180       Devices may
181       be specified either by UID or name.  Fixes <a
182        href="http://code.google.com/p/disorder/issues/detail?id=27">Issue
183       27</a>.</p>
184
185       <p>Gapless play should be more reliable, and playback latency over RTP
186       should be a bit lower.  Note though that all the sound output code has
187       been reorganized and in some cases completely rewritten, so it's possible
188       that bugs may have been (re-)introduced.  Decoding of scratches is also
189       initiated ahead of time, giving more reliable playback.</p>
190       
191       <p>The <tt>command</tt> backend now (optionally) sends silence instead
192       of suspending writes when a pause occurs or no track is playing.</p>
193
194       <p>If <a href="http://www.mega-nerd.com/SRC/">libsamplerate</a> is
195       available at build time then that will be used instead of invoking
196       <a href="http://sox.sourceforge.net/">SoX</a>.  SoX support will be
197       removed in a future version.</p>
198
199       <p>The libao plugin has been removed, because the plugin API is not
200       usable in libao 1.0.0.</p>
201
202       <p>Playlists are now supported.  These allow a collection of tracks to be
203       prepared offline and played as a unit.</p>
204
205     </div>
206       
207     <h3>Disobedience</h3>
208
209     <div class=section>
210
211       <p>Multiple tracks can now be dragged in the queue in a single operation.
212       Furthermore, it is now possible to drag tracks from the
213       &ldquo;Recent&rdquo;, &ldquo;Added&rdquo; and &ldquo;Choose&rdquo; tabs
214       to the queue.</p>
215
216       <p>Disobedience now supports playlist editing and has a compact mode,
217       available from the <b>Control</b> menu.</p>
218
219       <p>Disobedience has a <a href="disobedience/manual/index.html">new
220       manual</a>.</p>
221
222     </div>
223
224     <h3>Web Interface</h3>
225  
226     <div class=section>
227
228       <p>Confirmation URLs should be cleaner (and in particular not end
229       with punctuation).  (Please see <a
230       href="README.upgrades.html">README.upgrades</a> for more about this.)</p>
231
232     </div>
233       
234     <h3>RTP Player</h3>
235   
236     <div class=section>
237
238       <p>There is a new <tt>--command</tt> option which allows the RTP player
239       to send audio data to a user-chosen command instead of an audio API. See
240       the man page for details.</p>
241       
242       <p>The <tt>--device</tt> option to <tt>disorder-playrtp</tt> now works
243       under OS X (as above).</p>
244         
245     </div>
246       
247     <h3>General</h3>
248
249     <div class=section>
250
251       <p>IPv6 should now work.  Network address specifications
252       (<tt>listen</tt>, <tt>connect</tt> etc) can now be prefixed with
253       <tt>-4</tt> or <tt>-6</tt> to force use
254       of IPv4 or IPv6, though normally this should not be needed.</p>
255
256       <p>Unicode support has been upgraded to <a
257       href="http://www.unicode.org/versions/Unicode5.1.0/">Unicode
258       5.1.0</a>.</p>
259
260       <p>Various elements of the source code have been
261       rationalized.</p>
262       
263     </div>
264     
265     <h3>Bugs fixed</h3>
266   
267     <div class=section>
268
269       <table class=bugs>
270         <tr>
271           <th>ID</th>
272           <th>Description</th>
273         </tr>
274
275         <tr>
276           <td><a href="http://code.google.com/p/disorder/issues/detail?id=22">#22</a></td>
277           <td>Background decoders interact badly with server reload</td>
278         </tr>
279
280         <tr>
281           <td><a href="http://code.google.com/p/disorder/issues/detail?id=27">#27</a></td>
282           <td>Mac DisOrder uses wrong sound device</td>
283         </tr>
284
285         <tr>
286           <td><a href="http://code.google.com/p/disorder/issues/detail?id=30">#30</a></td>
287           <td>mini disobedience interface</td>
288         </tr>
289
290         <tr>
291           <td><a href="http://code.google.com/p/disorder/issues/detail?id=32">#32</a></td>
292           <td>Excessively verbose log chatter on shutdown</td>
293         </tr>
294
295         <tr>
296           <td><a href="http://code.google.com/p/disorder/issues/detail?id=33">#33</a></td>
297           <td>(Some) plugins need -lm.</td>
298         </tr>
299
300         <tr>
301           <td><a href="http://code.google.com/p/disorder/issues/detail?id=39">#39</a></td>
302           <td>Double bind() non-multicast AF_INET</td>
303         </tr>
304
305         <tr>
306           <td><a href="http://code.google.com/p/disorder/issues/detail?id=40">#40</a></td>
307           <td>Missing stub function</td>
308         </tr>
309
310         <tr>
311           <td><a href="http://code.google.com/p/disorder/issues/detail?id=41">#41</a></td>
312           <td>Missing includes for timeval</td>
313         </tr>
314
315         <tr>
316           <td><a href="http://code.google.com/p/disorder/issues/detail?id=42">#42</a></td>
317           <td>syntax error in empeg_host section</td>
318         </tr>
319
320         <tr>
321           <td><a href="http://code.google.com/p/disorder/issues/detail?id=43">#43</a></td>
322           <td>decoder segfault with FLAC 1.2.1</td>
323         </tr>
324
325         <tr>
326           <td><a href="http://code.google.com/p/disorder/issues/detail?id=44">#44</a></td>
327           <td>gcc 4.3.2-1ubuntu12 SUYB patch</td>
328         </tr>
329
330         <tr>
331           <td><a href="http://code.google.com/p/disorder/issues/detail?id=45">#45</a></td>
332           <td>disobedience doesn't configure its back end</td>
333         </tr>
334
335         <tr>
336           <td><a href="http://code.google.com/p/disorder/issues/detail?id=46">#46</a></td>
337           <td>Sort search results in web interface</td>
338         </tr>
339
340         <tr>
341           <td><a href="http://code.google.com/p/disorder/issues/detail?id=48">#48</a></td>
342           <td>build-time dependency on <tt>oggdec</tt> removed</td>
343         </tr>
344
345         <tr>
346           <td><a href="http://code.google.com/p/disorder/issues/detail?id=49">#49</a></td>
347           <td>Disobedience's 'When' column gets out of date</td>
348         </tr>
349
350         <tr>
351           <td><a href="http://code.google.com/p/disorder/issues/detail?id=51">#51</a></td>
352           <td>Improved speaker process robustness</td>
353         </tr>
354
355         <tr>
356           <td>(none)</td>
357           <td>&ldquo;found track in no collection&rdquo; messages for scratches
358           are now suppressed</td>
359         </tr>
360
361         <tr>
362           <td>(none)</td>
363           <td>Disobedience would sometimes fail to notice when a track
364           started, leading to its display getting out of date.</td>
365         </tr>
366
367       </table>
368     </div>
369   </div>
370
371 <h2>Changes up to version 4.3</h2>
372
373   <div class=section>
374
375     <h3>Disobedience</h3>
376
377       <div class=section>
378
379         <p>A bug was fixed in the calculation of how much of the track had
380         played.  This would lead to the counter showing incorrect values in
381         various situations.</p>
382
383         <p>Disobedience's icons have been changed to larger, more colorful
384         ones.  The SVG source is included if you want to fiddle with them.</p>
385
386         <p>&ldquo;Select all&rdquo; is now no longer available in the choose
387         tab.  Instead there is a new &ldquo;Select children&rdquo; option which
388         selects the file children of a single subdirectory.</p>
389
390       </div>
391
392     <h3>Server</h3>
393
394       <div class=section>
395
396         <p>The selection bias for newly added tracks was reduced by half.  You
397         can put it back to the old very neophilic value with
398         &ldquo;<tt>new_bias 900000</tt>&rdquo; in the config file.</p>
399
400         <p>It is now possible to &lsquo;adopt&rsquo; randomly picked tracks.
401         Disobedience and the command-line client support this but the web
402         interface does not.</p>
403
404         <p>The default track name parsing was modified to handle filenames
405         generated by iTunes.</p>
406         
407       </div>
408
409     <h3>Miscellaneous</h3>
410
411       <div class=section>
412
413         <p><tt>disorderfm</tt> now preserves directory permissions.</p>
414
415         <p>DisOrder is now licensed under <a
416          href="http://www.gnu.org/licenses/gpl-3.0.html">GPL v3</a>.  The main
417         goal is to prohibit <a
418          href="http://en.wikipedia.org/wiki/Tivoization">Tivoization</a>.</p>
419
420         <p>The build system will now automatically cope with Fink's broken GTK+
421         packages.  There are a number of improvements to the Debian
422         packaging.</p>
423
424         <p>DisOrder now builds on 64-bit Linux systems.</p>
425
426         <p>There are various minor fixes.</p>
427
428       </div>
429
430   <h3>Bugs fixed</h3>
431   
432     <div class=section>
433
434       <table class=bugs>
435         <tr>
436           <th>ID</th>
437           <th>Description</th>
438         </tr>
439         
440         <tr>
441           <td><a href="http://code.google.com/p/disorder/issues/detail?id=24">#24</a></td>
442           <td>Fails to build on ubuntu 8.10</td>
443         </tr>
444         <tr>
445           <td><a href="http://code.google.com/p/disorder/issues/detail?id=26">#26</a></td>
446           <td>Disobedience shows wrong track elapsed time after a pause</td>
447         </tr>
448       </table>
449       
450     </div>
451   </div>
452
453 <h2>Changes up to version 4.2</h2>
454
455 <div class=section>
456
457   <h3>Disobedience</h3>
458   
459     <div class=section>
460
461       <p>The login window now has a 'remote' switch.  If this is turned off
462       then Disobedience will connect to a local server.  Formerly it would
463       always use TCP/IP.</p>
464
465       <p>The Delete and backspace keys will now remove tracks from the queue.
466       Escape will now dismiss the properties, users or login windows and return
467       now works in the login and properties windows.</p>
468       
469     </div>
470
471   <h3>Documentation</h3>
472   
473     <div class=section>
474
475       <p>Track and global preferences are now described in a new
476       <b>disorder_preferences</b>(5) man page.</p>
477       
478     </div>
479
480   <h3>Bugs fixed</h3>
481   
482     <div class=section>
483
484       <table class=bugs>
485         <tr>
486           <th>ID</th>
487           <th>Description</th>
488         </tr>
489         
490         <tr>
491           <td><a href="http://code.google.com/p/disorder/issues/detail?id=21">#21</a></td>
492           <td>CGI should use PATH_INFO more sensibly</td>
493         </tr>
494       </table>
495       
496     </div>
497 </div>
498
499
500 <h2>Changes up to version 4.1.1</h2>
501
502 <div class=section>
503
504   <p>Disobedience's &ldquo;Login&rdquo; window now works when you are logged
505   in.</p>
506   
507 </div>
508
509 <h2>Changes up to version 4.1</h2>
510
511 <div class=section>
512
513   <h3>Disobedience</h3>
514   
515     <div class=section>
516   
517       <p>Disobedience has been largely rewritten:</p>
518
519       <ul>
520         
521         <li>All the tabs now use native GTK+ list/tree widgets, resulting in
522         greater speed in some cases and more consistency with other GTK+
523         applications.</li>
524
525         <li>You can now use type-ahead find in the choose tab.  The initiation
526         of a search is delayed slightly to avoid lots of updates when you're
527         half way through entering search terms.</li>
528
529         <li>The choose tab now shows track lengths.</li>
530     
531         <li>Many buttons are now more reliably made insensitive when they can't
532         be used.</li>
533
534         <li>You can now play tracks off the recent tab.</li>
535         
536       </ul>
537       
538       <p>Disobedience attempts to cope with servers from older versions, up to
539       a point, but this is not well tested and it's best to keep the server
540       fully up to date.</p>
541
542     </div>
543      
544   <h3>Server</h3>
545   
546     <div class=section>
547
548       <p>When a track shares a directory with its alias, the real track name is
549       now returned instead of the alias (the opposite way round to the previous
550       behaviour).</p>
551       
552     </div>
553 </div>
554
555 <h2>Changes up to version 4.0.2</h2>
556
557 <div class=section>
558
559   <p>Corrected web browser linked from Disobedience.</p>
560   
561 </div>
562
563 <h2>Changes up to version 4.0.1</h2>
564
565 <div class=section>
566
567   <p>Libtool and Automake now install the CGI correctly.  As part of this,
568   <tt>cgidir</tt> has been renamed to <tt>cgiexecdir</tt>.  The configure
569   script will report an error if you try to use the old name.</p>
570   
571 </div>
572
573 <h2>Changes up to version 4.0</h2>
574
575 <div class=section>
576
577   <h3>Server</h3>
578
579 <div class=section>
580   
581   <p>The <tt>gap</tt> directive will no longer work.  It could be
582   restored if there is real demand.</p>
583   
584   <h4>Event Scheduling</h4>
585
586 <div class=section>
587
588   <p>It is now possible to schedule events to occur in the future.
589   Currently the supported actions are playing a specific track, and
590   changing a global preference (thus allowing e.g. random play to be
591   turned on or off).  See the <tt>schedule-*</tt>
592   commands described in disorder(1).</p>
593
594 </div>
595
596 <h4>Random Track Choice</h4>
597
598 <div class=section>
599
600   <p>This has been completely rewritten to support new features:</p>
601
602   <ul>
603
604     <li>tracks in the recently-played list or in the queue are no longer
605     eligible for random choice.</li>
606
607     <li>there is a new <tt>weight</tt> track preference allowing for
608     non-uniform track selection.  See disorder(1) for details.</li>
609
610     <li>there is a new configuration item <tt>replay_min</tt> defining
611     the minimum time before a played track can be picked at random.
612     The default is 8 hours (which matches the earlier behaviour).</li>
613
614     <li>recently added tracks are biased up; see <tt>new_bias</tt> and
615     <tt>new_bias_age</tt> in disorder_config(5).</li>
616
617   </ul>
618
619 </div>
620
621 <h4>Web Interface</h4>
622
623 <div class=section>
624
625   <p>This has been largely rewritten.  The most immediate benefits are:</p>
626
627   <ul>
628     
629     <li>the search page is integrated into the choose page, and
630     includes links to parent directories.</li>
631     
632     <li>if you try to do something you have insufficient rights for,
633     instead of getting an error page or nothing happening, you are
634     redirected to the login page.</li>
635
636   </ul>
637
638   <p>Customizers should find their lives easier: the syntax is less onerous, it
639   is possible to define macros to avoid repetition, and the documentation is
640   less monolithic (see disorder.cgi(8) as a starting point).</p>
641
642   <p>Mail is now sent via the system sendmail program, though it remains
643   possible to use TCP to connect to an SMTP server.  See <tt>sendmail</tt> and
644   <tt>smtp_server</tt> in disorder_config(5).</p>
645
646   <p>The web interface is now installed automatically.  If you don't want it,
647   use <tt>./configure --without-cgi</tt>.  If you want it in a non-default
648   location, or no location for it is detected, set <tt>cgidir</tt>
649   and <tt>httpdir</tt> on the <tt>./configure</tt> command line.</p>
650   
651 </div>
652
653 </div>
654
655 <h3>Disobedience</h3>
656
657 <div class=section>
658
659   <p>There is now a new user management window.  From here you can add and
660   remove users or modify their settings.</p>
661
662   <p>Relatedly, the server will only allow remote user management if you set
663   <tt>remote_userman</tt> to <tt>yes</tt>.</p>
664
665 </div>
666
667 <h3>Miscellaneous</h3>
668
669 <div class=section>
670
671   <p><tt>scripts/setup</tt> now honors command line options, and can
672   set up network play as well as the local default sound device.</p>
673
674 </div>
675
676 <h3>Bugs Fixed</h3>
677
678 <div class=section>
679
680   <table class=bugs>
681     <tr>
682       <th>ID</th>
683       <th>Description</th>
684     </tr>
685
686     <tr>
687       <td><a href="http://code.google.com/p/disorder/issues/detail?id=2">#2</a></td>
688       <td>Search results should link to directories</td>
689     </tr>
690
691     <tr>
692       <td><a href="http://code.google.com/p/disorder/issues/detail?id=6">#6</a></td>
693       <td>Schedule tracks for a particular time</td>
694     </tr>
695
696     <tr>
697       <td><a href="http://code.google.com/p/disorder/issues/detail?id=10">#10</a></td>
698       <td>Non-uniform track selection</td>
699     </tr>
700
701     <tr>
702       <td><a href="http://code.google.com/p/disorder/issues/detail?id=11">#11</a></td>
703       <td>Bias random selection to newly added tracks</td>
704     </tr>
705
706     <tr>
707       <td><a href="http://code.google.com/p/disorder/issues/detail?id=13">#13</a></td>
708       <td>Default encoding for debian setup scripts</td>
709     </tr>
710
711     <tr>
712       <td><a href="http://code.google.com/p/disorder/issues/detail?id=16">#16</a></td>
713       <td>Cookie expiry causes user to be silently logged out and not
714       subsequently redirected to login page</td>
715     </tr>
716     
717     <tr>
718       <td><a href="http://code.google.com/p/disorder/issues/detail?id=20">#20</a></td>
719       <td>Broken aliasing rules</td>
720     </tr>
721     
722   </table>
723
724 </div>
725
726 </div>
727
728 <h2>Changes up to version 3.0.2</h2>
729
730 <div class=section>
731
732   <p>Builds <tt>--without-server</tt> should work again.</p>
733
734   <p>The web interface is a bit more liberal in the cookie value
735   syntax it will accept.</p>
736
737   <p>Clients fail more gracefully if no password is available.</p>
738
739 </div>
740
741 <h2>Changes up to version 3.0.1</h2>
742
743 <div class=section>
744   
745   <p>Debian upgrades from 2.0.x should now work better.</p>
746   
747 </div>
748
749 <h2>Changes up to version 3.0</h2>
750
751 <div class=section>
752   
753   <p><b>Important</b>!  See <a
754   href="README.upgrades.html">README.upgrades</a> when upgrading.</p>
755   
756   <h3>Platforms And Installation</h3>
757   
758 <div class=section>
759   
760   <p>Mac OS X and FreeBSD are somewhat supported.  There is now a bash
761   script in <tt>scripts/setup</tt> which will automate the setup after
762   <tt>make install</tt>.</p>
763   
764 </div>
765
766 <h3>Server</h3>
767
768 <div class=section>
769   
770   <p>Users are now stored in the database rather than a configuration
771   file.</p>
772   
773   <p>The server now has a built-in list of stopwords and players, so
774   only additions to these need be mentioned in the configuration file.</p>
775   
776   <p>The default inter-track gap is now 0s.</p>
777   
778   <p>How sound is played is now controlled via the new <tt>api</tt>
779   configuration command.  This also controls how the volume is set,
780   which now works with ALSA as well as OSS.</p>
781   
782   <p>A bug in the MP3 decoder was fixed (also in 2.0.4).</p>
783   
784 </div>
785
786 <h3>Web Interface</h3>
787
788 <div class=section>
789   
790   <p>The web interface now uses cookies to remember user identity, and
791   allows online registration of new users.  Also it is no longer
792   necessary to manually specify the URL of the web interface (but you
793   can override it if you don't like the value it figures out).</p>
794   
795   <p>It is possible to allow users to register via the web interface.</p>
796   
797   <p>The web interface's browser support has been improved.  It has
798   been tested with Firefox 2, Safari 3, Konqueror 3, Internet Explorer
799   7 and Opera 9.</p>
800   
801 </div>
802
803 <h3>Disobedience</h3>
804
805 <div class=section>
806
807   <p>A bug which would cause a crash if you attempt to rearrange the
808   queue while no track was playing has been fixed.  There is a new
809   'deselect all tracks' option, mirroring 'select all tracks.</p>
810   
811 </div>
812
813 </div>
814
815 <!--
816 Local Variables:
817 fill-column:79
818 indent-tabs-mode:nil
819 End:
820 -->