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