1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274
|
Fri 13 Jul 2007
- Version 1.5.4: violation of OO principles finally bit me in the butt.
Thu 12 Jul 2007
- The call to os.getpid() in the "quit()" signal handler function in
moosic/server/main.py was corrected. The parentheses were missing,
meaning that this wasn't actually a function call, but a reference to the
function object itself, which really isn't what I meant.
- The constructor for UnixMoosicServer and TcpMoosicServer in
moosic/server/support.py now extends the constructor from
SimpleXMLRPCServer instead of overriding it and duplicating its code.
This prevents breakage should the internal structure of SimpleXMLRPCServer
should ever change (as it did between Python 2.4 and Python 2.5). The
incompatibility with Python 2.5 was brought to my attention by Jim Russell
<jim@jimr.us> and its symptoms are detailed at
https://bugs.launchpad.net/ubuntu/+source/moosic/+bug/95532.
Fri 25 May 2007
- The -C option was added to the command-line client.
- Version 1.5.3: You can still teach an old cow new tricks.
Wed 17 May 2006
- The "move-pattern" moosic command was added.
Tue 16 Aug 2005
- Version 1.5.2: Better late than never.
Wed 01 Jun 2005
- A colon is no longer allowed as a bracketing character for a range string in
utilities.parse_range().
- utilities.parse_range() now explicitly checks for an empty string as input
and rejects such.
Thu 19 May 2005
- utilities.parse_range() now (correctly) ignores bracketing characters at
the start and end of an input range string to provide an easy alternative
for preventing negative numbers from being interpreted as options.
Similarly, the "insert", "pl-insert", and "move" commands also ignore
bracketing characters around their index arguments.
- The VERSION variable was moved from two separate instances in
moosic/client/cli/__init__.py and moosic/server/__init__.py to a single
instance in moosic/__init__.py.
Wed 27 Apr 2005
- The "stagger" command of the command-line moosic client was fixed to adapt
to the fact that staggered_merge() now returns a list instead of a tuple.
Thu 14 Apr 2005
- A bug in the "unplayable filter" feature of the CLI client that duplicated
items that matched more than one entry in the song handler configuration
was fixed.
Wed 06 Apr 2005
- The exception handling for loading the state file was tightened up, so
uncaught exceptions should no longer occur there.
Sun 27 Mar 2005
- staggered_merge() was rewritten for the pure fun of it. Now it's shorter,
much easier to understand, and recursive. Lispy variable names are used in
a tepid attempt to compensate for the lack of multitudinous parentheses.
Sun 10 Oct 2004
- A patch from Nate Straz was applied to keep the server from saving state to
disk if the state hasn't really changed.
Fri 08 Oct 2004
- An off-by-one error in moosic.utilities.is_overlapping() was debugged. This
mistake caused a false positive when the first number in one range was the
same as the second number in the other range or vice versa.
Fri 24 Sep 2004
- I've removed "greplist". It was silly.
Tue 31 Aug 2004
- The "greplist" client command was added. I don't know if I'll keep it,
since it's nearly as easy to type "moosic list | grep foo".
Thu 19 Aug 2004
- API_MINOR_VERSION in moosic/server/methods.py should have been updated to 8
in the last version, but I must have forgotten. This has been fixed.
Thanks to Florian Ragwitz for spotting this.
Tue 20 Jul 2004
- moosic.server.main.play() now handles exceptions raised by its call to
os.execvp(), thus fixing a terrible oversight that could cause the server
to crash.
- The server now logs the total playing time whenever it finishes playing a
song.
Mon 19 Jul 2004
- The is_overlapping() function was moved from moosic.server.methods to
moosic.utilities.
Fri 25 Jun 2004
- Version 1.5.1: Welcome to the wonderful world of distutils.
Thu 24 Jun 2004
- The "swap" server method was completed.
Thu 29 Apr 2004
- The "swap" command was implemented in the CLI client. (Todo:
implement/document in server.)
Tue 20 Apr 2004
- The "toggle-advance" command was added.
- The moosic man page was updated to mention Audio CD support, and to
document the new commands.
- moosic_hackers.txt was updated to match the new code organization.
Sun 18 Apr 2004
- The "interval-insert" command was implemented, and was renamed to
"interval-add".
- README.txt was updated to reflect the new installation process.
Sat 17 Apr 2004
- The "replace" and "pl-replace" commands were added.
- A stub for the "interval-insert" command was added, and needs to be
implemented.
Fri 02 Apr 2004
- The routine for reading playlist files now supports playlists that use
relative pathnames. This support was inspired code submitted by michael d.
ivey <ivey@gweezlebur.com>.
Thu 01 Apr 2004
- moosic.server.daemonize.daemonize() now uses os._exit() after its second
call to fork() so that when moosic.server.main.main() is invoked by another
python program to start the server (like the moosic client), only a single
SystemExit exception will be raised.
- By default, the moosic client now filters out songs that the server doesn't
know how to play before adding anything to the song queue. This behavior
can be turned off with the -U/--allow-unplayable option.
- A very heavily commented example configuration file is now distributed with
the documentation.
Wed 31 Mar 2004
- The server's logger was tweaked a bit. It no longer writes to stderr when
an error is logged, because moosicd normally doesn't have a useful stderr
associated with it. Also, the "message" parameter is used as the return
value of a logging call to make it easier to reuse the log message.
Tue 30 Mar 2004
- An effort was made to change the idiom of printing to stderr and then
calling sys.exit(1) into an idiom of passing the error message directly to
sys.exit(). This is not so important for the command-line client, but
it's important for moosicd to behave this way so that startup failures can
be easily caught by an invoking program.
Mon 29 Mar 2004
- The modules that comprise the project were reorganized into packages.
- The old Makefile-based build and install system was replaced with a
standard, distutils-based setup.py script.
- A Makefile is still used to translate the documentation from POD source
format into various target formats.
- The "moosic" client now uses a different method for automatically starting
up the server. This new method doesn't use the $MOOSICD environment
variable.
Sun 28 Mar 2004
- daemonize.py was changed so that it doesn't reset the umask unless
specifically requested.
- The debian/ directory was removed, which means that support for building
a .deb from the upstream source was removed. I've decided that it's too
much trouble for me to stay synchronized with the official Debian package.
- The experimental/ directory was removed because I'm not interested in
developing the code within any further.
- Version 1.5.0: Several incompatible changes. Best to get it over with all
at once.
Wed 24 Mar 2004
- README.developers now completely documents how to add moosic commands and
moosicd methods.
Tue 23 Mar 2004
- A lot of text was written for README.developers to describe how to add
moosic commands and moosicd methods. It's still not quite yet finished,
though.
Mon 22 Mar 2004
- Various documentation files were updated in preparation for a new release.
Wed 10 Mar 2004
- The repeated state-saving revealed a bug in data.getstate() which caused
data.song_queue to be modified. getstate() was changed to make no
modifications to any of data's attributes.
Tue 09 Mar 2004
- The behavior of the previous() method was changed so that it doesn't
activate queue advancement if it had been previously disabled.
- The next() method was renamed to skip(), and was replaced with a next()
method that is more parallel to the previous() method.
- The poorly named "noplay" command was replaced with the "noadvance" and
"advance" commands ("noadv" and "adv" for short).
- The "sleep" and "wake" command aliases were removed from the command-line
client. Too many aliases is just silly and confusing.
- The "next" command now takes an argument that lets you skip ahead by more
than one song. It also now has an effect when there's no current song.
- The hostname is no longer appended to the names of the files stored in
~/.moosic/. (The only reason this was done in the first place was to
handle the case where the user's home directory was on an NFS share and
the user wanted to run a moosicd on different machines that were accessing
the same home directory. This situation can now be handled more simply
and appropriately by using the -c option, and I don't share /home anymore
anyway.) Client developers will need to update their code, and users who
want to use their old config and log files will have to rename them to
remove the "-$HOSTNAME" part.
- The os.kill() invocations in moosicd_methods.py have been put into
try-catch blocks so that any problems they cause can be more easily
traced.
- The os.kill() invocation in the unpause() server method no longer raises
an exception if the player process is dead already.
- The "stop_hack" server attribute was renamed to "ignore_song_finish".
- Songs that have no handler in the server's config are no longer placed in
the history list, nor are they returned to the queue when loop mode is on.
- The server's state is saved at regular time intervals rather than only
saving when the server exits cleanly. This will make recovery from
crashes of all sorts much more convenient.
Fri 28 Nov 2003
- An effort has been started to keep instances of the empty string ('') out
of the song queue, by filtering them out in the server methods that add or
change queue members.
Thu 27 Nov 2003
- A first implementation of the current_time() server method was completed,
but not yet tested.
Mon 17 Nov 2003
- The previous() server method now avoids trying to pop from an empty
history list.
Sun 16 Nov 2003
- A "help" command was added to moosic to allow a user to explore its
commands in small, chewable chunks instead of the giant mouthful that is
the output of --showcommands.
- The behavior of the previous() moosicd method was corrected for the case
when the server is in loop mode. When loop mode is on, the most recently
played song is now taken from the end of the song queue instead of the end
of the history list.
Fri 14 Nov 2003
- The installation process was modified so that Python modules which would
be of interest to a prospective Moosic hacker (i.e. the ones listed in the
PUBLIC_MODULES makefile variable) are placed in the installation's
documentation directory. This is in response to Debian Bug #196652.
Thu 30 Oct 2003
- Version 1.4.10: Minor features and bugfixes.
Wed 29 Oct 2003
- Typographical errors in the internal documentation for the "ispaused",
"islooping", and "isadvancing" moosic commands were corrected.
- I've tested it, and using TakCD as a handler for Moosic works. I just
need to properly document this fact, and I'll be able to say that Moosic
officially supports audio CD tracks.
Tue 28 Oct 2003
- The --tcp-also option was added to moosicd, making it possible to listen
on both a Unix socket and a TCP socket at the same time.
Mon 27 Oct 2003
- The toggle_pause() server method now calls pause() or unpause() instead of
duplicating the code in those functions.
- The pause() server method now sends a STOP signal (a tenth of a second)
after the TSTP, in case the song player doesn't respond to TSTP
appropriately.
Mon 20 Oct 2003
- moosicd now uses the TSTP signal instead of the STOP signal to pause
song-player helpers. This is preparation for adding support for playing
audio-CD tracks with TakCD.
Fri 17 Oct 2003
- The startServer() function in moosic_factory.py now searches for a program
named "MoosicDaemon" if a program named "moosicd" can't be found. This
lets startServer() work even if I decide to rename the server program so
that it doesn't interfere when I use my shell's tab-completion to use
"moosic".
- The getconfig() server method was added.
Thu 16 Oct 2003
- A threading problem which occurred on *BSD (and possibly other) systems
was worked around. On these platforms, moosicd's threads ran sequentially
instead of in parallel, making moosicd almost useless. This is caused by
the policy of the thread scheduler on these systems of not starting a new
thread until the previous thread performs a blocking operation. So the
work-around consists of inserting extremely brief calls to sleep() at key
points when starting a new thread. (Bug reported and solved by Paul
Barnfather <plb@clanger9.org>).
Mon 13 Oct 2003
- Symlinks are now followed when scanning the music directory with
"--auto-grep" or "--auto-find".
Wed 08 Oct 2003
- Exceptions that occur when setting the locale in moosic are now ignored.
This was done to let moosic work with the Python runtime included with Mac
OS X, which throws an exception complaining that locale setting is not
supported.
Tue 07 Oct 2003
- A type error (attempting to concatenate a list to a tuple) in the recently
modified "stagger" moosic command was fixed.
Thu 02 Oct 2003
- The documentation for the moosicd methods was tweaked a bit.
- The startServer() function in moosic_factory now uses a default path when
the PATH environment variable isn't set.
Tue 30 Sep 2003
- Since version 1.4, the return type for the "showconfig" server method has
been advertised as "string", when it has really been returning "base64"
data all this time. The correct return type is now registered and
properly mentioned in the relevant documentation.
- The behavior of the "stagger" moosic command was changed. It now puts any
leftover songs (i.e. songs which didn't match any regex named on the
command line) all together at the end of the queue, instead of including
the leftovers within the staggered arrangement. The old behavior can be
duplicated by adding a regex that matches anything (e.g. ".") as the last
argument to the command. (Incompatible change. But I really doubt anyone
will care enough to complain.)
Fri 26 Sep 2003
- The "ispaused", "islooping", and "isadvancing" moosic commands were added.
Tue 16 Sep 2003
- Some of the differences between my debian/ directory and the one in the
official package were merged.
- Version 1.4.7: Daemon auto-start and song auto-find.
- Bah! Using the "in" operator to find a substring doesn't work in Python
2.2.x, so --auto-find fails (with an ugly crash) for Python 2.2.x users.
- Version 1.4.8: Brown-paper-bag bug.
- Augh! The "moosicd" target in the Makefile was missing an essential
module, so the resulting executable couldn't run. I'm feeling very stupid
because I really should have caught this, and I would have if I'd done
proper testing.
- A search string used with --auto-find no longer matches everything if the
search string evaluates to the empty string after being simplified.
- Version 1.4.9: Somebody just smack me with a stick.
Mon 15 Sep 2003
- The command argument given to moosic now disregards non-alphanumeric
characters, and the private unmangle() function in moosic_dispatcher.py
was updated accordingly.
Fri 12 Sep 2003
- The implementation of --auto-find was cleaned up and now respects
directory seperators (i.e. slashes).
- The "--no-recurse" option was documented in the manpage. (Oops, how long
was that missing?)
Tue 09 Sep 2003
- The "auto-grep" feature was added to moosic.
- The --sort option to moosic has been properly distinguished from
--inorder, both in the code and in the documentation.
- The --ignore-case, --music-dir, --auto-find, and --auto-grep options were
documented in the moosic manpage.
- utilities.grep() and utilities.antigrep() now accept either a string or a
compiled regexp as their first argument, and their implementations were
very slightly optimized for speed.
- The flatten() function and its helpers were added to utilities.py.
- Valiant (but possibly vain) attempts were made to make
utilities.staggered_merge() easier to understand.
Mon 08 Sep 2003
- The functionality of the "ma" script was integrated into moosic with the
addition of the "--auto-find" option (and its companion, "--music-dir").
These new options still need to be documented in the manpage.
- The "--ignore-case" option was added to moosic, and needs to be documented
in the manpage.
Sun 07 Sep 2003
- The uniq() and sh_escape() functions were added to utilities.py.
Sat 06 Sep 2003
- The "ma" script was contributed by David McCabe, and several enhancements
were made to it.
Mon 01 Sep 2003
- The --no-startserver option was added to moosic.
- The moosic docs were updated to reflect the fact that it will now
automatically start moosicd as needed.
Sun 31 Aug 2003
- The startServer() function was documented and moved to moosic_factory.py.
- debian/completion was updated, since I noticed that it was terribly out of
date.
Fri 29 Aug 2003
- moosicd now daemonizes itself with a handy daemonize function shamelessly
nabbed from Noah Spurrier (http://www.noah.org/python/).
- moosic now tries to start moosicd automatically if it can't contact a
Moosic server at the address at which it expects to find one. This is
meant to relieve users of the burden of having to start moosicd by hand.
Thu 28 Aug 2003
- squeezeTool was modified to allow its generated executables to use a
specific python version in the shebang line. The Makefile was modified to
take advantage of this new option.
- The Makefile was modified to allow a python executable to be specified via
the PYTHON variable.
- The Debian package is now uses python2.2 to build the executables. This
is done in order to generate a package that works with both woody and
sarge/sid. Debian users who wish to build the package with python2.3
instead of python2.2 should change the line that contains the string
"PYTHON=python2.2" in the debian/rules file.
- Version 1.4.6: Better Debian packaging, substitution feature.
Wed 27 Aug 2003
- The "python" dependency in the "debian/control" file was changed to
"python2.2", and "python2.2" was also added as a build dependency.
Tue 26 Aug 2003
- A few bugs caused or revealed by yesterday's changes were fixed.
- A seeming incompatibility between the pickling in Python 2.2.x and 2.3 was
worked around.
- The sub() moosicd method was finished and split into two variants: sub()
and sub_all().
- The "sub" and "suball" moosic commands were added.
Mon 25 Aug 2003
- The file named "README.developers" was added.
- The Log class in moosicd_support was documented properly.
- The race condition problem in the previous() moosicd method was explored
and investigated more closely.
- The "howmany" parameter to the previous() moosicd method is now effective,
and the moosic command now takes advantage of it.
- The stop() moosicd method now uses a flag to tell the queue consumer to
act as if the song being stopped was not really finished (specifically,
the song is neither appended to the queue when loop mode is on nor is it
added to the history). This method was also made public since it now does
things that can't be done outside of the server.
- The change made to the stop() method allowed previous() to be rewritten in
a way that is both much simpler and free of race conditions.
Thu 17 Jul 2003
- I've decided that moosh was a fun experiment, but isn't really worth
supporting officially. While it can be slightly more convenient than
moosic in common cases, it will never be able to compete with the power
that a good shell (like bash or zsh) lends to moosic, unless a great deal
of effort was expended to duplicate advanced shell features.
- The sub() moosicd method was added, but is not yet finished.
Mon 21 Jul 2003
- Version 1.4.5: The "previous" command.
Sun 13 Jul 2003
- The following moosh commands were implemented: "setopt", "alias",
"showalias", "unalias".
- Docstrings were written for all moosh-specific commands.
- Tab completion in moosh was improved in various ways.
- The "ls" command in moosh was improved to handle glob expansion.
- The "shell" command was added to moosh.
- moosh.pod needs to be written.
- moosh is purposefully omitted from the Makefile since it is still
experimental.
Sat 12 Jul 2003
- Tab completion for moosh was worked on.
Fri 11 Jul 2003
- Various parts of moosh were polished up.
- moosic_dispatcher.process_filelist() now performs user-expansion on
pathnames that start with '~' (tilde).
- moosic_dispatcher.check_args() was added.
Thu 10 Jul 2003
- I got bored and wrote most of moosh.py.
Mon 07 Jul 2003
- moosic_dispatcher.wipe() was fixed to work properly when loop mode is on.
Sun 06 Jul 2003
- The reason why "moosic curr" sometimes returns random junk was discovered.
It turns out to be a bug in binascii.a2b_base64() in Python 2.2.2. No
other Python versions seem to exhibit this bug.
- The "True" and "False" constants are once again defined if they didn't
already exist. This is meant to allow the program to run in Python 2.2,
which doesn't pre-define these.
Tue 03 Jun 2003
- A bug in which moosicd_methods.putback() didn't update
data.last_queue_update was fixed.
- The "previous" moosicd method was tentatively added.
- The data.lock object in moosicd is now an instance of threading.RLock
instead of threading.Lock to allow re-entrant locking.
- The "previous" and "prev" moosic commands were added to mirror the moosicd
method of the same name.
Mon 02 Jun 2003
- Version 1.4.4: Minor new features and cleanups.
Sun 01 Jun 2003
- The "last_queue_update" moosicd method was added, and associated changes
to support this method were made throughout moosicd.
- The Moosic_API document has been converted to POD, and HTML, text, and
manpage versions are produced from this.
- The NEWS file is now included in the distribution.
- The debian/ directory was added for building Debian packages.
Wed 28 May 2003
- The "install" target in the Makefile now puts the manpages in
$(INSTALL_PREFIX)/share/man/ instead of $(INSTALL_PREFIX)/man/, as
specified by the FHS 2.2.
Sat 24 May 2003
- os.getenv is now used instead of os.environ to prevent exceptions from
occurring if an environment variable isn't defined.
Wed 21 May 2003
- The "stagger-merge" moosic command was added.
- The "replace" moosicd method was added, and is used appropriately by the
commands in moosic_dispatcher.py.
- The "replace_range" moosicd method was added.
Tue 20 May 2003
- Version 1.4.3: Code cleanup.
Mon 19 May 2003
- The "unpause" moosicd method now refrains from sending its signal to the
song player if there isn't a song player currently running. This fixes a
bad-looking but harmless TypeError fault that the client would get after
sending a "next" command. This fault was generated because the "next"
moosicd method now calls "unpause" before finishing, and at that point
data.player_pid would be reset, while data.current_song would not.
- The moosic(1) manual page was polished up, and the documentation for the
"stagger-add" command was completed.
Thu 15 May 2003
- The "next" moosicd method now unpauses the current song when killing it,
so that it will really terminate when we tell it to do so. This fixes a
bug in which moosicd wouldn't die if the current song was paused.
- The logic for checking the number of arguments given to a moosic command
was redesigned.
- moosic now prints all of its error messages to stderr instead of stdout.
Wed 14 May 2003
- Lots and lots of code was moved from moosic_main.py to
moosic_dispatcher.py.
- The Makefile no longer generates HTML documentation for non-public Python
modules.
- A (harmless) "broken pipe" exception is no longer raised by moosicd when a
client disconnects from the server before receiving all of the data
returned by the server.
Tue 13 May 2003
- Version 1.4.2: Minor bug fixes.
- The moosic_dispatcher.py module was started in order to replace the Great
Big Giant if-else chain that handles the command string.
Mon 12 May 2003
- The cut_list and crop_list moosicd methods were added.
- The utilities.parse_range() function now specially handles the case where
the input is "-1". The return value is now (-1, end_arg) instead of (-1, 0).
This makes "moosic list -- -1" work as expected. (This misbehavior was
pointed out by Paramjit Oberoi.)
- The "length" and "len" moosic commands were added.
Thu 08 May 2003
- A bug (pointed out by Paramjit Oberoi) in which current_song would not be
saved to disk was fixed. This happened because queue_consumer() would reset
current_song before data.getstate() would be called.
- A bug which broke "moosicd --version" was fixed by including "VERSION" in
moosicd_support.__all__.
Wed 07 May 2003
- A typo was fixed (errant comma at the end of a line) in main() in
moosicd_main.py on the line that sets "logfilename". (Reported by Ray Shaw.)
- The code that reads the config file is now placed before any code that uses
data.confdir. This ensures that data.confdir really exists before an attempt
is made to use it.
- The "log" attribute is now set in the DataStore constructor in
moosicd_support.py, fixing the AttributeError that was raised when
moosicd_main.py tried to set this attribute.
- Version 1.4.1-beta2: Critical bug fixes for the previous beta.
- The play() function in moosicd_main.py no longer appends the songname to the
command vector if matched-groups substition was already done.
- The player log is now written with line-buffered output.
- moosic.pod now mentions the loop-related commands.
- Version 1.4.1: State saving and match group substition.
Tue 06 May 2003
- packed_list() was commented out, since I'm not sure if it's a good idea.
- A loop mode was implemented for moosicd. The appropriate moosicd methods
and moosic commands were implemented, but they need further testing and
documentation.
- The __getitem__ and __getslice__ moosicd methods seem to work as expected.
I might just make them official.
- Version 1.4.1-beta1: Just for you, Ray.
Mon 05 May 2003
- The indexed_list() moosicd method was fixed so that it returns a correct
value for "start" in the case when the "start" input parameter is negative
and its absolute value is greater than the length of the list.
- The packed_list() moosicd method was added.
- The implementation of saving/loading state at startup/shutdown has been
completed, but hasn't been tested yet.
- moosicd's option handling code and config file loading code was cleaned up
and restructured to work well with saved state loading and to avoid the
use of global variables.
Sun 04 May 2003
- TcpMoosicServer and UnixMoosicServer now override handle_error so that the
error is logged with moosicd's global log object.
- split_range() was moved from moosicd_methods.py to moosicd_support.py.
Sat 03 May 2003
- Match group substition was implemented in moosicd's song player. For
example, if the config contains an entry with a regex of
"^file://(.*)\.(.*)$" and a command of "foo -t \2 \1", "\1" and "\2" in
the command will be replaced with whatever was matched by the first and
second parenthesized groups, respectively.
- $item substitution in moosicd's song player was improved to work on command
elements that contain "$item" as a substring, in addition to command
elements that are exactly "$item".
Fri 02 May 2003
- The home-baked shuffle function in the utilities module has been abandoned
in favor of the much faster random.shuffle function in the standard library.
- The sort and reverse moosicd methods were slightly optimized for memory use.
- The "sort", "shuffle", and "reverse" commands now accept a range argument
which limits their operation to the items within the given range.
- The singleton restriction was removed from "data" in moosicd. I decided it
was a ill-conceived design.
- The __setattr__ method that prevents creating new attributes for DataStore
objects is now only installed at the end of executing the constructor, in
order to make the constructor's code simpler and clearer.
Thu 01 May 2003
- The "data" object in moosicd_support.py is now an instance of the DataStore
class instead of a class object.
- It is now impossible to set an attribute of the "data" object used in
moosicd unless the attribute was bound in data's class definition.
- The singleton pattern was implemented for the "data" object used in moosicd.
Tue 29 Apr 2003
- Version 1.4: The XML-RPC revolution.
Mon 28 Apr 2003
- The api_version() moosicd method was added.
- The Makefile was updated to generate HTML documentation from POD files and
from Python modules.
- Moosic_API.txt has been completed.
- A bad variable name in the get_history_limit() moosicd method was fixed.
- The history list now shrinks itself down to max_hist_size when
set_history_limit() is called if the length of the former is greater than
the latter. Attempts to set the history limit below zero are now detected
and thwarted.
Sun 27 Apr 2003
- Some bugs uncovered by testing were fixed.
- Explicit type checking was added to the "insert" moosicd method. This
uses the introspection API that was standardized in PEP 252 and which was
implemented in Python 2.2.
- UnixStreamTransport was moved back outside of LocalMoosicProxy because it
might be useful to someone else who wants to shove XML-RPC calls over a
Unix socket.
- The wrap() and xmlrpc_server_doc() functions were added to the utilities
module.
Thu 24 Apr 2003
- The return value of the history moosicd method was changed to a more
sophisticated structure that cleanly separates the item that was played
from the time it was played.
- The "get_history_limit" and "set_history_limit" moosicd methods were
added.
- Docstrings were written for the LocalMoosicProxy and InetMoosicProxy
factory functions in the utilities module, and the UnixStreamTransport
class was tucked away inside the LocalMoosicProxy function.
- LocalMoosicProxy and InetMoosicProxy were moved into a new module, named
"moosic_factory".
Tue 22 Apr 2003
- Aliases for the queue_length moosicd method were created: "length" and
"__len__".
Mon 21 Apr 2003
- The indexed_list() moosicd method now converts a negative index number
into its non-negative equivalent. This feature was present in previously
released versions, but I seem to have forgotten it when I did the big
conversion to the 1.4 architecture.
- The code in the play() function in moosicd_main.py that replaces
occurrences of "$item" was fixed so that it doesn't append the songname to
the command vector if "$item" substituion was already done.
- A suggestion to use shell script wrappers to do fancy things was added to
the default config file. This suggestion also notes that such shell
scripts should use exec to invoke the player program.
Tue 15 Apr 2003
- The eas^H^H^Hpassover egg was obfuscated a teeny bit.
- The threads created by the request handler to handle individual requests
are now forced to have non-daemon status so that they can properly return
a response to the client even if the other threads have terminated.
Mon 14 Apr 2003
- I just realized that the implementations for the grep and antigrep
functions in the utilities module are more complicated than necessary.
The match and antimatch classes, while cute, are completely not needed,
since the expression "match(pattern)" is practically equivalent to
"re.compile(pattern).search". Since I was rewriting these functions
anyway, I replaced my calls to filter() with list comprehensions. Those
list comprehensions are addictive little candies.
- The "history" moosicd method was modified to return an array of base64
instead of an array of strings.
Fri 11 Apr 2003
- Various buglets associated with the switch from "string" to "base64" were
fixed.
Thu 10 Apr 2003
- It turned out that all the Unicode nastiness could *not* be smoother over
through liberal use of encode(). The problem is that XML-RPC insists on
having all its strings in a specific, uniform text encoding (usually
UTF-8), which means that if I want to pass strings through XML-RPC, they
all must use a uniform codec. But that's practically impossible if I want
to be able to pass around queue item names, since (1) they can potentially
use any character encoding scheme which I can't sanely predict, and (2)
they must not be arbitrarily translated from one codec to another without
losing their validity, unless their original codec is somehow remembered,
which would be a bookkeeping nightmare. The solution is to use XML-RPC's
"base64" datatype instead of the "string" datatype for passing around
queue item objects.
- The preliminary work was done to ensure that the base64 datatype is used
to pass queue item data between the client and the server. I expect to be
ironing out the ramifications of this change for a little while to come.
In particular, the API documentation will have to be updated to stress
this fact. Additionally, care will have to be taken to ensure that
appropriate conversion is done when calling any Moosic server methods that
accept or return queue items (using xmlrpclib.Binary() for the former, and
str() for the latter).
Wed 02 Apr 2003
- The "del" command was added to moosic as an alias to "cut".
- The "status" command was added to moosic as an alias to "state".
- Various Python2-isms are quickly creeping into the code, such as list
comprehensions (lots of them!), augmented assignments, and calling methods
on instances of builtin types. I'm surprised that I bothered to pay lip
service to Python 1.5.x for so long.
Tue 01 Apr 2003
- I had rather painful fun debugging a slew of fatal UnicodeErrors. It
turns out that all nastiness can be smoothed over by calling encode() on
all strings before printing or otherwise outputting them.
Mon 31 Mar 2003
- The "shutting down" log notice in moosicd was moved from the die method to
the cleanup function, since the code in the die method isn't called if
moosicd is killed with a signal instead of with a Moosic request.
Sun 30 Mar 2003
- moosicd now cleans up stale socket files that get left behind when moosicd
crashes. This is a feature that I've wanted for a long time.
- The Log class was improved in minor ways: a dictionary of priority names
was added, the priority name is now mentioned in the log output, and
type-checking was improved.
Fri 28 Mar 2003
- The flow control in moosicd was polished up so that it quits properly.
- moosic.pod was updated to note that the "pl-*" commands can be used to
read lists from standard input.
- Version 1.3.4: Tiny fixes.
Tue 25 Mar 2003
- A mistake that prevented shuffling from being applied when the "pl-*"
moosic commands were used was corrected.
- All critical sections in moosicd now use the proper idiom for acquiring
and releasing the lock.
- The 1.3.x version of moosicd was made more robust by protecting the calls
to the do_command() method of MoosicHanlder inside a try block. A finally
clause is also used to ensure that the lock object is released
appropriately. This means that moosicd is no longer completely hosed when
an unexpected exception is raised while handling a request.
Mon 24 Mar 2003
- The "move_list" moosicd method was added.
- The "move" moosicd method was rewritten in a simpler way.
- Most lock releasing is now performed within "finally" clauses to ensure
that the lock is released when the locked code raises an exception. I
still need to ensure that this is done every time the lock is used.
- The "append", "prepend", and "insert" moosicd methods were rewritten to
use slice assignments and list comprehensions instead of the insert() or
append() list methods and for loops.
- The "pre" command was added to moosic as an alias for "prepend".
Sun 23 Mar 2003
- The initial prototype of the moosic_proxy program was written. It still
needs to be fleshed out with command-line switches and a real manpage.
- The interface for passing ranges to Moosic server methods was finalized,
and all the relevant methods were converted appropriately.
- The following moosicd methods now accept an optional "range" argument
which limits their operation to the specified range: shuffle, sort,
reverse, remove, filter.
- I'm not sure yet, but I think I might be finished with making backwards
incompatible changes to the moosicd API. (At least until version 2.0 or
something equally earth-shaking.)
Thu 20 Mar 2003
- I finally broke down and added a hack to work around the evil, evil bug in
ogg123. For those of you just tuning in, when SIGTERM is sent to an
ogg123 process (i.e. whenever the "next" command is used), the process
will appear to be terminated (as far as calls to wait()/waitpid() can
determine), but the sound card will somehow remain busy for a fraction of
a second. (Don't ask me why; it doesn't make any sense to me either, even
after reading ogg123's source code.) As a result of this, moosicd will
try and fail to play the next song in the queue, since the player that
moosicd spawns generally will immediately exit with a "Device or resource
busy" error. Depending on your system, the phase of the moon, and the
mood of the nearest cat in the area, moosicd will quickly and repeatedly
consume a large chunk of the song queue quite unsuccessfully.
Fortunately, ogg123 seems to behave properly when SIGINT is sent to it, so
I've devised a shameful and unreliable hack that detects when the current
song is being played by ogg123, and sends SIGINT instead of SIGTERM.
- Version 1.3.3: I hate you, ogg123.
Sun 16 Mar 2003
- The makefile no longer includes MoosicClient.py when it squeezes moosic
into its executable form, since this module has been made practically
obsolete.
Sun 09 Mar 2003
- The listlock member of the data class in moosicd was renamed to "lock"
because it really is used for locking any of the data in the data class,
not just the song list.
Fri 07 Mar 2003
- Some moosicd methods were renamed to use under_scores rather than
StudlyCaps. I can still do fun API-breaking things like this since the
moosicd API isn't officially finalized yet.
- A moosicd method for querying how long the current song has been playing
was partially written. There are still some implementation issues to work
out.
Thu 06 Mar 2003
- The request handler has been made asynchronous by using the
SocketServer.ThreadingMixIn class. As a result of this, the lock
acquisition was made more fine grained by limiting it to non-read-only
requests.
- The qrunning flag in moosicd is no longer overloaded as a flag that is
used to signal moosicd to quit. A separate quitFlag is now used instead.
Wed 05 Mar 2003
- A misnamed variable in moosicd was fixed. Specifically, "log" was used
instead of "data.log" in the last else clause in the do_command method in
the MoosicHandler class. This bug would cause moosicd to crash if it
received an unrecognized command from a client.
- A bug in moosicd which allowed an IOError to go uncaught if the client
closed its end of the socket too early was fixed.
- Version 1.3.2: Emergency bug fixes.
Thu 27 Feb 2003
- A lot the code in moosicd_main.py was moved into its own file,
moosicd_support.py.
Wed 26 Feb 2003
- Several variables in moosicd were renamed for increased clarity.
- moosicd was given a heavy and comprehensive massage in preparation for
phasing out the old home-brewed client-server RPC protocol in favor of
XML-RPC.
- The functions that implement the commands that moosicd can receive from a
client have been split out from moosicd into a separate module:
moosic_methods.py.
- The parse_range function has been moved from moosicd_main.py into the
utilities.py module.
- Python 2.2 or higher is now officially required, due to the use of the
xmlrpclib module.
Mon 24 Feb 2003
- moosicd now has its implementation spread across multiple source files,
and thus must also be joined with squeezeTool.
Sun 23 Feb 2003
- Several functions which are common to both moosic and moosicd were moved
into the utilities.py module. The Makefile was updated accordingly.
- This marks the beginning of the 1.4 branch of Moosic.
Thu 20 Feb 2003
- The --config-dir option is now properly mentioned in the output of "moosic
--help"
- A "clean" target was added to the Makefile.
- The server log file is now line-buffered to help prevent data loss in case
of a server crash.
- Version 1.3.1: New minor features, and small annoyances squashed.
Wed 19 Feb 2003
- The --tcp option was added to moosic and used to test moosicd's new TCP/IP
capabilities.
Tue 18 Feb 2003
- The --sort commandline option was added to moosic.
Mon 17 Feb 2003
- In the response handler for the INSERT command to moosicd, the code now
returns if the expected space character is missing, instead of wrongly
attempting to execute the rest of the code in the INSERT handler.
- All exceptions thrown by the code in the MoosicClient module are now
derived from the MoosicError class.
- moosic now catches all the exceptions that might be thrown by the code in
the MoosicClient module.
Sun 16 Feb 2003
- I changed my mind about moving the documentation files into their own
directory, so I moved them back.
Fri 14 Feb 2003
- Options to the moosic program can now be specified either before the
command or after (or both).
Wed 12 Feb 2003
- The call to wait() in the song player function was replaced with a call to
waitpid(). This was done in an attempt to ensure proper behavior for when
the player spawns a multi-threaded program (such as ogg123) to play a
song. The player function now returns only when the process that was
specifically spawned by the player exits, instead of returning whenever at
least one of the player's children finishes. Unfortunately, this doesn't
really fix the reported problem of ogg123 leaving the sound card locked
after it has seemingly exited, but I've let this change remain since it
hurts nothing and makes the purpose of the code a little more clear and
explicit to those reading it.
Wed 29 Jan 2003
- The documentation files (manpages and API document) were moved into their
own directory, and the Makefiles were updated accordingly.
- An option was added to moosicd which causes it to listen to a TCP/IP
socket for client requests instead of using the normal client-server
communication method. (Still untested.)
- An option was added to moosic to prevent replacing directories named on
the command line with their contents ("--no-recurse").
- The "--no-file-munge" option to moosic was renamed to "--non-file-args",
and is now meant to indicate that command-line arguments should not be
interpreted as filenames. (The old name is still around for backward
compatibility, but you didn't hear me say that.)
Mon 27 Jan 2003
- A little work was done on Moosic_Client_API.txt, including the addition of
a notice of the document's state of incompleteness.
- The "broken pipe" error messages associated with the "list" command were
eliminated by catching and ignoring pipe-related IOErrors in the moosic
client.
Wed 11 Dec 2002
- The MoosicClient class was was split out of the command-line client into
its own module. The squeezeTool.py is now used to squoosh the two parts
into a single executable.
Tue 10 Dec 2002
- Version 1.3: Little changes on the outside, big changes on the inside.
Sun 8 Dec 2002
- A bug in the 'stagger' command was fixed. This bug was only triggered when
there was at least one item in the list that didn't match any of the
regular expressions named on the command line.
Fri 1 Nov 2002
- The shell-quoting used when invoking the find command was improved to
properly handle pathnames containing single-quotes.
Tue 13 Aug 2002
- The documentation for the 'history' command in moosic was updated.
Sun 21 Jul 2002
- The gazillions of lines of conditional debugging messages were removed
from moosicd. I really wasn't using them, and they were just creating a
huge clutter. This means that the -d option is pretty useless.
- The 'unpause' command was added to moosic.
- The --config-dir option was added to moosic.
- Lots of debugging was done. moosic amd moosicd are now actually usable
enough to start a serious testing phase.
Tue 16 Jul 2002
- The "How to Write Your Own Moosic Client" document was started.
- The song player component of moosicd now captures the output of the
programs it spawns and places this output into the file named
"$HOME/.moosic/player_log-$HOSTNAME".
- moosicd now creates the ~/.moosic/ directory with its mode set to 0700,
reducing the possibility of malicious exploitation.
Wed 10 Jul 2002
- WARNING: Interface change. The regular expressions in the
~/.moosic/config file are no longer implicitly case-insensitive. Case
insensitive matching must now be explicitly requested in the config file,
presumably by adding the "(?i)" switch to the regexps (which has been done
in the default config file).
- The Log class was completed.
- The song player now outputs a relevant message when it has no handler for
a particular file.
Tue 09 Jul 2002
- The "True" and "False" constants are now used for boolean values instead
of literal 1 and 0.
- Stubs for the various MoosicClient command methods were written, and
several of them were implemented.
- The 'partial-sort' command was added to moosic. The documentation for
this command and for the 'stagger' command was completed.
Tue 02 Jul 2002
- The 'stagger' command was added to moosic. The documentation for this
command still needs to be added to the manpage and the internal help.
Tue 04 Jun 2002
- The staggered_merge() function was added to moosic in anticipation of
adding a new shuffling method that takes advantage of it. It's chock full
of functional programming goodness.
- More whitespace was added to shuffle() in an attempt to make it less
magical-looking. I don't think it worked very well. It's just a magical
function.
Fri 31 May 2002
- The MoosicData class was created within moosicd in an effort to purge the
use of global variables.
- An overhaul of the logging system in moosicd was started.
Tue 28 May 2002
- Several changes from versions 1.2.6 and 1.2.7 were merged into the 1.3
codebase.
- Both moosic and moosicd were adapted in various ways to accomodate the new
communication protocol.
Mon 27 May 2002
- In the client, a MoosicClient class was created to provide a simple
programmatic interface for sending commands to moosicd. The communication
protocol between a client and the server was clearly defined. The
constructor and the internal _generic_request methods were completed.
Tue 21 May 2002
- Version 1.2.7: Band-aid for the "broken pipe" bug.
- Exception handling in the client and the server was improved so that fewer
exceptions go uncaught. This drastically reduces the nastiness that
results from the "broken pipe" error that can be produced when piping the
output of "moosic list" to another program.
Tue 07 May 2002
- The output of "moosic --showcommands" was updated.
- Version 1.2.6: Documentation, finally!
Mon 06 May 2002
- The manual pages for moosic and moosicd have been completed.
Tue 23 Apr 2002
- A "toggle-pause" command was added.
Tue 16 Apr 2002
- Proper manuals (in the POD format) for moosic and moosicd have been
started.
Tue 09 Apr 2002
- The play() function now uses a different method for silencing the stdout
and stderr of the processes it spawns. Instead of closing stdin, stdout,
and stderr, a file descriptor referencing /dev/null is dup2()ed onto these
streams. This idea was suggested by David Bustos <bustos@caltech.edu>.
- In the process of doing the above, a bug that interfered with the
suppression of stdout and stderr was fixed. This bug was fixed by working
with sys.__stdout__ instead of sys.stdout.
- When the play() function looks up the command to use for playing a file,
it now makes a copy of the command list named in the config, instead of
working with a reference to this list. This allows me to safely perform
$item replacement on the command list before executing it.
- The part of the code contained in the listener_thread() function which
instantiated the MusicServer was moved outside this function, slightly
increasing code clarity and simplicity.
Mon 18 Mar 2002
- Eek. I've let circumstances distract me from this project for quite a long
time. Version 1.2.5 was released for real this time.
Tue 05 Feb 2002
- The "list" command is now able to take a range argument which limits the
listing to the given range.
- Everything has been nicely tested and debugged. We're long overdue for a
new release.
- Version 1.2.5: Lots of new and interesting commands.
Mon 04 Feb 2002
- The following commands were completed, but still may have bugs: "insert",
"pl-insert", "move", and "pause".
- A helper function was written for commands that accept ranges in their
argument list (such as "cut", "crop", and "move").
- The output of the "state" command was greatly changed. It is now more
informative and easier to understand.
- The documentation for the moosic client commands was reformatted.
- Command arguments to the moosic client are now case-insensitive.
Wed 30 Jan 2002
- More code documentation tweaks. The ambiguous and icky "state" variable
was renamed to "qrunning", and its role in the program was more clearly
defined and described. This is only of interest to people who are reading
the moosicd code.
Thu 24 Jan 2002
- The documentation for the "debug" command was removed, since it is no
longer useful for debugging anything. (The only things it was useful for
debugging have already been thoroughly debugged.)
Wed 23 Jan 2002
- Work was started on a "pause" command, which suspends the process that is
playing the current song so that a song can be paused in the middle of
being played and later resumed at the same point.
- More documenting comments were added to the source code, and various other
user-invisible name changes were made for the sake of code clarity.
Mon 07 Jan 2002
- The "help" command was removed. It didn't work properly unless the moosic
server was running, and the documentation for the command was incorrect,
and it was never anything more than a sugary alias for "--help" anyway.
Sun 06 Jan 2002
- BEWARE! I've made an imcompatible change to the interface! The behavior of
the "stop" command is now identical to that of the "sleep" command. The
new "wipe" command now does what the "stop" command previously did (i.e.
clear the playlist and stop the current song).
- For some strange reason, the "die" command was not mentioned in the
command documentation. This was fixed, and some aliases for "die" were
added.
- Playlist saving and loading was implemented. New commands: "pl-add",
"pl-append", "pl-prepend", "pl-mixlist", and "plainlist". OK, playlist
saving wasn't really implemented: you have to redirect the output of
"plainlist" to a file. Cry me a river.
- The "cleanup" handler function in moosicd now ignores various exceptions
that might occur as it runs.
Thu 15 Nov 2001
- Ok, I think version 1.2 has been tested enough. It's time to release it.
- Version 1.2: The portable release.
Wed 14 Nov 2001
- The "play" shell script (which usually comes with sox) is no longer used
to play files in the default configuration file, since it doesn't work
properly with the "next" command. Instead, sox is called directly.
- You can now use a special "$item" token in the command lines in the
filetype association (configuration) file. This token is replaced with the
playlist item to be played.
- Some kinks in moosicd were ironed out to make sure that it always exits in
a clean fashion under normal circumstances. The is especially important
now that it has a socket file that it has to clean up after itself.
- Some basic testing has been completed, and everything seems to actually
work now.
Mon 12 Nov 2001
- The named Unix-domain sockets used to communicate between client and
server now exist within the filesystem, rather than taking advantage of
the Linux-only abstract namespace thingy.
- The "crop" and "cut" commands were added.
- moosicd now closes the stdin of external players, in addition to stdout
and stderr.
- The "list" command no longer includes the currently playing song as the
zeroth item. I decided that it was more redundant and confusing than
convenient.
Wed 07 Nov 2001
- The "showconfig" command was added.
Sun 04 Nov 2001
- A bug in which the moosic client would prepend items to the playlist in
reverse order has been fixed. This bug was introduced by the change in
client/server protocol that was made on Mon 29 Oct 2001.
Fri 02 Nov 2001
- The "reverse" command was added.
Mon 29 Oct 2001
- The protocol between the client and the server was changed so that the
APPEND and PREPEND server commands only take a single item as their
argument, rather than a whole list of items. Similarly, when the server
sends data to the client in response to a LIST command, each item is sent
in a separate packet instead of sending the entire list of items in one
great big giant packet. This solves the problem which prevented the
client and server from sending a list of items to each other if the list
was too long.
- Some of the server code was rearranged for greater clarity. Specifically,
the definitions for the MusicHandler and MusicServer classes were moved
outside of the definition of the listener_thread() function.
Sun 28 Oct 2001
- Version 1.1.2: More small fixes and improvements.
- This changelog now is ordered from newest to oldest instead of the other
way around.
Fri 26 Oct 2001
- The "version" command was added to the client. This prints out the version
number of both the client and the currently running server.
Thu 25 Oct 2001
- "fuser -ks /dev/dsp" is no longer used to stop playing the current song.
This method stopping the current song was evil in several ways. First, it
required fuser to be installed and in the user's path. Second, it would
blindly kill whatever process was using /dev/dsp whether or not moosic had
actually spawned that process. Third, it only produced any useful effect
if the program that was playing the current song actually used /dev/dsp,
which is not the case for programs such as playmidi.
- moosicd now prints out information regarding the configured filetype
associations if the debugging messages are turned on.
Wed 24 Oct 2001
- The --help option to moosic was shortened considerably, and the
--showcommands option was added.
- The formatting of the documentation of the commands was adjusted for
readability (dots were added).
Tue 16 Oct 2001
- The default configuration file was tweaked (the MIDI regexp was slightly
changed).
- The "reconfig" command should now actually work, as it never did before.
This still needs to be tested to be certain.
Mon 15 Oct 2001
- Version 1.1.1: Random tweaks and fixes.
Thu 11 Oct 2001
- The version number of moosic and moosicd is now listed as 1.1.1. I'll
probably tar this up and call it a formal release later today.
- The problem where moosicd would crash if its log file didn't already exist
was fixed.
Sun 30 Sep 2001
- The moosic client now accepts "shuffle" as equivalent to the "reshuffle"
command.
Mon 17 Sep 2001
- moosicd now uses socket.gethostname() instead of the HOSTNAME environment
variable.
Thu 13 Sep 2001
- INCOMPATIBLE CHANGE: The -c option to moosicd now specifies the server's
configuration directory instead of the configuration file.
- moosicd now defaults to writing all its output to a file
(~/.moosic/log-$HOSTNAME) instead of printing to the screen.
Mon 03 Sep 2001
- The code in the server that handles commands now catches any socket
exceptions which are thrown.
- When the server gets the DIE command, it now only kills whatever process
has /dev/dsp open if the server is actually playing a song.
Fri 10 Aug 2001
- The standard pre-release bugsearch has been declared complete.
- Version 1.1: Yummy new features.
Tue 07 Aug 2001
- Support for the "filter" command was added to the client. (Tee hee, small
detail to forget.)
- A deadlock that prevented the "die" command from working was fixed. The
"die" command _really_ works now. Really. I'm not lying this time.
- The "reconfigure" command was added.
- The "--no-file-munge" option was added.
Wed 01 Aug 2001
- The "die" command was disabled because it doesn't actually work.
- The "filter" command was added. This is a converse to the "remove" command
in that it removes everything that doesn't match the given regexp(s).
- The "die" command was fixed and re-enabled.
Tue 31 Jul 2001
- The association of file types to player programs has been moved into a
separate configuration file.
Fri 27 Jul 2001
- The server now numbers the list of items in the playlist, and includes the
current song as item zero.
- The "history" command was added.
Thu 26 Jul 2001
- The "die" command was added.
Wed 25 Jul 2001
- The program's history was moved out of the ChangeLog file and into the
HISTORY file.
- The dependency upon the external "date" command was removed.
Tue 24 Jul 2001
- This changelog was created.
- Stuff was added to the TODO list.
- A history of the program was written.
Mon 23 Jul 2001
- Version 1.0: Initial public release.
|