Fisheye: Tag 1.2 refers to a dead (removed) revision in file `openacs-4/contrib/obsolete-packages/mp3-jukebox/foo'. Fisheye: No comparison available. Pass `N' to diff? Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/mp3-jukebox.info =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/mp3-jukebox.info,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/mp3-jukebox.info 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,137 @@ + + + + + MP3 JukeBox + MP3 Jukeboxes + f + f + + + + oracle + postgresql + + Peter Vessenes + An MP3 Jukebox for Locally stored MP3 files. + 2001-03-20 + Ybos Corporation + An MP3 Jukebox for Locally stored MP3 files. It doesn't stream. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/bin/mp3_file_scan =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/bin/mp3_file_scan,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/bin/mp3_file_scan 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,22 @@ +#!/usr/bin/perl + +use MPEG::MP3Info; + +my $file = shift; + +my $tag = get_mp3tag($file); + +my $info = get_mp3info($file); + + + +for (keys %$tag) { + printf " { %s {%s} } ", $_, $tag->{$_}; +} + +for (keys %$info) { + printf " { %s {%s} } ", $_, $info->{$_}; +} + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/bin/mp3_info_determine =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/bin/mp3_info_determine,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/bin/mp3_info_determine 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,35 @@ +#!/usr/bin/perl + +use MPEG::MP3Info; + +$scanned = 0; +$total = 0; +while () { + + $total++; + chop; + my $file = $_; + + my $tag = get_mp3tag($file) or next; + + + my $info = get_mp3info($file); + + print "--Start Track--\n"; + + for (keys %$tag) { + printf "%s => %s\n", $_, $tag->{$_}; + } + + for (keys %$info) { + printf "%s => %s\n", $_, $info->{$_}; +} + + print "--End Track--\n"; + undef $tag; + undef $info; + + $scanned++; +} + +print "\n-----\nTotal Songs: $total\nScanned Songs: $scanned\n-----\n"; Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/sql/oracle/mp3-jukebox-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/sql/oracle/mp3-jukebox-create.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/sql/oracle/mp3-jukebox-create.sql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,545 @@ +-- @author tigre@ybos.net +-- @author jennie@ybos.net + +begin + acs_object_type.create_type ( + supertype => 'acs_object', + object_type => 'mp3', + pretty_name => 'MP3', + pretty_plural => 'MP3s', + table_name => 'MP3_MP3S', + id_column => 'MP3_ID' + ); + + acs_object_type.create_type ( + supertype => 'acs_object', + object_type => 'mp3_playlist', + pretty_name => 'Playlist', + pretty_plural => 'Playlists', + table_name => 'MP3_PLAYLISTS', + id_column => 'PLAYLIST_ID' + ); +end; +/ + +create table mp3_mp3s ( + mp3_id constraint mp3_mp3_id_fk + references acs_objects (object_id) + constraint mp3_mp3s_pk + primary key, + file_path varchar(200) + constraint mp3_mp3s_nn + not null + constraint mp3_mp3s_file_unique + unique, + title varchar(200) + constraint mp3_mp3s_title_nn + not null, + artist varchar(100), + bitrate varchar(50), + album varchar(200), + tracknum integer, + genre varchar(100), + year varchar(10), + layer integer, + copyright_p char(1) default 'f' + constraint mp3_mp3s_copyright_p_ck + check(copyright_p in ('t','f')), + version integer, + mode_num integer, + stereo_p char(1) default 'f' + constraint mp3_mp3s_stereo_p_ck + check(stereo_p in ('t','f')), + frequency number, + minutes integer, + seconds integer, + comments varchar(200), + vbr_p char(1) default 'f' + constraint mp3_mp3s_vbr_p_ck + check(vbr_p in ('t','f')), + state varchar(50), + deleted_p char(1) default 'f' + constraint mp3_mp3s_deleted_p_ck + check(deleted_p in ('t','f')) +); + +create table mp3_playlists ( + playlist_id constraint mp3_playlist_id_fk + references acs_objects (object_id) + constraint mp3_playlists_pk + primary key, + name varchar(100), + shuffle_p char(1) default 'f' + constraint mp3_playlists_shuffle_p_ck + check(shuffle_p in ('f','t')), + remove_threshold integer +); + +create table mp3_mp3_playlist_map ( + mp3_id constraint mp3_map_mp3_id_fk + references mp3_mp3s (mp3_id), + playlist_id constraint mp3_map_playlist_id_fk + references mp3_playlists (playlist_id), + sort_key integer, + -- This pk constraint will have ot be changed, maybe add a column + -- for the pk, thus allowing multiple instances of a given song + -- on a playlist + constraint mp3_map_pk + primary key (mp3_id,playlist_id) +); + +create table mp3_mp3_stats ( + mp3_id constraint mp3_mp3_stats_mp3_id_fk + references mp3_mp3s (mp3_id), + user_id constraint mp3_mp3_stats_user_id_fk + references users(user_id), + access_date date + constraint mp3_mp3_stats_access_date_nn + not null +); + +create table mp3_playlist_stats ( + playlist_id constraint mp3_playlist_stats_playlist_fk + references mp3_playlists (playlist_id), + user_id constraint mp3_playlists_stats_user_id_fk + references users(user_id), + access_date date + constraint mp3_playlist_stats_date_nn + not null +); + +create table mp3_votes ( + mp3_id constraint mp3_votes_mp3_id_fk + references mp3_mp3s (mp3_id), + playlist_id constraint mp3_votes_playlist_id_fk + references mp3_playlists (playlist_id), + user_id constraint mp3_votes_user_id_fk + references users(user_id), + vote integer + constraint mp3_votes_vote_nn + not null, + vote_date date +); + +create or replace view mp3_mp3_playlist_map_view as + select m.mp3_id, + m.playlist_id, + m.sort_key, + nvl(v.total,0) as total + from mp3_mp3_playlist_map m, + (select mp3_id, + playlist_id, + sum(vote) as total + from mp3_votes + group by mp3_id, playlist_id) v + where m.mp3_id = v.mp3_id (+) + and m.playlist_id = v.playlist_id (+); + +create or replace view mp3_mp3s_not_deleted as + select * + from mp3_mp3s + where deleted_p = 'f'; + +create or replace view mp3_playlist_song_count as + select mpv.playlist_id, count(*) as songs + from mp3_mp3_playlist_map_view mpv, + mp3_mp3s_not_deleted mnd, + mp3_playlists mp + where mpv.mp3_id = mnd.mp3_id + and mpv.playlist_id = mp.playlist_id + and mpv.total > mp.remove_threshold + group by mpv.playlist_id; + +create or replace package mp3 +as + function new ( + mp3_id in mp3_mp3s.mp3_id%TYPE default null, + file_path in mp3_mp3s.file_path%TYPE, + title in mp3_mp3s.title%TYPE, + artist in mp3_mp3s.artist%TYPE default null, + bitrate in mp3_mp3s.bitrate%TYPE default null, + album in mp3_mp3s.album%TYPE default null, + tracknum in mp3_mp3s.tracknum%TYPE default null, + genre in mp3_mp3s.genre%TYPE default null, + year in mp3_mp3s.year%TYPE default null, + layer in mp3_mp3s.layer%TYPE default null, + copyright_p in mp3_mp3s.copyright_p%TYPE default null, + version in mp3_mp3s.version%TYPE default null, + mode_num in mp3_mp3s.mode_num%TYPE default null, + stereo_p in mp3_mp3s.stereo_p%TYPE default null, + frequency in mp3_mp3s.frequency%TYPE default null, + minutes in mp3_mp3s.minutes%TYPE default null, + seconds in mp3_mp3s.seconds%TYPE default null, + comments in mp3_mp3s.comments%TYPE default null, + vbr_p in mp3_mp3s.vbr_p%TYPE default null, + state in mp3_mp3s.state%TYPE default null, + deleted_p in mp3_mp3s.deleted_p%TYPE default 'f', + object_type in acs_objects.object_type%TYPE default 'mp3', + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE default null, + creation_ip in acs_objects.creation_ip%TYPE default null, + context_id in acs_objects.context_id%TYPE default null + ) return acs_objects.object_id%TYPE; + + procedure delete ( + mp3_id in mp3_mp3s.mp3_id%TYPE + ); + + procedure mark_as_deleted ( + mp3_id in mp3_mp3s.mp3_id%TYPE + ); + +end mp3; +/ +show errors + +create or replace package body mp3 +as + function new ( + mp3_id in mp3_mp3s.mp3_id%TYPE default null, + file_path in mp3_mp3s.file_path%TYPE, + title in mp3_mp3s.title%TYPE, + artist in mp3_mp3s.artist%TYPE default null, + bitrate in mp3_mp3s.bitrate%TYPE default null, + album in mp3_mp3s.album%TYPE default null, + tracknum in mp3_mp3s.tracknum%TYPE default null, + genre in mp3_mp3s.genre%TYPE default null, + year in mp3_mp3s.year%TYPE default null, + layer in mp3_mp3s.layer%TYPE default null, + copyright_p in mp3_mp3s.copyright_p%TYPE default null, + version in mp3_mp3s.version%TYPE default null, + mode_num in mp3_mp3s.mode_num%TYPE default null, + stereo_p in mp3_mp3s.stereo_p%TYPE default null, + frequency in mp3_mp3s.frequency%TYPE default null, + minutes in mp3_mp3s.minutes%TYPE default null, + seconds in mp3_mp3s.seconds%TYPE default null, + comments in mp3_mp3s.comments%TYPE default null, + vbr_p in mp3_mp3s.vbr_p%TYPE default null, + state in mp3_mp3s.state%TYPE default null, + deleted_p in mp3_mp3s.deleted_p%TYPE default 'f', + object_type in acs_objects.object_type%TYPE default 'mp3', + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE default null, + creation_ip in acs_objects.creation_ip%TYPE default null, + context_id in acs_objects.context_id%TYPE default null + ) return acs_objects.object_id%TYPE + is + v_mp3_id mp3_mp3s.mp3_id%TYPE; + begin + v_mp3_id := acs_object.new ( + object_id => mp3_id, + object_type => object_type, + creation_date => creation_date, + creation_user => creation_user, + creation_ip => creation_ip, + context_id => context_id + ); + insert into mp3_mp3s + (mp3_id, file_path, title, artist, bitrate, album, tracknum, genre, year, layer, + copyright_p, version, mode_num, stereo_p, frequency, minutes, seconds, comments, + vbr_p, state, deleted_p) + values + (v_mp3_id, file_path, title, artist, bitrate, album, tracknum, genre, + year, layer, copyright_p, version, mode_num, stereo_p, frequency, + minutes, seconds, comments, vbr_p, state, deleted_p); + + return v_mp3_id; + end new; + + + + procedure delete ( + mp3_id in mp3_mp3s.mp3_id%TYPE + ) + is + begin + delete from mp3_mp3s where mp3_id = mp3.delete.mp3_id; + acs_object.delete(mp3_id); + end delete; + + + + procedure mark_as_deleted ( + mp3_id in mp3_mp3s.mp3_id%TYPE + ) + is + begin + + update mp3_mp3s + set deleted_p ='t' + where mp3_id = mp3.mark_as_deleted.mp3_id; + + end mark_as_deleted; + +end mp3; +/ +show errors + + +create or replace package mp3_playlist +as + + function new ( + playlist_id in mp3_playlists.playlist_id%TYPE default null, + name in mp3_playlists.name%TYPE default null, + shuffle_p in mp3_playlists.shuffle_p%TYPE default 'f', + remove_threshold in mp3_playlists.remove_threshold%TYPE default null, + object_type in acs_objects.object_type%TYPE default 'mp3_playlist', + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE default null, + creation_ip in acs_objects.creation_ip%TYPE default null, + context_id in acs_objects.context_id%TYPE + ) return acs_objects.object_id%TYPE; + + procedure delete ( + playlist_id in mp3_playlists.playlist_id%TYPE + ); + + procedure item_add ( + mp3_id in mp3_mp3s.mp3_id%TYPE, + playlist_id in mp3_playlists.playlist_id%TYPE, + sort_key in mp3_mp3_playlist_map.sort_key%TYPE default null + ); + + procedure item_remove ( + mp3_id in mp3_mp3s.mp3_id%TYPE, + playlist_id in mp3_playlists.playlist_id%TYPE + ); + + function vote_cast ( + user_id in users.user_id%TYPE, + playlist_id in mp3_playlists.playlist_id%TYPE, + mp3_id in mp3_mp3s.mp3_id%TYPE, + vote in mp3_votes.vote%TYPE, + vote_date in mp3_votes.vote_date%TYPE default sysdate + ) return mp3_mp3_playlist_map_view.total%TYPE; + + procedure item_order_swap ( + playlist_id in mp3_playlists.playlist_id%TYPE, + sort_key in mp3_mp3_playlist_map.sort_key%TYPE + ); + +end mp3_playlist; +/ +show errors + + + +create or replace package body mp3_playlist +as + function new ( + playlist_id in mp3_playlists.playlist_id%TYPE default null, + name in mp3_playlists.name%TYPE default null, + shuffle_p in mp3_playlists.shuffle_p%TYPE default 'f', + remove_threshold in mp3_playlists.remove_threshold%TYPE default null, + object_type in acs_objects.object_type%TYPE default 'mp3_playlist', + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE default null, + creation_ip in acs_objects.creation_ip%TYPE default null, + context_id in acs_objects.context_id%TYPE + ) return acs_objects.object_id%TYPE + is + v_playlist_id mp3_playlists.playlist_id%TYPE; + begin + v_playlist_id := acs_object.new ( + object_id => playlist_id, + object_type => object_type, + creation_date => creation_date, + creation_user => creation_user, + creation_ip => creation_ip, + context_id => context_id + ); + insert into mp3_playlists + (playlist_id, name, shuffle_p, remove_threshold) + values + (v_playlist_id, name, shuffle_p, remove_threshold); + return v_playlist_id; + end new; + + procedure delete ( + playlist_id in mp3_playlists.playlist_id%TYPE + ) + is + begin + delete from mp3_votes + where playlist_id = mp3_playlist.delete.playlist_id; + delete from mp3_mp3_playlist_map + where playlist_id = mp3_playlist.delete.playlist_id; + delete from mp3_playlists + where playlist_id = mp3_playlist.delete.playlist_id; + acs_object.delete(playlist_id); + end delete; + + -- Note: item_add uses "insert after" ordering, so "order" points to + -- the last record _not_ to be updated + procedure item_add ( + mp3_id in mp3_mp3s.mp3_id%TYPE, + playlist_id in mp3_playlists.playlist_id%TYPE, + sort_key in mp3_mp3_playlist_map.sort_key%TYPE default 0 + ) + is + cursor map_cur is + select mmpm.mp3_id, mmpm.playlist_id, mmpm.sort_key + from mp3_mp3_playlist_map mmpm, mp3_mp3s_not_deleted mmnd + where mmpm.mp3_id = mmnd.mp3_id + and mmpm.playlist_id = mp3_playlist.item_add.playlist_id + and mmpm.sort_key > mp3_playlist.item_add.sort_key + order by mmpm.sort_key; + l_sort_key mp3_mp3_playlist_map.sort_key%TYPE; + l_max_sort_key mp3_mp3_playlist_map.sort_key%TYPE; + l_new_sort_key mp3_mp3_playlist_map.sort_key%TYPE; + begin + select nvl(max(sort_key),0) into l_max_sort_key + from mp3_mp3_playlist_map + where playlist_id = mp3_playlist.item_add.playlist_id; + if sort_key > l_max_sort_key + then + l_sort_key := l_max_sort_key; + else + l_sort_key := sort_key; + end if; + l_new_sort_key := l_sort_key + 2; + for map_rec in map_cur + loop + update mp3_mp3_playlist_map + set sort_key = l_new_sort_key + where mp3_id = map_rec.mp3_id + and playlist_id = map_rec.playlist_id; + l_new_sort_key := l_new_sort_key + 1; + end loop; + insert into mp3_mp3_playlist_map + (mp3_id, playlist_id, sort_key) + values + (mp3_id, playlist_id, l_sort_key + 1); + end item_add; + + -- We'll just delete the mapping and it's corresponding votes + -- We won't worry about gaps in the order + procedure item_remove ( + mp3_id in mp3_mp3s.mp3_id%TYPE, + playlist_id in mp3_playlists.playlist_id%TYPE + ) + is + begin + delete from mp3_votes + where mp3_id = mp3_playlist.item_remove.mp3_id + and playlist_id = mp3_playlist.item_remove.playlist_id; + delete from mp3_mp3_playlist_map + where mp3_id = mp3_playlist.item_remove.mp3_id + and playlist_id = mp3_playlist.item_remove.playlist_id; + end item_remove; + + function vote_cast ( + user_id in users.user_id%TYPE, + playlist_id in mp3_playlists.playlist_id%TYPE, + mp3_id in mp3_mp3s.mp3_id%TYPE, + vote in mp3_votes.vote%TYPE, + vote_date in mp3_votes.vote_date%TYPE default sysdate + ) return mp3_mp3_playlist_map_view.total%TYPE + is + l_vote_sum mp3_votes.vote%TYPE; + begin + insert into mp3_votes + (mp3_id, playlist_id, user_id, vote, vote_date) + values + (mp3_id, playlist_id, user_id, vote, vote_date); + select total into l_vote_sum + from mp3_mp3_playlist_map_view + where mp3_id = mp3_playlist.vote_cast.mp3_id + and playlist_id = mp3_playlist.vote_cast.playlist_id; + return l_vote_sum; + end vote_cast; + + -- "swap w/ next" + procedure item_order_swap ( + playlist_id in mp3_playlists.playlist_id%TYPE, + sort_key in mp3_mp3_playlist_map.sort_key%TYPE + ) + is + l_next_order mp3_mp3_playlist_map.sort_key%TYPE; + begin + select min(sort_key) into l_next_order + from mp3_mp3_playlist_map m, mp3_mp3s_not_deleted d + where m.mp3_id = d.mp3_id + and m.sort_key > mp3_playlist.item_order_swap.sort_key; + + update mp3_mp3_playlist_map mmpm + set sort_key = decode(mmpm.sort_key, + mp3_playlist.item_order_swap.sort_key, + mp3_playlist.item_order_swap.sort_key + 1, + mp3_playlist.item_order_swap.sort_key) + where sort_key in (mp3_playlist.item_order_swap.sort_key, + l_next_order); + end item_order_swap; + +end mp3_playlist; +/ +show errors + + +-- permissions don't quite work with the file system we've set up; most +-- would be useful under /admin, where the admin permission is required. + +--declare +-- default_context acs_objects.object_id%TYPE; +-- registered_users acs_objects.object_id%TYPE; +-- the_public acs_objects.object_id%TYPE; + +--begin +-- acs_privilege.create_privilege('mp3_view_mp3'); +-- acs_privilege.create_privilege('mp3_create_mp3'); +-- acs_privilege.create_privilege('mp3_delete_mp3'); +-- acs_privilege.create_privilege('mp3_modify_mp3'); +-- acs_privilege.create_privilege('mp3_view_playlist'); +-- acs_privilege.create_privilege('mp3_create_playlist'); +-- acs_privilege.create_privilege('mp3_delete_playlist'); +-- acs_privilege.create_privilege('mp3_modify_playlist'); +-- acs_privilege.create_privilege('mp3_admin_mp3'); +-- acs_privilege.create_privilege('mp3_admin_playlist'); +-- acs_privilege.create_privilege('mp3_admin'); +-- acs_privilege.add_child('mp3_admin_mp3', 'mp3_view_mp3'); +-- acs_privilege.add_child('mp3_admin_mp3', 'mp3_create_mp3'); +-- acs_privilege.add_child('mp3_admin_mp3', 'mp3_delete_mp3'); +-- acs_privilege.add_child('mp3_admin_mp3', 'mp3_modify_mp3'); +-- acs_privilege.add_child('mp3_admin_playlist', 'mp3_view_playlist'); +-- acs_privilege.add_child('mp3_admin_playlist', 'mp3_create_playlist'); +-- acs_privilege.add_child('mp3_admin_playlist', 'mp3_delete_playlist'); +-- acs_privilege.add_child('mp3_admin_playlist', 'mp3_modify_playlist'); +-- acs_privilege.add_child('mp3_admin', 'mp3_admin_playlist'); +-- acs_privilege.add_child('mp3_admin', 'mp3_admin_mp3'); + +-- -- bind privileges to global names + +-- acs_privilege.add_child('create','mp3_create_mp3'); +-- acs_privilege.add_child('create','mp3_create_playlist'); +-- acs_privilege.add_child('write','mp3_modify_mp3'); +-- acs_privilege.add_child('write','mp3_modify_playlist'); +-- acs_privilege.add_child('read','mp3_view_mp3'); +-- acs_privilege.add_child('read','mp3_view_playlist'); +-- acs_privilege.add_child('delete','mp3_delete_mp3'); +-- acs_privilege.add_child('delete','mp3_delete_playlist'); +-- acs_privilege.add_child('admin','mp3_admin'); + +-- default_context := acs.magic_object_id('default_context'); +-- registered_users := acs.magic_object_id('registered_users'); +-- the_public := acs.magic_object_id('the_public'); + +-- -- give the public the power to view playlists by default + +-- acs_permission.grant_permission ( +-- object_id => acs.magic_object_id('default_context'), +-- grantee_id => acs.magic_object_id('the_public'), +-- privilege => 'mp3_view_playlist' +-- ); + + +-- -- give the public the power to view mp3s by default + +-- acs_permission.grant_permission ( +-- object_id => acs.magic_object_id('default_context'), +-- grantee_id => acs.magic_object_id('the_public'), +-- privilege => 'mp3_view_mp3' +-- ); + +-- end; +-- / Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/sql/oracle/mp3-jukebox-drop.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/sql/oracle/mp3-jukebox-drop.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/sql/oracle/mp3-jukebox-drop.sql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,67 @@ +-- @author jennie@ybos.net +-- @author wirth@ybos.net + +-- dropping permissions +delete from acs_permissions + where privilege in + ('mp3_view_mp3','mp3_create_mp3','mp3_delete_mp3','mp3_modify_mp3', + 'mp3_view_playlist','mp3_create_playlist','mp3_delete_playlist', + 'mp3_modify_playlist','mp3_admin_mp3','mp3_admin_playlist', + 'mp3_admin'); + +delete from acs_privilege_hierarchy + where privilege in + ('mp3_view_mp3','mp3_create_mp3','mp3_delete_mp3','mp3_modify_mp3', + 'mp3_view_playlist','mp3_create_playlist','mp3_delete_playlist', + 'mp3_modify_playlist','mp3_admin_mp3','mp3_admin_playlist', + 'mp3_admin'); + +delete from acs_privilege_hierarchy + where child_privilege in + ('mp3_view_mp3','mp3_create_mp3','mp3_delete_mp3','mp3_modify_mp3', + 'mp3_view_playlist','mp3_create_playlist','mp3_delete_playlist', + 'mp3_modify_playlist','mp3_admin_mp3','mp3_admin_playlist', + 'mp3_admin'); + +delete from acs_privileges + where privilege in + ('mp3_view_mp3','mp3_create_mp3','mp3_delete_mp3','mp3_modify_mp3', + 'mp3_view_playlist','mp3_create_playlist','mp3_delete_playlist', + 'mp3_modify_playlist','mp3_admin_mp3','mp3_admin_playlist', + 'mp3_admin'); + + +declare + cursor play_cur is + select playlist_id from mp3_playlists; + cursor mp3_cur is + select mp3_id from mp3_mp3s; +begin + for play_rec in play_cur loop + mp3_playlist.delete(play_rec.playlist_id); + end loop; + for mp3_rec in mp3_cur loop + mp3.delete(mp3_rec.mp3_id); + end loop; +end; +/ +show errors + +drop package mp3_playlist; +drop package mp3; +drop view mp3_playlist_song_count; +drop view mp3_mp3s_not_deleted; +drop view mp3_mp3_playlist_map_view; +drop table mp3_mp3_playlist_map; +drop table mp3_mp3_stats; +drop table mp3_playlist_stats; +drop table mp3_votes; +drop table mp3_playlists; +drop table mp3_mp3s; + +begin + acs_object_type.drop_type ('mp3_playlist'); + acs_object_type.drop_type ('mp3'); +end; +/ +show errors \ No newline at end of file Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/sql/postgresql/mp3-jukebox-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/sql/postgresql/mp3-jukebox-create.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/sql/postgresql/mp3-jukebox-create.sql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,396 @@ +-- @author tigre@ybos.net +-- @author jennie@ybos.net + +-- openacs port: Ola Hansson rockola@mail.com + +create function inline_0 () +returns integer as ' +begin + PERFORM acs_object_type__create_type ( + ''mp3'', -- object_type + ''MP3'', -- pretty_name + ''MP3s'', -- pretty_plural + ''acs_object'', -- supertype + ''MP3_MP3S'', -- table_name + ''MP3_ID'', -- id_column + null, -- package_name + ''f'', -- abstract_p + null, -- type_extension_table + null -- name_method + + + ); + + PERFORM acs_object_type__create_type ( + ''mp3_playlist'', -- object_type + ''Playlist'', -- pretty_name + ''Playlists'', -- pretty_plural + ''acs_object'', -- supertype + ''MP3_PLAYLISTS'', -- table_name + ''PLAYLIST_ID'', -- id_column + null, -- package_name + ''f'', -- abstract_p + null, -- type_extension_table + null -- name_method + ); + + return 0; +end;' language 'plpgsql'; + +select inline_0 (); +drop function inline_0 (); + +create table mp3_mp3s ( + mp3_id integer + constraint mp3_mp3_id_fk + references acs_objects (object_id) + constraint mp3_mp3s_pk + primary key, + file_path varchar(200) + constraint mp3_mp3s_nn + not null + constraint mp3_mp3s_file_unique + unique, + title varchar(200) + constraint mp3_mp3s_title_nn + not null, + artist varchar(100), + bitrate varchar(50), + album varchar(200), + tracknum integer, + genre varchar(100), + year varchar(10), + layer integer, + copyright_p boolean default 'f' + constraint mp3_mp3s_copyright_p_ck + check(copyright_p in ('t','f')), + version integer, + mode_num integer, + stereo_p boolean default 'f' + constraint mp3_mp3s_stereo_p_ck + check(stereo_p in ('t','f')), + frequency numeric, + minutes integer, + seconds integer, + comments varchar(200), + vbr_p boolean default 'f' + constraint mp3_mp3s_vbr_p_ck + check(vbr_p in ('t','f')), + state varchar(50), + deleted_p boolean default 'f' + constraint mp3_mp3s_deleted_p_ck + check(deleted_p in ('t','f')) +); + +create table mp3_playlists ( + playlist_id integer + constraint mp3_playlist_id_fk + references acs_objects (object_id) + constraint mp3_playlists_pk + primary key, + name varchar(100), + shuffle_p boolean default 'f' + constraint mp3_playlists_shuffle_p_ck + check(shuffle_p in ('f','t')), + remove_threshold integer +); + +create table mp3_mp3_playlist_map ( + mp3_id integer + constraint mp3_map_mp3_id_fk + references mp3_mp3s (mp3_id), + playlist_id integer + constraint mp3_map_playlist_id_fk + references mp3_playlists (playlist_id), + sort_key integer, + -- This pk constraint will have ot be changed, maybe add a column + -- for the pk, thus allowing multiple instances of a given song + -- on a playlist + constraint mp3_map_pk + primary key (mp3_id,playlist_id) +); + +create table mp3_mp3_stats ( + mp3_id integer + constraint mp3_mp3_stats_mp3_id_fk + references mp3_mp3s (mp3_id), + user_id integer + constraint mp3_mp3_stats_user_id_fk + references users(user_id), + access_date timestamp + constraint mp3_mp3_stats_access_date_nn + not null +); + +create table mp3_playlist_stats ( + playlist_id integer + constraint mp3_playlist_stats_playlist_fk + references mp3_playlists (playlist_id), + user_id integer + constraint mp3_playlists_stats_user_id_fk + references users(user_id), + access_date timestamp + constraint mp3_playlist_stats_date_nn + not null +); + +create table mp3_votes ( + mp3_id integer + constraint mp3_votes_mp3_id_fk + references mp3_mp3s (mp3_id), + playlist_id integer + constraint mp3_votes_playlist_id_fk + references mp3_playlists (playlist_id), + user_id integer + constraint mp3_votes_user_id_fk + references users(user_id), + vote integer + constraint mp3_votes_vote_nn + not null, + vote_date timestamp +); + +create view mp3_mp3_playlist_map_view as + select m.mp3_id, + m.playlist_id, + m.sort_key, + coalesce(v.total,0) as total + from mp3_mp3_playlist_map m + left join (select mp3_id, + playlist_id, + sum(vote) as total + from mp3_votes + group by mp3_id, playlist_id) v + using (mp3_id, playlist_id); + +create view mp3_mp3s_not_deleted as + select * + from mp3_mp3s + where deleted_p = 'f'; + +create view mp3_playlist_song_count as + select mpv.playlist_id, count(*) as songs + from mp3_mp3_playlist_map_view mpv, + mp3_mp3s_not_deleted mnd, + mp3_playlists mp + where mpv.mp3_id = mnd.mp3_id + and mpv.playlist_id = mp.playlist_id + and mpv.total > mp.remove_threshold + group by mpv.playlist_id; + + +create function mp3__new (integer,varchar,varchar) +returns integer as ' +declare + p_mp3_id alias for $1; -- default null + p_file_path alias for $2; -- default null + p_title alias for $3; -- default null + p_deleted_p boolean default ''f''; + p_object_type varchar default ''mp3''; + p_creation_date timestamp default now(); + p_creation_user integer default null; + p_creation_ip varchar default null; + p_context_id integer default null; + v_mp3_id mp3_mp3s.mp3_id%TYPE; +begin + v_mp3_id := acs_object__new ( + p_mp3_id, -- object_id + p_object_type, -- object_type + p_creation_date, -- creation_date + p_creation_user, -- creation_user + p_creation_ip, -- creation_ip + p_context_id -- context_id + ); + insert into mp3_mp3s + (mp3_id, file_path, title, deleted_p) + values + (v_mp3_id, p_file_path, p_title, p_deleted_p); + + return v_mp3_id; +end;' language 'plpgsql'; + + +create function mp3__delete (integer) +returns integer as ' +declare + p_mp3_id alias for $1; +begin + delete from mp3_mp3s + where mp3_id = p_mp3_id; + + raise NOTICE ''Deleting mp3...''; + PERFORM acs_object__delete(p_mp3_id); + + return 0; +end;' language 'plpgsql'; + + +create function mp3__mark_as_deleted (integer) +returns integer as ' +declare + p_mp3_id alias for $1; +begin + update mp3_mp3s + set deleted_p =''t'' + where mp3_id = p_mp3_id; + + return 0; +end;' language 'plpgsql'; + + +create function mp3_playlist__new (integer,varchar,boolean,integer,varchar,timestamp,integer,varchar,integer) +returns integer as ' +declare + p_playlist_id alias for $1; -- default null + p_name alias for $2; -- default null + p_shuffle_p alias for $3; -- default ''f'' + p_remove_threshold alias for $4; -- default null + p_object_type alias for $5; -- default ''mp3_playlist'' + p_creation_date alias for $6; -- default now() + p_creation_user alias for $7; -- default null + p_creation_ip alias for $8; -- default null + p_context_id alias for $9; + v_playlist_id acs_objects.object_id%TYPE; +begin + v_playlist_id := acs_object__new ( + p_playlist_id, -- object_id + p_object_type, -- object_type + p_creation_date, -- creation_date + p_creation_user, -- creation_user + p_creation_ip, -- creation_ip + p_context_id -- context_id + ); + insert into mp3_playlists + (playlist_id, name, shuffle_p, remove_threshold) + values + (v_playlist_id, p_name, p_shuffle_p, p_remove_threshold); + + return v_playlist_id; +end;' language 'plpgsql'; + + +create function mp3_playlist__delete (integer) +returns integer as ' +declare + p_playlist_id alias for $1; +begin + delete from mp3_votes + where playlist_id = p_playlist_id; + delete from mp3_mp3_playlist_map + where playlist_id = p_playlist_id; + delete from mp3_playlists + where playlist_id = p_playlist_id; + + raise NOTICE ''Deleting playlist...''; + PERFORM acs_object__delete(p_playlist_id); + + return 0; +end;' language 'plpgsql'; + + + -- Note: item_add uses "insert after" ordering, so "order" points to + -- the last record _not_ to be updated +create function mp3_playlist__item_add (integer,integer,integer) +returns integer as ' +declare + p_mp3_id alias for $1; + p_playlist_id alias for $2; + p_sort_key alias for $3; -- default null + v_map_cur RECORD; -- Generic record used in for loop + v_l_sort_key mp3_mp3_playlist_map.sort_key%TYPE; + v_l_max_sort_key mp3_mp3_playlist_map.sort_key%TYPE; + v_l_new_sort_key mp3_mp3_playlist_map.sort_key%TYPE; + +begin + select coalesce(max(sort_key),0) into v_l_max_sort_key + from mp3_mp3_playlist_map + where playlist_id = p_playlist_id; + if p_sort_key > v_l_max_sort_key + then + v_l_sort_key := v_l_max_sort_key; + else + v_l_sort_key := p_sort_key; + end if; + v_l_new_sort_key := v_l_sort_key + 2; + FOR v_map_cur IN select mmpm.mp3_id, mmpm.playlist_id, mmpm.sort_key + from mp3_mp3_playlist_map mmpm, mp3_mp3s_not_deleted mmnd + where mmpm.mp3_id = mmnd.mp3_id + and mmpm.playlist_id = p_playlist_id + and mmpm.sort_key > p_sort_key + order by mmpm.sort_key + LOOP + update mp3_mp3_playlist_map + set sort_key = v_l_new_sort_key + where mp3_id = v_map_cur.mp3_id + and playlist_id = v_map_cur.playlist_id; + v_l_new_sort_key := v_l_new_sort_key + 1; + END LOOP; + insert into mp3_mp3_playlist_map + (mp3_id, playlist_id, sort_key) + values + (p_mp3_id, p_playlist_id, v_l_sort_key + 1); + + return 0; +end;' language 'plpgsql'; + + + -- We'll just delete the mapping and it's corresponding votes + -- We won't worry about gaps in the order +create function mp3_playlist__item_remove (integer,integer) +returns integer as ' +declare + p_mp3_id alias for $1; + p_playlist_id alias for $2; +begin + delete from mp3_votes + where mp3_id = p_mp3_id + and playlist_id = p_playlist_id; + delete from mp3_mp3_playlist_map + where mp3_id = p_mp3_id + and playlist_id = p_playlist_id; + + return 0; +end;' language 'plpgsql'; + + +create function mp3_playlist__vote_cast (integer,integer,integer,integer,timestamp) +returns integer as ' +declare + p_user_id alias for $1; + p_playlist_id alias for $2; + p_mp3_id alias for $3; + p_vote alias for $4; + p_vote_date alias for $5; -- default now() + v_l_vote_sum mp3_votes.vote%TYPE; + +begin + insert into mp3_votes + (mp3_id, playlist_id, user_id, vote, vote_date) + values + (p_mp3_id, p_playlist_id, p_user_id, p_vote, p_vote_date); + select total into v_l_vote_sum + from mp3_mp3_playlist_map_view + where mp3_id = p_mp3_id + and playlist_id = p_playlist_id; + return v_l_vote_sum; +end;' language 'plpgsql'; + + + -- "swap w/ next" +create function mp3_playlist__item_order_swap (integer,integer) +returns integer as ' +declare + p_playlist_id alias for $1; + p_sort_key alias for $2; + v_l_next_order mp3_mp3_playlist_map.sort_key%TYPE; +begin + select min(sort_key) into v_l_next_order + from mp3_mp3_playlist_map m, mp3_mp3s_not_deleted d + where m.mp3_id = d.mp3_id + and m.sort_key > p_sort_key; + + update mp3_mp3_playlist_map + set sort_key = (case when sort_key = p_sort_key then p_sort_key + 1 else p_sort_key end) + where sort_key in (p_sort_key,v_l_next_order); + return 0; +end;' language 'plpgsql'; Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/sql/postgresql/mp3-jukebox-drop.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/sql/postgresql/mp3-jukebox-drop.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/sql/postgresql/mp3-jukebox-drop.sql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,80 @@ +-- @author jennie@ybos.net +-- @author wirth@ybos.net + +-- openacs port: Ola Hansson rockola@mail.com + +-- dropping permissions +delete from acs_permissions + where privilege in + ('mp3_view_mp3','mp3_create_mp3','mp3_delete_mp3','mp3_modify_mp3', + 'mp3_view_playlist','mp3_create_playlist','mp3_delete_playlist', + 'mp3_modify_playlist','mp3_admin_mp3','mp3_admin_playlist', + 'mp3_admin'); + +delete from acs_privilege_hierarchy + where privilege in + ('mp3_view_mp3','mp3_create_mp3','mp3_delete_mp3','mp3_modify_mp3', + 'mp3_view_playlist','mp3_create_playlist','mp3_delete_playlist', + 'mp3_modify_playlist','mp3_admin_mp3','mp3_admin_playlist', + 'mp3_admin'); + +delete from acs_privilege_hierarchy + where child_privilege in + ('mp3_view_mp3','mp3_create_mp3','mp3_delete_mp3','mp3_modify_mp3', + 'mp3_view_playlist','mp3_create_playlist','mp3_delete_playlist', + 'mp3_modify_playlist','mp3_admin_mp3','mp3_admin_playlist', + 'mp3_admin'); + +delete from acs_privileges + where privilege in + ('mp3_view_mp3','mp3_create_mp3','mp3_delete_mp3','mp3_modify_mp3', + 'mp3_view_playlist','mp3_create_playlist','mp3_delete_playlist', + 'mp3_modify_playlist','mp3_admin_mp3','mp3_admin_playlist', + 'mp3_admin'); + + +create function inline_0 () +returns integer as ' +declare + v_play_rec record; + v_mp3_rec record; +begin + for v_play_rec in select playlist_id from mp3_playlists + loop + PERFORM mp3_playlist__delete (v_play_rec.playlist_id); + end loop; + for v_mp3_rec in select mp3_id from mp3_mp3s + loop + PERFORM mp3__delete (v_mp3_rec.mp3_id); + end loop; + + return 0; +end;' language 'plpgsql'; + +select inline_0 (); +drop function inline_0 (); + +-- drop package mp3_playlist; +-- drop package mp3; +drop function mp3_playlist__new (integer,varchar,boolean,integer,varchar,timestamp,integer,varchar,integer); +drop function mp3_playlist__delete (integer); +drop function mp3_playlist__item_add (integer,integer,integer); +drop function mp3_playlist__item_remove (integer,integer); +drop function mp3_playlist__vote_cast (integer,integer,integer,integer,timestamp); +drop function mp3_playlist__item_order_swap (integer,integer); +drop function mp3__new (integer,varchar,varchar); +drop function mp3__delete (integer); +drop function mp3__mark_as_deleted (integer); + +drop view mp3_playlist_song_count; +drop view mp3_mp3s_not_deleted; +drop view mp3_mp3_playlist_map_view; +drop table mp3_mp3_playlist_map; +drop table mp3_mp3_stats; +drop table mp3_playlist_stats; +drop table mp3_votes; +drop table mp3_playlists; +drop table mp3_mp3s; + +select acs_object_type__drop_type ('mp3_playlist','t'); +select acs_object_type__drop_type ('mp3','t'); Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/tcl/mp3-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/tcl/mp3-procs.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/tcl/mp3-procs.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,38 @@ +ad_library { + + general procs for the MP3 Jukebox. + + @author wirth@ybos.net + @creation-date Mar-12-2001 + taken largely from cm-defs.tcl +} + + +ad_proc -public mp3_search_select_sql { + { + -order_by "upper(title)" + -conditions "" + } + search_string_name +} { + Returns the sql to perform the file search based on the search string + stored in the named variable and any additional search criteria. + Additional conditions must be valid SQL with a leading 'and' +} { + return " +select title, artist, album, mp3_id +from mp3_mp3s_not_deleted +where upper(title) like '%' || upper(:$search_string_name) || '%' +or upper(artist) like '%' || upper(:$search_string_name) || '%' +$conditions +order by $order_by" +} + + +ad_proc db_nullify_empty_string { + string +} { + Added by Ola Hansson (rockola@mail.com) to ease the porting of mp3jukebox. +} { + return $string +} Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/tcl/scanner-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/tcl/scanner-procs.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/tcl/scanner-procs.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,33 @@ +ad_library { + + The Scanner procs for the MP3 Jukebox + + @author peterv@ybos.net + @creation-date Mar-02-2001 + @cvs-id $Id: scanner-procs.tcl,v 1.1 2001/10/17 19:44:08 olah Exp $ +} + + + + +ad_proc -public get_list_of_mp3s { +} { + This proc uses the package_id to check an appropriate directory. + It uses ad_parameter to check the MP3FileLocation variable. +} { + set package_id [ad_conn package_id] + set file_list [exec /usr/bin/find [ad_parameter -package_id $package_id MP3StagingLocation] ] + + return $file_list +} + +ad_proc -public mp3_name_from_file { filename } { + +} { + if { [regexp {([^/]*)\.[mM][Pp]3$} $filename match mp3_name] } { + return $mp3_name + } else { + return "Not AN MP3 File Name!" + } +} + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/index-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/index-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/index-oracle.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,21 @@ + + + + oracle8.1.6 + + + + + select name, mp.playlist_id, nvl(sc.songs,0) as songs + from acs_objects, mp3_playlists mp, + mp3_playlist_song_count sc + where object_id = mp.playlist_id + and context_id = :package_id + and mp.playlist_id = sc.playlist_id(+) + order by name + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/index.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/index.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/index.adp 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,27 @@ + +@context_bar@ +@page_title@ +@title@ + +

Available Playlists

+ + +There are currently no playlists available.

+ + + + + + + + + +
+ @playlists.name@ + + + Listen + +
+
+ Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/index.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/index.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/index.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,26 @@ +#/mp3/www/index.tcl +ad_page_contract { + @author tigre@ybos.net + @creation-date 8 March 2001 +} { +} -properties { + + playlists:multirow +} + +set title "MP3 Jukebox" +set context_bar "" +set page_title "MP3 Jukebox" +set package_id [ad_conn package_id] + + +# @author jennie@ybos.net +db_multirow playlists playlist_info " + select name, mp.playlist_id, nvl(sc.songs,0) as songs + from acs_objects, mp3_playlists mp, + mp3_playlist_song_count sc + where object_id = mp.playlist_id + and context_id = :package_id + and mp.playlist_id = sc.playlist_id(+) + order by name +" Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/index.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/index.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/index.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,20 @@ + + + + + + + select name, mp.playlist_id, coalesce(sc.songs,0) as songs + from acs_objects + join + mp3_playlists mp on (object_id = mp.playlist_id) + left join + mp3_playlist_song_count sc using (playlist_id) + where context_id = :package_id + order by name + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/master.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/Attic/master.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/master.adp 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,7 @@ + +@page_title@ + +

@page_title@

+<%= [eval ad_context_bar $context_bar] %> +
+ Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/one-playlist-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/one-playlist-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/one-playlist-oracle.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,19 @@ + + + + oracle8.1.6 + + + + + select name, remove_threshold, nvl(sc.songs,0) as songs, mp.playlist_id + from mp3_playlists mp, + mp3_playlist_song_count sc + where mp.playlist_id=:playlist_id + and sc.playlist_id(+) = mp.playlist_id + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/one-playlist.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/one-playlist.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/one-playlist.adp 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,71 @@ + +@context_bar@ +@page_title@ +@title@ + +

Information for playlist: @name@

+Name: @name@ +
+Score required to remove song: @remove_threshold@ + + +
+Listen: listen to @name@ +
+ +
+MP3s associated with @name@ + +

+ There are no mp3s associated with this playlist. + + + + + + + + + + + + + + + + + + + + + + + +
ScoreVoteTitleArtist 
+ + + + @playlist_mp3s.total@ + + + + + + + @playlist_mp3s.title@ + + + @playlist_mp3s.title@ + +   + + + @playlist_mp3s.artist@ + + + @playlist_mp3s.artist@ + + + listen to @playlist_mp3s.title@ +
+
\ No newline at end of file Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/one-playlist.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/one-playlist.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/one-playlist.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,62 @@ +#mp3/www/one-playlist.tcl +ad_page_contract { + + Lists properties of one playlist including related mp3s + + @author wirth@ybos.net + @creation-date 2000-03-02 + +} { + + playlist_id:naturalnum,notnull + +} -properties { + + page_title:onevalue + context_bar:onevalue + name:onevalue + playlist_mp3s:multirow + playlist_info + remove_threshold + playlist_id:onevalue + yes_vote:onevalue + no_vote:onevalue +} + + +set title "One Playlist" +set context_bar [list $title] +set page_title "One Playlist" + + +# @author jennie@ybos.net +db_1row playlist_info " + select name, remove_threshold, nvl(sc.songs,0) as songs, mp.playlist_id + from mp3_playlists mp, + mp3_playlist_song_count sc + where mp.playlist_id=:playlist_id + and sc.playlist_id(+) = mp.playlist_id +" + +db_1row vote_info " + select remove_threshold + from mp3_playlists + where playlist_id=:playlist_id +" + +db_multirow playlist_mp3s mp3_info " + select sort_key, + mp.title as title, map.mp3_id as mp3_id, total, artist, + decode (sign (total - :remove_threshold),1,'t','f') as active_p + from mp3_mp3_playlist_map_view map, + mp3_mp3s_not_deleted mp + where map.playlist_id = :playlist_id + and map.mp3_id=mp.mp3_id + order by sort_key +" + +set yes_vote "up" +set no_vote "down" +set ui_remove_threshold [expr -1 * $remove_threshold] + +ad_return_template \ No newline at end of file Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/one-playlist.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/one-playlist.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/one-playlist.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,45 @@ + + + + + + + select name, remove_threshold, coalesce(sc.songs,0) as songs, mp.playlist_id + from mp3_playlist_song_count sc + right join + mp3_playlists mp + using (playlist_id) + where mp.playlist_id=:playlist_id + + + + + + + + + select remove_threshold + from mp3_playlists + where playlist_id=:playlist_id + + + + + + + + + select sort_key, + mp.title as title, map.mp3_id as mp3_id, total, artist, + case when sign (total - :remove_threshold) = 1 then 't' else 'f' end as active_p + from mp3_mp3_playlist_map_view map, + mp3_mp3s_not_deleted mp + where map.playlist_id = :playlist_id + and map.mp3_id=mp.mp3_id + order by sort_key + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/vote-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/vote-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/vote-oracle.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,23 @@ + + + + oracle8.1.6 + + + + + begin + :1 := mp3_playlist.vote_cast ( + mp3_id => :mp3_id, + playlist_id => :playlist_id, + user_id => :user_id, + vote_date => sysdate, + vote => :vote_num + ); + end; + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/vote-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/vote-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/vote-postgresql.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,21 @@ + + + + postgresql7.1 + + + + + select mp3_playlist__vote_cast ( + :user_id, + :playlist_id, + :mp3_id, + :vote_num, + current_timestamp + ); + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/vote-thankyou.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/vote-thankyou.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/vote-thankyou.adp 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,9 @@ + +@page_title@ +@page_title@ +@context_bar@ + +Thank you for your vote @vote_words@ @mp3_title@ in playlist @name@. +


+You may now return to @name@. + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/vote-thankyou.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/vote-thankyou.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/vote-thankyou.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,46 @@ +#mp3/www/vote-thankyou.tcl +ad_page_contract { + + Thanks user for vote and returns to one-playlist.tcl + + @author wirth@ybos.net + @creation-date 2000-03-02 + + @param mp3_id + @param playlist_id + @param vote + +} { + mp3_id:naturalnum,notnull + playlist_id:naturalnum,notnull + vote_num:integer,notnull + +} -properties { + context_bar:onevalue + page_title:onevalue + mp3_id:onevalue + playlist_id:onevalue + vote_num:onevalue + vote_words:onevalue + name:onevalue + title:onevalue +} + +set title "Thanks for your vote" +set context_bar [list $title] +set page_title "Thanks for your vote" +set remove_p "" + +if { $vote_num==-1 } { + set vote_words "against" +} else { + set vote_words "for" +} + +db_1row name_info "select title as mp3_title, name + from mp3_mp3s, + mp3_playlists + where playlist_id=:playlist_id and mp3_id=:mp3_id" + + +ad_return_template \ No newline at end of file Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/vote-thankyou.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/vote-thankyou.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/vote-thankyou.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,14 @@ + + + + + + select title as mp3_title, name + from mp3_mp3s, + mp3_playlists + where playlist_id=:playlist_id and mp3_id=:mp3_id + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/vote.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/vote.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/vote.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,60 @@ +#mp3/www/vote.tcl +ad_page_contract { + + Vote to keep/remove mp3 in playlist + + @author wirth@ybos.net + @creation-date 2000-03-02 + + @param mp3_id + @param playlist_id + @param vote + +} { + mp3_id:naturalnum,notnull + playlist_id:naturalnum,notnull + vote:notnull +} + +set user_id [ad_verify_and_get_user_id] + +if {[string compare $vote "up"] == 0 } { + + set vote_num 1 + +} elseif {[string compare $vote "down"] == 0 } { + + set vote_num -1 + +} else { + + set complaint "Your vote was not valid. Please back up using the back button on your browser and try again." + ad_return_error "Error" "$complaint" + + return -code return + +} + +if [catch { + db_exec_plsql vote_cast " + begin + :1 := mp3_playlist.vote_cast ( + mp3_id => :mp3_id, + playlist_id => :playlist_id, + user_id => :user_id, + vote_date => sysdate, + vote => :vote_num + ); + end; + " +} errmsg ] { + + set complaint " The database did not accept your input. + See details for the error message below\n\n\t

$errmsg" + ad_return_error "Database Error" "$complaint" + return -code return + +} else { + + ad_returnredirect one-playlist?[export_url_vars playlist_id] +} \ No newline at end of file Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/file-search.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/file-search.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/file-search.adp 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,42 @@ + +@context_bar@ +@page_title@ +@title@ + +File search for string "@search_string@" + +


+ + + No files matched your criteria. Try another search: +
+
+ + +
+
+ + + + + + + + + + + + + + + + +
TitleArtistAlbum 
@mp3s.title@@mp3s.artist@@mp3s.album@edit | + listen | + delete + + | + Add to Playlist + +
+
\ No newline at end of file Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/file-search.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/file-search.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/file-search.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,33 @@ +# mp3/www/admin/file-search.tcl + +# Search to pick a file and give options for what to do + +ad_page_contract { + + @author wirth@ybos.net +} { + search_string + playlist_id:optional + +} -properties { + + mp3s:multirow + playlist_id:onevalue +} + +set user_id [ad_verify_and_get_user_id] +#requires admin permission as under /admin + +if { ![info exists search_string] } { + set search_string "" +} + +set select_sql [mp3_search_select_sql search_string] + +set title "File Search" +set context_bar [list $title] +set page_title "File Search" + +db_multirow mp3s mp3_search "$select_sql" + +ad_return_template Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/file-search.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/file-search.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/file-search.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,11 @@ + + + + + + $select_sql + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/index-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/index-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/index-oracle.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,36 @@ + + + + oracle8.1.6 + + + + + select name, mp.playlist_id, nvl(sc.songs,0) as songs + from acs_objects, mp3_playlists mp, + mp3_playlist_song_count sc + where object_id = mp.playlist_id + and context_id = :package_id + and mp.playlist_id = sc.playlist_id(+) + order by name + + + + + + + + +select title, mp3_id, creation_date +from (select title, mp3_id, creation_date + from mp3_mp3s_not_deleted, acs_objects + where mp3_id = object_id + and creation_date > sysdate - 1 + order by creation_date desc) +where rownum < 10 + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/index-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/index-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/index-postgresql.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,21 @@ + + + + postgresql7.1 + + + + +select title, mp3_id, creation_date +from (select title, mp3_id, creation_date + from mp3_mp3s_not_deleted, acs_objects + where mp3_id = object_id + and creation_date > current_timestamp - 1 + order by creation_date desc) nd + limit 10 + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/index.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/index.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/index.adp 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,56 @@ + +@context_bar@ +@page_title@ +@title@ + + +

Available Playlists

+ + + There are currently no playlists available.

+ + +

+ +Add a Playlist + +

MP3 Administration

+ +
  • Recently Uploaded MP3s + + There are currently no mp3s available.

    + + +

    + +
    +
  • + Find an MP3 + + +
  • +
  • + Add an MP3 + +
  • + Scan the staging location for new MP3s (This can take +a long time; be patient!) + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/index.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/index.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/index.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,39 @@ +#/mp3/admin/index.tcl +ad_page_contract { + @author tigre@ybos.net + @creation-date 8 March 2001 +} { +} -properties { + + playlists:multirow + mp3s:multirow + playlist_permission_p:onevalue + mp3_permission_p:onevalue +} + +set title "MP3 Jukebox Administration" +set context_bar "" +set page_title "MP3 Jukebox Administration" + +#requires admin permission as under /admin +set package_id [ad_conn package_id] + +# @author jennie@ybos.net +db_multirow playlists playlist_info " + select name, mp.playlist_id, nvl(sc.songs,0) as songs + from acs_objects, mp3_playlists mp, + mp3_playlist_song_count sc + where object_id = mp.playlist_id + and context_id = :package_id + and mp.playlist_id = sc.playlist_id(+) + order by name +" +db_multirow mp3s mp3_info " +select title, mp3_id, creation_date +from (select title, mp3_id, creation_date + from mp3_mp3s_not_deleted, acs_objects + where mp3_id = object_id + and creation_date > sysdate - 1 + order by creation_date desc) +where rownum < 10 +" Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/index.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/index.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/index.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,20 @@ + + + + + + + select name, mp.playlist_id, coalesce(sc.songs,0) as songs + from acs_objects + join + mp3_playlists mp on (object_id = mp.playlist_id) + left join + mp3_playlist_song_count sc using (playlist_id) + where context_id = :package_id + order by name + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/master.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/Attic/master.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/master.adp 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,8 @@ + +@page_title@ + +

    @page_title@

    +<%= [eval ad_context_bar $context_bar] %> +
    + + \ No newline at end of file Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-add-2-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-add-2-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-add-2-oracle.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,59 @@ + + + oracle8.1.6 + + + + +update acs_objects +set creation_user = :creation_user, + creation_ip = :creation_ip, + creation_date = sysdate, + context_id = :package_id +where object_id = :mp3_id + + + + + + + + +begin + :1 := mp3.new( + mp3_id => :mp3_id, + file_path => :client_filename, + title => :mp3_title, + $extra_vars + creation_user => :creation_user, + creation_ip => :creation_ip, + creation_date => sysdate, + context_id => :package_id +); +end; + + + + + + + + +update mp3_mp3s +set title = :mp3_title, + $extra_vars + deleted_p = 'f' +where mp3_id = :mp3_id + + + + + + + + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-add-2-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-add-2-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-add-2-postgresql.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,80 @@ + + + postgresql7.1 + + + + +update acs_objects +set creation_user = :creation_user, + creation_ip = :creation_ip, + creation_date = current_timestamp, + context_id = :package_id +where object_id = :mp3_id + + + + + + + + + select mp3__new( + :mp3_id, + :client_filename, + :mp3_title + + ); + + + + + + + + +update mp3_mp3s +set artist = :artist, + bitrate = :bitrate, + album = :album, + tracknum = :tracknum, + genre = :genre, + year = :year, + layer = :layer, + copyright_p = :copyright_p, + version = :version, + mode_num = :mode_num, + stereo_p = :stereo_p, + frequency = :frequency, + minutes = :minutes +where mp3_id = :mp3_id + + + + + + + +update mp3_mp3s +set file_path = :client_filename, + title = :mp3_title, + artist = :artist, + bitrate = :bitrate, + album = :album, + tracknum = :tracknum, + genre = :genre, + year = :year, + layer = :layer, + copyright_p = :copyright_p, + version = :version, + mode_num = :mode_num, + stereo_p = :stereo_p, + frequency = :frequency, + minutes = :minutes, + deleted_p = 'f' +where mp3_id = :mp3_id + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-add-2.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-add-2.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-add-2.adp 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,6 @@ + +@context_bar@ +@page_title@ +@title@ + +Successfully added the MP3: @mp3_title@ Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-add-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-add-2.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-add-2.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,221 @@ +#mp3/admin/mp3-add-2.tcl +ad_page_contract { + Read in the file specified by the form, store it in the file system, + parse out the relevant data and store it in the database. +} { + {upload_file ""} + mp3_id +} -properties { + sql:onevalue + page_title:onevalue + context_bar:onevalue +} + +set title "Add an MP3" +set context_bar [list $title] +set page_title "MP3 Added" + +#requires admin permission as under /admin +set package_id [ad_conn package_id] + +set exception_text "" +set exception_count 0 + +if { ![exists_and_not_null upload_file] } { + append exception_text "
  • You need to upload a file\n" + incr exception_count +} + +if { $exception_count > 0 } { + ad_return_complaint $exception_count $exception_text + return 0 +} + +set creation_ip [ad_conn "peeraddr"] +set creation_user [ad_conn "user_id"] + +set max_n_bytes [ad_parameter MaxNumberOfBytes fs] + +set tmp_filename [ns_queryget upload_file.tmpfile] +#set version_content [read [open $tmp_filename] $max_n_bytes] + +set file_extension [string tolower [file extension $upload_file]] +# remove the first . from the file extension +regsub "\." $file_extension "" file_extension + +set guessed_file_type [ns_guesstype $upload_file] + +set n_bytes [file size $tmp_filename] + +# strip off the C:\directories... crud and just get the file name +if {![regexp {([^//\\]+)$} $upload_file match client_filename]} { + # couldn't find a match + set client_filename $upload_file +} + +if [db_0or1row check_file_name " + select deleted_p + from mp3_mp3s + where file_path = :client_filename"] { + if { $deleted_p == "f" } { + ad_return_complaint 1 "That file seems to already exist in the database" + return + } else { + set update_entry_p 1 + } +} else { + set update_entry_p 0 +} + +set target_filename "[ad_parameter MP3FileLocation]/$client_filename" + +file copy -force $tmp_filename $target_filename + +#regsub www [acs_root_dir] "bin/mp3_file_scan" script_path + +set mp3_info_list [exec "[acs_root_dir]/packages/mp3-jukebox/bin/mp3_file_scan" $target_filename] +# Workaround due to plpgsql (as of PG 7.1.3) being unable to handle +# default values in functions): +# The number of items in "mp3_info_list" may vary so we initialize +# all the possible vars to "nullvalue" in advance to know they're always +# being set. + +set nullvalue [db_null] + +set mp3_title $nullvalue +set artist $nullvalue +set bitrate $nullvalue +set album $nullvalue +set tracknum $nullvalue +set genre $nullvalue +set year $nullvalue +set layer $nullvalue +set copyright_p $nullvalue +set version $nullvalue +set mode_num $nullvalue +set stereo_p $nullvalue +set frequency $nullvalue +set minutes $nullvalue +set seconds $nullvalue +set comments $nullvalue +set vbr_p $nullvalue +set state $nullvalue + +foreach info_item $mp3_info_list { + set info_key [string tolower [lindex $info_item 0]] + set info_val [lindex $info_item 1] + switch -exact $info_key { + title { + set mp3_title [db_nullify_empty_string $info_val] + # title is included in the standard sql, so no need to add to info_pairs + } + mm { + set minutes [db_nullify_empty_string $info_val] + set info_pairs(minutes) ":minutes" + } + ss { + set seconds [db_nullify_empty_string $info_val] + set info_pairs(seconds) ":seconds" + } + comment { + set comments [db_nullify_empty_string $info_val] + set info_pairs(comments) ":comments" + } + mode { + set mode_num [db_nullify_empty_string [expr int($info_val)]] + set info_pairs(mode_num) ":mode_num" + } + copyright - + vbr - + stereo { + set "${info_key}_p" [db_nullify_empty_string \ + [ad_decode $info_val 1 "t" 0 "f" ""]] + set "info_pairs(${info_key}_p)" ":${info_key}_p" + } + tracknum { + set tracknum [lindex [split $info_val /] 0] + set info_pairs(tracknum) ":tracknum" + } + layer - + version { + set $info_key [db_nullify_empty_string [expr int($info_val)]] + set info_pairs($info_key) ":$info_key" + } + default { + set $info_key [db_nullify_empty_string $info_val] + set info_pairs($info_key) ":$info_key" + } + } +} + +# If no title just use the file_name +if {![info exists mp3_title]} { + set mp3_title [mp3_name_from_file $client_filename] +} + +if $update_entry_p { + set mp3_id [db_string get_mp3_id " +select mp3_id +from mp3_mp3s +where file_path = :client_filename"] + + set extra_vars "" + foreach i_key [array names info_pairs] { + append extra_vars "\n $i_key = $info_pairs($i_key)," + } + + if [catch { + db_transaction { + db_dml undelete_mp3 " +update mp3_mp3s +set title = :mp3_title, + $extra_vars + deleted_p = 'f' +where mp3_id = :mp3_id +" + + db_dml fix_creation " +update acs_objects +set creation_user = :creation_user, + creation_ip = :creation_ip, + creation_date = sysdate, + context_id = :package_id +where object_id = :mp3_id +" + } + } errmsg ] { + + set complaint " The database did not accept your input. + See details for the error message below\n\n\t

    $errmsg" + ad_return_error "Database Error" "$complaint" + return -code return + + } + +} else { + + set extra_vars "" + foreach i_key [array names info_pairs] { + append extra_vars "\n $i_key => $info_pairs($i_key)," + } + + set mp3_id [db_null] + + if [catch { + db_transaction { + set mp3_id [db_exec_plsql add_mp3 ""] + db_dml update_mp3_info "" + } + } errmsg ] { + + set complaint " The database did not accept your input. + See details for the error message below\n\n\t

    $errmsg" + ad_return_error "Database Error" "$complaint" + return -code return + + } +} + +ad_return_template + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-add-2.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-add-2.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-add-2.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,24 @@ + + + + + + + select deleted_p + from mp3_mp3s + where file_path = :client_filename + + + + + + + +select mp3_id +from mp3_mp3s +where file_path = :client_filename + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-add.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-add.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-add.adp 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,31 @@ + +@context_bar@ +@page_title@ +@title@ + +

    Use the following form to add an mp3. +

    + +

    +@hidden_vars@ + + + + + + + + + + + + + + +
    filename
     Use the "Browse..." button to locate your file, + then click "Open".
      + +
    + +

    +

    Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-add.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-add.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-add.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,32 @@ +# mp3jukebox/www/admin/mp3-add.tcl + +ad_page_contract { + + This page serves as a UI to add an mp3 + + @author wirth@ybos.net + @creation-date 2000-03-08 + +} { + + +} -properties { + + page_title:onevalue + context_bar:onevalue + form_action:onevalue + hidden_vars:onevalue +} + +set title "Add an MP3" +set context_bar [list $title] +set page_title "Add an MP3" + +#requires admin permission as under /admin + +#set playlist_id here for double-click protection +set mp3_id [db_nextval acs_object_id_seq] +set form_action mp3-add-2 +set hidden_vars [export_form_vars mp3_id] + +ad_return_template \ No newline at end of file Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-delete-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-delete-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-delete-oracle.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,19 @@ + + + + oracle8.1.6 + + + + + begin + mp3.mark_as_deleted ( + mp3_id => :mp3_id + ); + end; + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-delete-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-delete-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-delete-postgresql.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,17 @@ + + + + postgresql7.1 + + + + + select mp3__mark_as_deleted ( + :mp3_id + ); + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-delete.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-delete.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-delete.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,27 @@ +#/mp3/admin/mp3-delete.tcl + +ad_page_contract { + + delete an mp3 + @author Elizabeth Wirth (wirth@ybos.net) + @creation-date 2001-03-05 + +} { + + mp3_id:naturalnum,notnull + +} +#requires admin permission as under /admin + +db_transaction { + db_exec_plsql delete_mp3 { + begin + mp3.mark_as_deleted ( + mp3_id => :mp3_id + ); + end; + } + +} + +ad_returnredirect "index" Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-edit-2.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-edit-2.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-edit-2.adp 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1 @@ + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-edit-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-edit-2.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-edit-2.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,83 @@ +# /packages/mp3jukebox/www/admin/mp3-edit-2.tcl + +ad_page_contract { + + This page edits an mp3 in the database + and redirects to admin/index.tcl + + @author wirth@ybos.net + @creation-date 2000-03-08 + +} { + mp3_id:naturalnum,notnull + file_path:notnull + title:notnull + artist + bitrate + album + genre + year + layer + {copyright_p ""} + tracknum + version + mode_num + {stereo_p ""} + frequency + minutes + seconds + comments + {vbr_p ""} + +} + +#requires admin permission as under /admin + +# take empty strings and make them null values before inserting them in db +set mp3_variables [list file_path title artist bitrate album genre year layer copyright_p tracknum version mode_num stereo_p frequency minutes seconds comments vbr_p] + +foreach var $mp3_variables { + + if { [empty_string_p [set $var]] } { + set var [db_nullify_empty_string [set $var]] + } +} + +if [catch { + db_dml mp3_edit "update mp3_mp3s +set + file_path = :file_path, + title = :title, + artist = :artist, + bitrate = :bitrate, + album = :album, + genre = :genre, + year = :year, + tracknum = :tracknum, + layer = :layer, + copyright_p = :copyright_p, + version = :version, + mode_num = :mode_num, + stereo_p = :stereo_p, + frequency = :frequency, + minutes = :minutes, + seconds = :seconds, + comments = :comments, + vbr_p = :vbr_p +where mp3_id = :mp3_id +" +} errmsg ] { + + set complaint " The database did not accept your input. + See details for the error message below\n\n\t

    $errmsg" + ad_return_error "Database Error" "$complaint" + return -code return + +} else { + + ad_returnredirect index + +} + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-edit-2.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-edit-2.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-edit-2.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,32 @@ + + + + + + update mp3_mp3s +set + file_path = :file_path, + title = :title, + artist = :artist, + bitrate = :bitrate, + album = :album, + genre = :genre, + year = :year, + tracknum = :tracknum, + layer = :layer, + copyright_p = :copyright_p, + version = :version, + mode_num = :mode_num, + stereo_p = :stereo_p, + frequency = :frequency, + minutes = :minutes, + seconds = :seconds, + comments = :comments, + vbr_p = :vbr_p +where mp3_id = :mp3_id + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-edit.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-edit.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-edit.adp 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,97 @@ + +@context_bar@ +@page_title@ +@title@ + +

    Use the following form to edit information for MP3: @escape_title@. +

    + +

    +@hidden_vars@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Title
    File Path
    Year
    Artist
    Comment
    Album
    Genre
    Bitrate
    Variable Bitrateyes  + no
    Layer
    Copyrightyes  + no
    Track Number
    Version
    Mode
    Stereoyes  + no
    Frequency
    MM
    SS
    + +
    + +

    +

    Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-edit.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-edit.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-edit.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,65 @@ +# mp3jukebox/www/admin/mp3-add.tcl + +ad_page_contract { + + This page serves as a UI to edit an mp3 + + @author wirth@ybos.net + @creation-date 2000-03-08 + +} { + + mp3_id:naturalnum,notnull + + +} -properties { + + page_title:onevalue + context_bar:onevalue + form_action:onevalue + hidden_vars:onevalue +} + +#requires admin permission as under /admin + +set title "Edit an MP3" + +set page_title "Edit an MP3:$title" +set context_bar [list $page_title] + +set form_action mp3-edit-2 +set hidden_vars [export_form_vars mp3_id] + +if {![db_0or1row mp3_information " + select * from mp3_mp3s where mp3_id=:mp3_id +"] } { + ad_return_error "Error" "There is no mp3 with id number $mp3_id. Please hit the back button on your browser and try again." + return -code return +} + +set page_title "Edit MP3:$title" +set context_bar [list $page_title] + +set variables_p [list copyright_p stereo_p vbr_p] +foreach variable $variables_p { + if { [set $variable] == "f"} { + set "${variable}_f" "checked" + set "${variable}_t" "" + } elseif { [set $variable] == "t"} { + set "${variable}_t" "checked" + set "${variable}_f" "" + } else { + set "${variable}_t" "" + set "${variable}_f" "" + } +} +set varchars [list file_path title artist bitrate album genre comments state] +foreach var $varchars { + set "escape_${var}" "[ad_quotehtml [set $var]]" + +} + +set page_title "Edit MP3:$escape_title" +set context_bar [list $page_title] + +ad_return_template \ No newline at end of file Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-edit.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-edit.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-edit.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,13 @@ + + + + + + + select * from mp3_mp3s where mp3_id=:mp3_id + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-mark-as-deleted-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-mark-as-deleted-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-mark-as-deleted-oracle.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,19 @@ + + + + oracle8.1.6 + + + + + begin + mp3_mp3s.mark_as_deleted ( + mp3_id => :mp3_id + ); + end; + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-mark-as-deleted-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-mark-as-deleted-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-mark-as-deleted-postgresql.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,17 @@ + + + + postgresql7.1 + + + + + select mp3_mp3s__mark_as_deleted ( + :mp3_id + ); + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-mark-as-deleted.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-mark-as-deleted.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/mp3-mark-as-deleted.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,29 @@ +#/mp3/admin/mp3-mark-as-deleted.tcl + +ad_page_contract { + + mark an mp3 as deleted but don't delete from database + @author Elizabeth Wirth (wirth@ybos.net) + @creation-date 2001-03-05 + +} { + + mp3_id:naturalnum,notnull + +} +set package_id [ad_conn package_id] + +#ad_require_permission... + +db_transaction { + db_exec_plsql mark_mp3_as_deleted { + begin + mp3_mp3s.mark_as_deleted ( + mp3_id => :mp3_id + ); + end; + } + +} + +ad_returnredirect "index" Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/one-playlist-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/one-playlist-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/one-playlist-oracle.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,19 @@ + + + + oracle8.1.6 + + + + + select name, remove_threshold, nvl(sc.songs,0) as songs, mp.playlist_id + from mp3_playlists mp, + mp3_playlist_song_count sc + where mp.playlist_id=:playlist_id + and sc.playlist_id(+) = mp.playlist_id + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/one-playlist.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/one-playlist.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/one-playlist.adp 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,71 @@ + +@context_bar@ +@page_title@ +@title@ + + +

    Information for playlist @name@ (edit)

    +Name: @name@ +
    +Score required to remove song: @remove_threshold@ + + +
    +listen to playlist +
    + +
    +MP3s associated with @name@: + +

    + There are no mp3s associated with this playlist. + + (insert mp3 here)

    + + + + + + + + + + + + + + + + + + + +
    ScoreTitle 
    + + + + @playlist_mp3s.total@ + + + + @playlist_mp3s.title@ + + + @playlist_mp3s.title@ + + + ( + remove + + | swap with next + + | listen +) +
    +
    +

    + Add an MP3 to this playlist: + + + +
    \ No newline at end of file Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/one-playlist.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/one-playlist.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/one-playlist.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,65 @@ +#mp3/www/admin/one-playlist.tcl +ad_page_contract { + + Lists properties of one playlist including related mp3s + + @author wirth@ybos.net + @creation-date 2000-03-02 + +} { + + playlist_id:naturalnum,notnull + new_mp3:optional + +} -properties { + + page_title:onevalue + context_bar:onevalue + name:onevalue + playlist_mp3s:multirow + playlist_info + remove_threshold + playlist_id:onevalue + shuffle_y_or_n + new_mp3:onevalue +} + +#requires admin permission as under /admin + +# @author jennie@ybos.net +db_1row playlist_info " + select name, remove_threshold, nvl(sc.songs,0) as songs, mp.playlist_id + from mp3_playlists mp, + mp3_playlist_song_count sc + where mp.playlist_id=:playlist_id + and sc.playlist_id(+) = mp.playlist_id +" + +set title "Playlist: $name" +set context_bar [list $title] +set page_title "Playlist: $name" + +set package_id [ad_conn package_id] +#ad_require_permission $package_id mp3_view_playlist + +db_multirow playlist_mp3s mp3_info " + select sort_key, + mp.title as title, map.mp3_id as mp3_id, total, + decode (sign ((total - :remove_threshold)),1,'t','f') as active_p + from mp3_mp3_playlist_map_view map, + mp3_mp3s_not_deleted mp + where playlist_id=:playlist_id + and map.mp3_id=mp.mp3_id + order by sort_key +" + +#remove_threshold is usually a negative number in the database - we make it +#positive here for user interface +set ui_remove_threshold [expr -1 * $remove_threshold] + +set highest_sortkey_in_list [db_string order_maxkey_get "select max(sort_key) + from mp3_mp3_playlist_map + where playlist_id=:playlist_id + "] + +ad_return_template \ No newline at end of file Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/one-playlist.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/one-playlist.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/one-playlist.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,43 @@ + + + + + + + select name, remove_threshold, coalesce(sc.songs,0) as songs, mp.playlist_id + from mp3_playlist_song_count sc + right join + mp3_playlists mp using (playlist_id) + where mp.playlist_id=:playlist_id + + + + + + + + + select sort_key, + mp.title as title, map.mp3_id as mp3_id, total, + case when sign (total - :remove_threshold) = 1 then 't' else 'f' end as active_p + from mp3_mp3_playlist_map_view map, + mp3_mp3s_not_deleted mp + where playlist_id=:playlist_id + and map.mp3_id=mp.mp3_id + order by sort_key + + + + + + + + select max(sort_key) + from mp3_mp3_playlist_map + where playlist_id=:playlist_id + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/order-choose.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/order-choose.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/order-choose.adp 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,22 @@ + +@context_bar@ +@page_title@ +@title@ + + +

    Place @mp3_title@ in playlist: @name@

    + +
    + + +
      + (insert at beginning)

      + +

    1. + @playlist_mp3s.title@ + ( + insert after + ) +
    2. + +
    Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/order-choose.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/order-choose.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/order-choose.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,45 @@ +# mp3/www/admin/file-search.tcl + +# Search to pick a file and give options for what to do + +ad_page_contract { + + @author wirth@ybos.net +} { + + playlist_id + new_mp3 + +} -properties { + + mp3s:multirow + playlist_id:onevalue + new_mp3:onevalue + name:onevalue +} + +set user_id [ad_verify_and_get_user_id] + +#requires admin permission as under /admin + +set title "Choose Order" +set context_bar [list $title] +set page_title "Order MP3 in Playlist" + +db_1row playlist_name "select name from mp3_playlists where playlist_id=$playlist_id" +set mp3_title [db_string mp3_name "select title from mp3_mp3s where mp3_id=:new_mp3"] + +db_multirow playlist_mp3s mp3_info " + select sort_key, + mp.title as title, map.mp3_id as mp3_id + from mp3_mp3_playlist_map map, + mp3_mp3s mp + where playlist_id=:playlist_id + and map.mp3_id=mp.mp3_id + order by sort_key +" {} if_no_rows { + ad_returnredirect playlist-item-add-2?playlist_id=$playlist_id&insert_after_id=-1&mp3_id=$new_mp3 + return -code return +} + +ad_return_template \ No newline at end of file Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/order-choose.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/order-choose.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/order-choose.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,33 @@ + + + + + + select name from mp3_playlists where playlist_id=$playlist_id + + + + + + + select title from mp3_mp3s where mp3_id=:new_mp3 + + + + + + + + select sort_key, + mp.title as title, map.mp3_id as mp3_id + from mp3_mp3_playlist_map map, + mp3_mp3s mp + where playlist_id=:playlist_id + and map.mp3_id=mp.mp3_id + order by sort_key + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-create-2-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-create-2-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-create-2-oracle.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,25 @@ + + + + oracle8.1.6 + + + + + begin + :1 := mp3_playlist.new( + playlist_id => :playlist_id, + name => :playlist_name, + remove_threshold => :neg_remove_threshold, + creation_ip => :creation_ip, + creation_user => :creation_user, + creation_date => sysdate, + context_id => :package_id +); +end; + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-create-2-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-create-2-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-create-2-postgresql.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,25 @@ + + + + postgresql7.1 + + + + + select mp3_playlist__new( + :playlist_id, -- playlist_id + :playlist_name, -- name + 'f', -- shuffle_p + :neg_remove_threshold, -- remove_threshold + 'mp3_playlist', -- object_type + current_timestamp, -- creation_date + :creation_user, -- creation_user + :creation_ip, -- creation_ip + :package_id -- context_id + ); + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-create-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-create-2.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-create-2.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,62 @@ +# /packages/mp3jukebox/www/admin/playlist-create-2.tcl + +ad_page_contract { + + This page adds a playlist to the database + and redirects to index.tcl + + @author wirth@ybos.net + @creation-date 2000-03-02 + +} { + playlist_name:notnull + remove_threshold:integer,notnull + playlist_id +} + +#requires admin permission as under /admin + +set package_id [ad_conn package_id] + +set creation_ip [ad_conn "peeraddr"] +set creation_user [ad_conn "user_id"] + +#remove_threshold expects a negative number for vote threshold, but the user +#will expect to type in a positive number. So we change it to negative behind +#the scenes for them. If they type in a negative number or zero, we input the number as is. + +if {$remove_threshold > 0} { + set neg_remove_threshold [expr $remove_threshold * -1] +} else { + set neg_remove_threshold $remove_threshold +} + +if [catch { + db_exec_plsql create_playlist " + begin + :1 := mp3_playlist.new( + playlist_id => :playlist_id, + name => :playlist_name, + remove_threshold => :neg_remove_threshold, + creation_ip => :creation_ip, + creation_user => :creation_user, + creation_date => sysdate, + context_id => :package_id +); +end; +" +} errmsg ] { + + set complaint " The database did not accept your input. + See details for the error message below\n\n\t

    $errmsg" + ad_return_error "Database Error" "$complaint" + return -code return + +} else { + + ad_returnredirect one-playlist?playlist_id=$playlist_id + +} + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-create.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-create.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-create.adp 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,36 @@ + +@context_bar@ +@page_title@ +@title@ + + +

    Use the following form to create a new playlist. +

    + +

    +@hidden_vars@ + + + + + + + + + + + + + + + + + + +
    Title
    Net votes required to remove mp3 from playlist
    + +
    + +

    +

    + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-create.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-create.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-create.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,32 @@ +# /packages/mp3jukebox/www/admin/playlist-create.tcl + +ad_page_contract { + + This page serves as a UI to add a playlist + + @author wirth@ybos.net + @creation-date 2000-03-02 + +} { + + +} -properties { + + page_title:onevalue + context_bar:onevalue + form_action:onevalue + hidden_vars:onevalue +} + +set title "Create a Playlist" +set context_bar [list $title] +set page_title "Create a Playlist" + +#requires admin permission as under /admin + +#set playlist_id here for double-click protection +set playlist_id [db_nextval acs_object_id_seq] +set form_action playlist-create-2 +set hidden_vars [export_form_vars playlist_id] + +ad_return_template \ No newline at end of file Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-delete-2-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-delete-2-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-delete-2-oracle.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,19 @@ + + + + oracle8.1.6 + + + + + begin + mp3_playlist.delete ( + playlist_id => :playlist_id + ); + end; + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-delete-2-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-delete-2-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-delete-2-postgresql.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,17 @@ + + + + postgresql7.1 + + + + + select mp3_playlist__delete ( + :playlist_id + ); + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-delete-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-delete-2.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-delete-2.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,27 @@ +#/mp3/admin/playlist-delete-2.tcl + +ad_page_contract { + + delete a playlist + @author Elizabeth Wirth (wirth@ybos.net) + @creation-date 2001-03-05 + +} { + + playlist_id:naturalnum,notnull + +} +#requires admin permission as under /admin + +db_transaction { + db_exec_plsql delete_playlist { + begin + mp3_playlist.delete ( + playlist_id => :playlist_id + ); + end; + } + +} + +ad_returnredirect "index" Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-delete.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-delete.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-delete.adp 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,12 @@ + +@context_bar@ +@page_title@ +@title@ + + +

    +You are about to delete the playlist @playlist_name@. Are you sure you want to proceed? +

    + +Delete + | Back to Playlist \ No newline at end of file Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-delete.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-delete.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-delete.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,32 @@ +# /packages/mp3jukebox/www/admin/playlist-delete.tcl + +ad_page_contract { + + This page serves as a warning before deleting a playlist + + @author wirth@ybos.net + @creation-date 2000-03-02 + +} { + playlist_id:naturalnum,notnull + +} -properties { + + page_title:onevalue + context_bar:onevalue + playlist_id:onevalue + playlist_name:onevalue +} + +set title "Delete a Playlist" +set context_bar [list $title] +set page_title "Delete a Playlist" + +#requires admin permission as under /admin + +#set playlist_id here for double-click protection + +set playlist_name "[db_1row playlist_info "select name from mp3_playlists where playlist_id=:playlist_id" ]" + + +ad_return_template \ No newline at end of file Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-delete.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-delete.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-delete.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,11 @@ + + + + + + select name from mp3_playlists where playlist_id=:playlist_id + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-edit-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-edit-2.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-edit-2.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,66 @@ +# /packages/mp3jukebox/www/admin/playlist-edit-2.tcl + +ad_page_contract { + + This page edits a playlist + + @author wirth@ybos.net + @creation-date 2000-03-02 + +} { + + playlist_id:naturalnum,notnull + remove_threshold:integer,notnull + playlist_name + +} -properties { + + page_title:onevalue + context_bar:onevalue + form_action:onevalue + hidden_vars:onevalue + name + remove_threshold:onevalue +} + +set title "Edit a Playlist" +set context_bar [list $title] +set page_title "Edit a Playlist" + +#requires admin permission as under /admin + +set creation_ip [ad_conn "peeraddr"] +set creation_user [ad_conn "user_id"] + +#remove_threshold expects a negative number for vote threshold, but the user +#will expect to type in a positive number. So we change it to negative behind +#the scenes for them. If they type in a negative number or zero, we input the number as is. + +if {$remove_threshold > 0} { + set neg_remove_threshold [expr $remove_threshold * -1] +} else { + set neg_remove_threshold $remove_threshold +} + +if [catch { + db_dml update_playlist " + update mp3_playlists set + name=:playlist_name, + remove_threshold=:neg_remove_threshold + where playlist_id=:playlist_id +" +} errmsg ] { + + set complaint " The database did not accept your input. + See details for the error message below\n\n\t

    $errmsg" + ad_return_error "Database Error" "$complaint" + return -code return + + } else { + + ad_returnredirect one-playlist?playlist_id=$playlist_id + + } + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-edit-2.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-edit-2.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-edit-2.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,16 @@ + + + + + + + update mp3_playlists set + name=:playlist_name, + remove_threshold=:neg_remove_threshold + where playlist_id=:playlist_id + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-edit.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-edit.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-edit.adp 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,34 @@ + +@context_bar@ +@page_title@ +@title@ + + +

    Edit playlist: @escape_name@ +

    + +
    +@hidden_vars@ + + + + + + + + + + + + + + + + +
    Title
    Net votes required to remove mp3 from playlist
    + +
    + +

    +

    + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-edit.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-edit.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-edit.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,52 @@ +# /packages/mp3jukebox/www/admin/playlist-create.tcl + +ad_page_contract { + + This page serves a UI to edit a playlist + + @author wirth@ybos.net + @creation-date 2000-03-02 + +} { + + playlist_id:naturalnum,notnull + +} -properties { + + page_title:onevalue + context_bar:onevalue + form_action:onevalue + hidden_vars:onevalue + name + remove_threshold:onevalue + f_checked:onevalue + t_checked:onevalue + escape_name:onevalue +} + +set title "Edit a Playlist" +set context_bar [list $title] +set page_title "Edit a Playlist" + +#requires admin permission as under /admin + +set form_action playlist-edit-2 +set hidden_vars [export_form_vars playlist_id] + +if {![db_0or1row playlist_info " + select name, remove_threshold + from mp3_playlists + where playlist_id=:playlist_id +"]} { + + ad_return_error "There is no playlist with the id @playlist_id@. Please use the back button on your browser and try again." + return -code return + +} + +set ui_remove_threshold [expr -1 * $remove_threshold] + +set escape_name [ad_quotehtml $name] + +ad_return_template + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-edit.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-edit.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-edit.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,15 @@ + + + + + + + select name, remove_threshold + from mp3_playlists + where playlist_id=:playlist_id + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-add-2-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-add-2-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-add-2-oracle.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,21 @@ + + + + oracle8.1.6 + + + + + begin + mp3_playlist.item_add ( + mp3_id => :mp3_id, + playlist_id => :playlist_id, + sort_key => :insert_after_sort_key + ); + end; + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-add-2-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-add-2-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-add-2-postgresql.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,19 @@ + + + + postgresql7.1 + + + + + select mp3_playlist__item_add ( + :mp3_id, -- mp3_id + :playlist_id, -- playlist_id + :insert_after_sort_key -- sort_key + ); + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-add-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-add-2.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-add-2.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,54 @@ +#mp3/www/admin/playlist-item-add-2.tcl + +ad_page_contract { + + Adds an item (e.g. an mp3) to a playlist + + @author Elizabeth Wirth (wirth@ybos.net) + @creation-date 2001-03-05 +} { + + mp3_id:naturalnum,notnull + playlist_id:naturalnum,notnull + insert_after_id:integer,notnull +} + +#requires admin permission as under /admin + + +#Always insert after another item, and pass the sort_key of that item in +#as insert_after_sort_key. +#If there are no items (insert_after_id was passed as -1), pass 0 in as sort_key. + +if {$insert_after_id != -1 } { + + set insert_after_sort_key [db_string sort_key "select sort_key from mp3_mp3_playlist_map + where mp3_id=:insert_after_id + and playlist_id=:playlist_id"] +} else { + + set insert_after_sort_key 0 + +} + +if [catch { + db_exec_plsql add_item " + begin + mp3_playlist.item_add ( + mp3_id => :mp3_id, + playlist_id => :playlist_id, + sort_key => :insert_after_sort_key + ); + end; +" + } errmsg ] { + + set complaint " The database did not accept your input. + See details for the error message below\n\n\t

    $errmsg" + ad_return_error "Database Error" "$complaint" + return -code return + +} else { + + ad_returnredirect one-playlist?playlist_id=$playlist_id +} Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-add-2.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-add-2.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-add-2.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,13 @@ + + + + + + select sort_key from mp3_mp3_playlist_map + where mp3_id=:insert_after_id + and playlist_id=:playlist_id + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-add.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-add.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-add.adp 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,8 @@ + +@context_bar@ +@page_title@ +@title@ + + +

    +Need to set up a form here to choose mp3 from... where? I think the secrets here lie with Peter... \ No newline at end of file Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-add.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-add.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-add.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,30 @@ +#mp3/www/admin/playlist-item-add.tcl +ad_page_contract { + + UI to add an mp3 to a playlist + + @author wirth@ybos.net + @creation-date 2000-03-02 + +} { + playlist_id:naturalnum,notnull + insert_after_id:integer,optional + +} -properties { + + page_title:onevalue + context_bar:onevalue + playlist_id:onevalue + name:onevalue +} + + +#requires admin permission as under /admin + +db_1row playlist_name "select name from mp3_playlists where playlist_id=:playlist_id" + +set title "Add item to playlist $name" +set context_bar [list $title] +set page_title "Add item to playlist $name" + +set hidden_vars [export_form_vars insert_after_id, playlist_id] \ No newline at end of file Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-add.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-add.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-add.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,11 @@ + + + + + + select name from mp3_playlists where playlist_id=:playlist_id + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-remove-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-remove-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-remove-oracle.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,20 @@ + + + + oracle8.1.6 + + + + + begin + mp3_playlist.item_remove ( + mp3_id => :mp3_id, + playlist_id => :playlist_id + ); + end; + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-remove-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-remove-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-remove-postgresql.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,18 @@ + + + + postgresql7.1 + + + + + select mp3_playlist__item_remove ( + :mp3_id, + :playlist_id + ); + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-remove.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-remove.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/playlist-item-remove.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,37 @@ +#mp3/www/admin/playlist-item-remove.tcl + +ad_page_contract { + + Removes an item (e.g. an mp3) from a playlist + + @author Elizabeth Wirth (wirth@ybos.net) + @creation-date 2001-03-05 +} { + + mp3_id:naturalnum,optional + playlist_id:naturalnum,notnull +} + +#requires admin permission as under /admin + +if [catch { + db_exec_plsql remove_item " + begin + mp3_playlist.item_remove ( + mp3_id => :mp3_id, + playlist_id => :playlist_id + ); + end; + " +} errmsg ] { + + set complaint " The database did not accept your input. + See details for the error message below\n\n\t

    $errmsg" + ad_return_error "Database Error" "$complaint" + return -code return + +} else { + + ad_returnredirect one-playlist?[export_url_vars playlist_id] + +} \ No newline at end of file Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/scanner-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/scanner-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/scanner-oracle.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,44 @@ + + + oracle8.1.6 + + + + +update acs_objects +set creation_user = :creation_user, + creation_ip = :creation_ip, + creation_date = sysdate, + context_id = :package_id +where object_id = :mp3_id + + + + + + + +begin + :1 := mp3.new( + file_path => :client_filename, + $extra_vars + creation_user => :creation_user, + creation_ip => :creation_ip, + creation_date => sysdate, + context_id => :package_id + ); +end; + + + + + + + + + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/scanner-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/scanner-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/scanner-postgresql.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,41 @@ + + + postgresql7.1 + + + + + select mp3__new( + :mp3_id, + :client_filename, + :mp3_title + + ); + + + + + + + +update mp3_mp3s +set artist = :artist, + bitrate = :bitrate, + album = :album, + tracknum = :tracknum, + genre = :genre, + year = :year, + layer = :layer, + copyright_p = :copyright_p, + version = :version, + mode_num = :mode_num, + stereo_p = :stereo_p, + frequency = :frequency, + minutes = :minutes +where mp3_id = :mp3_id + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/scanner.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/scanner.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/scanner.adp 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,9 @@ + +@context_bar@ +@page_title@ +@title@ + + +

    Scanning MP3StagingLocation: @staging_location@

    + +@page_html@ \ No newline at end of file Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/scanner.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/scanner.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/scanner.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,196 @@ +ad_page_contract { + Scan the MP3StagingLocation directory for new files +} { +} + +set user_id [ad_verify_and_get_user_id] +set package_id [ad_conn package_id] +set creation_ip [ad_conn "peeraddr"] +set creation_user [ad_conn "user_id"] + +set file_list [get_list_of_mp3s] + + +foreach file_name $file_list { + if {![regexp {(([^/]*)\.[mM][Pp]3)$} $file_name match client_filename mp3_name] } { + append page_html "Broke on $file_name
    \n" + continue + } + + if [db_0or1row check_file_name " + select deleted_p + from mp3_mp3s + where file_path = :client_filename"] { + + if { $deleted_p == "f" } { + append page_html "$file_name is already in the db. Continuing.
    \n" + continue + } else { + set update_entry_p 1 + } + } else { + set update_entry_p 0 + } +# if {[db_string mp3_exists "select count(*) from mp3_mp3s where file_path = :client_filename"] != 0} { +# append page_html "$file_name is already in the db. Continuing.
    " +# continue +# } + + set target_filename "[ad_parameter MP3FileLocation]/$client_filename" + file copy -force $file_name $target_filename + +set mp3_info_list [exec "[acs_root_dir]/packages/mp3-jukebox/bin/mp3_file_scan" $target_filename] +# Workaround due to plpgsql (as of PG 7.1.3) being unable to handle +# default values in functions): +# The number of items in "mp3_info_list" may vary so we initialize +# all the possible vars to "nullvalue" in advance to know they're always +# being set. + +set nullvalue [db_null] + +set mp3_title $nullvalue +set artist $nullvalue +set bitrate $nullvalue +set album $nullvalue +set tracknum $nullvalue +set genre $nullvalue +set year $nullvalue +set layer $nullvalue +set copyright_p $nullvalue +set version $nullvalue +set mode_num $nullvalue +set stereo_p $nullvalue +set frequency $nullvalue +set minutes $nullvalue +set seconds $nullvalue +set comments $nullvalue +set vbr_p $nullvalue +set state $nullvalue + +foreach info_item $mp3_info_list { + set info_key [string tolower [lindex $info_item 0]] + set info_val [lindex $info_item 1] + switch -exact $info_key { + title { + set mp3_title [db_nullify_empty_string $info_val] + # title is included in the standard sql, so no need to add to info_pairs + } + mm { + set minutes [db_nullify_empty_string $info_val] + set info_pairs(minutes) ":minutes" + } + ss { + set seconds [db_nullify_empty_string $info_val] + set info_pairs(seconds) ":seconds" + } + comment { + set comments [db_nullify_empty_string $info_val] + set info_pairs(comments) ":comments" + } + mode { + set mode_num [db_nullify_empty_string [expr int($info_val)]] + set info_pairs(mode_num) ":mode_num" + } + copyright - + vbr - + stereo { + set "${info_key}_p" [db_nullify_empty_string \ + [ad_decode $info_val 1 "t" 0 "f" ""]] + set "info_pairs(${info_key}_p)" ":${info_key}_p" + } + tracknum { + set tracknum [lindex [split $info_val /] 0] + set info_pairs(tracknum) ":tracknum" + } + layer - + version { + set $info_key [db_nullify_empty_string [expr int($info_val)]] + set info_pairs($info_key) ":$info_key" + } + default { + set $info_key [db_nullify_empty_string $info_val] + set info_pairs($info_key) ":$info_key" + } + } +} + + # Is there a title defined? + if { ![llength [array get info_pairs title]] } { + set info_pairs(title) ":mp3_name" + } + + + if $update_entry_p { + + set mp3_id [db_string get_mp3_id " +select mp3_id +from mp3_mp3s +where file_path = :client_filename"] + + set extra_vars "" + foreach i_key [array names info_pairs] { + append extra_vars ",\n $i_key = $info_pairs($i_key)" + } + + if [catch { + db_transaction { + db_dml undelete_mp3 " +update mp3_mp3s +set deleted_p = 'f' +$extra_vars +where mp3_id = :mp3_id +" + db_dml fix_creation " +update acs_objects +set creation_user = :creation_user, + creation_ip = :creation_ip, + creation_date = sysdate, + context_id = :package_id +where object_id = :mp3_id +" + } + } errmsg ] { + + set complaint " The database did not accept your input. + See details for the error message below\n\n\t

    $errmsg" + ad_return_error "Database Error" "$complaint" + return -code return + + } + + } else { + + set extra_vars "" + foreach i_key [array names info_pairs] { + append extra_vars "\n $i_key => $info_pairs($i_key)," + } + + set mp3_id [db_null] + + if [catch { + db_transaction { + set mp3_id [db_exec_plsql add_mp3 ""] + db_dml update_mp3_info "" + } + } errmsg ] { + + + set complaint " The database did not accept your input. + See details for the error message below\n\n\t

    $errmsg" + ad_return_error "Database Error" "$complaint" + return -code return + } + } + + unset info_pairs + + append page_html "

    Completed $file_name.

    \n" + +} + +# Stuck all this here so that title wouldn't collide in the namespace + +set staging_location [ad_parameter MP3StagingLocation] +set page_title "Scanning MP3 Staging Location" +set title $page_title +set context_bar [list $title] Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/scanner.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/scanner.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/scanner.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,64 @@ + + + + + + + select deleted_p + from mp3_mp3s + where file_path = :client_filename + + + + + + + +select mp3_id +from mp3_mp3s +where file_path = :client_filename + + + + + + + +update mp3_mp3s +set file_path = :client_filename, + title = :mp3_title, + artist = :artist, + bitrate = :bitrate, + album = :album, + tracknum = :tracknum, + genre = :genre, + year = :year, + layer = :layer, + copyright_p = :copyright_p, + version = :version, + mode_num = :mode_num, + stereo_p = :stereo_p, + frequency = :frequency, + minutes = :minutes, + deleted_p = 'f' +where mp3_id = :mp3_id + + + + + + + + +update acs_objects +set creation_user = :creation_user, + creation_ip = :creation_ip, + creation_date = current_timestamp, + context_id = :package_id +where object_id = :mp3_id + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/swap-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/swap-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/swap-oracle.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,20 @@ + + + + oracle8.1.6 + + + + + begin + mp3_playlist.item_order_swap ( + playlist_id => :playlist_id, + sort_key => :sort_key + ); + end; + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/swap-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/swap-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/swap-postgresql.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,18 @@ + + + + postgresql7.1 + + + + + select mp3_playlist__item_order_swap ( + :playlist_id, + :sort_key + ); + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/swap.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/swap.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/swap.tcl 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,43 @@ +# /packages/mp3jukebox/www/admin/swap.tcl +ad_page_contract { + + Swaps current item with next item + + @author wirth@ybos.net + @creation-date 2000-03-02 + + @param mp3_id (the id of the mp3 to be swapped with the next in order) + @param playlist_id + +} { + mp3_id:naturalnum,notnull + playlist_id:naturalnum,notnull +} + +set package_id [ad_conn package_id] +#ad_require_permission $package_id mp3_modify_playlist + +db_1row get_sort_key "select sort_key from mp3_mp3_playlist_map +where playlist_id=:playlist_id and mp3_id=:mp3_id" + +if [catch { + db_exec_plsql swap_item " + begin + mp3_playlist.item_order_swap ( + playlist_id => :playlist_id, + sort_key => :sort_key + ); + end; + " +} errmsg ] { + + set complaint " The database did not accept your input. + See details for the error message below\n\n\t

    $errmsg" + ad_return_error "Database Error" "$complaint" + return -code return + +} else { + + ad_returnredirect one-playlist?[export_url_vars playlist_id] + +} \ No newline at end of file Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/swap.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/swap.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/admin/swap.xql 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,12 @@ + + + + + + select sort_key from mp3_mp3_playlist_map +where playlist_id=:playlist_id and mp3_id=:mp3_id + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/doc/design.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/doc/design.html,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/doc/design.html 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,173 @@ + + + MP3 Design Document + + + +

    MP3Jukebox Design Document

    +by Jennie Kim Housman some text by Peter Vessenes +
    +MP3 Jukebox : Design Document +

    I. Essentials

    + + + +

    II. Introduction

    +This document outlines the design and use of the Ybos MP3Jukebox application, built on the ACS 4.1 platform. + +

    III. Historical Considerations

    +Small Office Pic +We like MP3s. We work together. Also, once we were in a tiny little +office, with only like 300 square feet, and we all worked at one big +table. Really! One corner of the office looked like the picture on the +right. This meant we could listen to the same stereo, (especially Abba) +without serious problems.

    +Now, we work in a large office, with multiple bays, and better lighting. +We can't listen to the same songs all the time. People like me (Peter) +get blasted out by the Abba, when it's loud enough for other people to hear. +And, my enthusiasm for Abba is fading after a few years of Dancing Queen. +

    +Now, we can each, as groups, create shared playlists, and download them +to stereos in our bays. This keeps us from being a group of people with +headphones on that never talk, and it also makes me less annoyed with +the office. + +

    IV. Competitive Analysis

    +Combine the cost of Oracle, a server, and a network topology that +doesn't mind sending out MP3s without streaming, plus ACS installation, +and you've got yourself at least 1,000 or so CDs plus 5 CD changers to +hold them. +

    +On the other hand, you can't vote on the web with your CD changers. +

    +I'd call us neck and neck with the competition. + +

    V. Design

    + +The system allows +
      +
    • Voting +
    • Playlist Creation +
    • Downloading +
    +It fits our rationality test for community applications -- you can annoy +other people with it. (If you can't annoy someone, it's not a community +application.) +

    +We don't +

      +
    • Stream +
    • keep tight controls on the MP3 files (no BFILE columns) +
    + +

    VI. API

    +Much of the API is covered in the mp3-create.sql file. The mp3 package body and the mp3_playlist package body holds all of the PL/SQL functions and procedures. +
      +
    • mp3.new: creates a mp3jukebox mp3 item +
    • mp3.delete: deletes a mp3jukebox mp3 item +
    • mp3.mark_as_deleted: marks a mp3jukebox mp3 item, without removing it from the file system +
    • mp3_playlist.new: creates a mp3jukebox playlist item +
    • mp3_playlist.delete: deletes a mp3jukebox playlist item +
    • mp3_playlist.item_add: adds a mp3jukebox mp3 item to a playlist +
    • mp3_playlist.item_remove: removes a mp3jukebox mp3 item from a playlist +
    • mp3_playlist.vote_cast: adds a vote for or against an mp3jukebox mp3 item on a playlist +
    • mp3_playlist.item_order_swap: swap the order of a mp3 on a playlist with one listed after it +
    • +
    +

    +The TCL procedures are in the /tcl/mp3-procs.tcl, /tcl/scanner-procs.tcl files. +

      +
    • mp3_search_select_sql: returns sql to perform file search according passed parameters +
    • get_list_of_mp3s: returns the list of mp3 from the approriate mp3 file location +
    • mp3_name_from_file: returns the mp3 name from the file name +
    • +
    + + +

    VII. Data Model Discussion

    +The MP3Jukebox package makes use of the ACS objects system. The creation of an mp3 item adds a row in the mp3_mp3s table as well as the acs_objects table, where the usual meta-information about this object is stored. This is also true for creation of a playlist item (that adds a row to the mp3_playlists table). +

    +Currently, only the playlists are distinguished according to the different mount instances of the mp3jukebox. This functionality is available for mp3s, however, was not utilized in this version of the application. + +

    VIII. User Interface

    +How to use it +
      +
    • Create a playlist +
    • Add some MP3s to the playlist +
    • Click the headphones +
    • Enjoy! +
    + +Clicking the headphones when they refer to a playlist will download +an m3u file. Both xmms and winamp should be able to recognize this. +You'll need to set up Netscape to deal with the .m3u files correctly; +check out www.xmms.org for more information. + +

    + +Clicking the headphones when they refer to an MP3 will download the MP3 +directly from AOLServer. We don't, for instance, stream. +

    + +The publicly accessible pages are in the root directory of the mounted instance. The administrative pages are under the root directory of the mounted instance (/root directory/admin). You must be granted admin on the node to have access to the admin pages. +

    +The public is allowed to view and download available playlists for each mount instance (playlists are mount-specific). The public is also allowed to vote for currently available mp3s on a playlist. Their votes only affect whether an mp3 is included when a playlist is played. Only administrators can remove an mp3 from a playlist. An mp3 is no longer included when a playlist is served, when the total of the votes submitted is less than or equal to the vote total (to remove an mp3), which is set by a site-wide administrator. +

    +Site-wide administrators may create and delete playlists, add and remove mp3s from playlists, choose the vote total, and add and mark_as_deleted mp3s. +Please note that currently, administrators only mark an mp3 as deleted, i.e. an mp3 is not deleted from the mp3_mp3s table, the acs_objects table, or the file system. (The PL/SQL procedure for that is avavilable +but just not used.) + + +

    IX. Configuration/Parameters

    +This package was built on the ACS 4.1 platform. +
    +During installation of a package instance, an administrator needs to set up two parameters: +
      +
    • 'MP3FileLocation,' the location of the MP3 Files on your server +
    • 'MP3StagingLocation', an open directory where MP3s will be placed before they are moved to the MP3FileLocation by the scanner. + +
    +The general concept is that the MP3StagingLocation should be world writable. +People will dump MP3s into that directory, via whatever means available. +As the scanner is run, the files will be picked up, inserted into the +database, and moved over to the MP3FileLocation. +

    +We use an ID3 scanner written in Perl to check the information in the +MP3s. If none is returned, we just insert based on the title. +

    X. Acceptance Tests

    + + +

    XI. Future Improvements/Areas of Likely Change

    +
      +
    • More highly refined permissioning system +
    • Playlist administrators and mp3 administrators? +
    • feature allowing users to "suggest" an mp3, that maybe voted into a playlist +
    • One user / one vote.. +
    • MP3s, like playlists, context-dependent (we're not sure on this one.) +
    • +
    + + +

    XII. Authors

    +Of the software +
      +
    • Titi Ala'ilima +
    • Jennie Kim Housman +
    • Peter J. Vessenes +
    • Elizabeth Wirth +
    +

    XIII. Revision History

    + + + + + + + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/doc/index.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/doc/index.html,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/doc/index.html 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,45 @@ + + +MP3-Jukebox + + + + +

    MP3-Jukebox

    +by Jennie Kim Housman +
    + +

    Document Overview

    + + +Requirements +
    +Design + +

    Release Notes

    +

    +The current release version is 1.0. + +

    Permissions

    +Currently, site-wide administrators are given full permission for any function in the mp3-jukebox package. Users may view, vote, and download available playlists of mp3s. Only site-wide administrators can manipulate playlists and mp3s. + +

    Installation Guide

    +After downloading this package and mounting it on the site-map, the administrator needs to do a few things before the package will work: + +
      +
    1. Create a staging directory for your MP3s. This directory should be world writeable. Users will place MP3s here to be scanned. We usually call it '/var/shared/mp3s'. +
    2. Create a final destination for your MP3s. Only nsadmin needs to be able to read / write here. This creates a semi-clean directory where the MP3s are kept, separate from the craziness of a world writeable directory. We usually place it in the servers hierarchy, but NOT in the package's directory. Currently, our final destination directory is '/web/servername/mp3_files'. +
    3. Edit the parameters for your application, and set 'MP3StagingLocation' to your staging directory's location. +
    4. Change MP3FileLocation to the final destination directory. +
    5. Place some MP3s in the staging directory. +
    6. Run the scanner from the admin directory. +
    7. Enjoy! + + + +
      +
      +Jennie Housman +
      + + Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/doc/requirements.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/doc/requirements.html,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/doc/requirements.html 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,69 @@ + + + + MP3 Jukebox Package Requirements + + + + +

      MP3 Jukebox Package Requirements

      +by Elizabeth Wirth +
      +MP3 JukeBox : Requirements +

      I. Introduction

      +This document outlines the requirements for the Ybos MP3 Jukebox application built on the ACS 4.1 platform. + +

      II. Vision Statement

      +MP3 Jukebox was written to allow a community to share common playlists of MP3s, with community members able to vote to keep or remove songs from playlists. + + + +

      III. System/Application Overview

      + +

      IV. Use-cases and User-scenarios

      +The different classes of users are administrators and readers. Administrative power is currently based on site-wide administrative power. Typical user scenarios include: +
        +
      • Community members use the MP3 Jukebox to listen to a playlist or vote songs on or off of an existing playlist
      • +
      • Administrators create the playlists and add MP3s to playlists. Administrators also decide the threshold at which an MP3 is voted out of the playlist by the community.
      • +
      +For example, an administrator decides that her office needs a "Cool Office Songs" playlist. She downloads MP3s into the MP3 staging location as defined by the "MP3StagingLocation" parameter. She then scans the staging directory for new MP3s, using the link on the admin/index page. She creates a new playlist and names it "Cool Office Songs," deciding that 10 net votes against a song will remove it from the playlist. She then searches for the MP3s she wishes to add to the playlist using the search function on the one-playlist page. After choosing each song, she decides what order that song will appear on the list. When she is done, she clicks "listen to playlist" and enjoys the tunes.

      +A co-worker also enjoys the "Cool Office Songs" playlist but cannot stand "Dancing Queen" by ABBA, one of the songs on the playlist. He votes against the song and encourages 9 other officemates to do so. The song reaches its threshold at 10 net votes against, and no longer is included in the playlist. + +

      V. Related Links

      + +

      VI. Requirements

      + +

      VI.1 Data Model

      +

      10.30. Privilege +
      10.30.10 The only available privileges are admin and non-admin privileges, which currently correspond to site-wide privileges. A party can be granted "admin" permission on MP3 Jukebox. + +

      10.40 Parameters +
      10.40.10 Provide a parameter 'MP3FileLocation,' an abolute path +which indicates the location of the MP3 Files on your server. +
      10.40.20 Provide a 'MP3StagingLocation' parameter which indicates the +Open Directory where MP3s will be placed before they are moved to the MP3FileLocation by the scanner. + + +

      VI.2 General User Interface

      +

      20.10 Provide a list of available playlists with a link to listen to the playlist if it contains MP3s +
      20.20 Provide a one-item view of each playlist, including the current score of each MP3 within the playlist and links to vote for or against the song in the playlist. + +

      VI.3 Registered User Interface

      +

      30.10 Same requirements as under 20.x. + +

      VI.4 Administrator Interface

      +

      40.10 Same as under 20.x, except that voting si only available on the non-administration pages. +
      40.20 Provide links to recently uploaded MP3s +
      40.30 Provide links to add or delete MP3s or Playlists +
      40.40 On one-playlist page, provide links to change the order of MP3s within a playlist or to forcibly remove an MP3 from a playlist (as opposed to voting for its removal). +
      40.50 Provide a link to scan the staging location (see parameters) for new MP3s. + +

      VI.5 Template Administration

      + +

      VI.6 Additional Requirements

      + +
      + +
      + + \ No newline at end of file Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/doc/ybos-sad-2.jpg =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/doc/ybos-sad-2.jpg,v diff -u Binary files differ Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/doc/ybos_office_80_60.jpg =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/doc/ybos_office_80_60.jpg,v diff -u Binary files differ Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/images/delete.gif =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/images/delete.gif,v diff -u Binary files differ Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/images/frowney_face.gif =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/images/frowney_face.gif,v diff -u Binary files differ Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/images/headphones-16.gif =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/images/headphones-16.gif,v diff -u Binary files differ Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/images/smiley_face.gif =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/images/smiley_face.gif,v diff -u Binary files differ Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/m3u/index.vuh =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/m3u/index.vuh,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/m3u/index.vuh 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,24 @@ +# This file will process all m3u requests + + +set path_info [ad_conn path_info] + +# assume we get playlistid/playlist_name.m3u as the path + +set playlist_id [lindex [split $path_info /] 0] + +db_1row playlist_threshold "select remove_threshold from mp3_playlists where playlist_id=:playlist_id" + +db_foreach mp3_list "select m.mp3_id, s.title, m.total from mp3_mp3_playlist_map_view m, mp3_mp3s_not_deleted s + where m.playlist_id = :playlist_id + and s.mp3_id = m.mp3_id + and m.total > :remove_threshold + order by m.sort_key + + " { + append page_text "http://jk30.ybos.net/mp3/mp3s/$mp3_id/$title.mp3\n" + } if_no_rows { + set page_text "" + } + +ns_return 200 audio/x-mpegurl $page_text Index: openacs-4/contrib/obsolete-packages/mp3-jukebox/www/mp3s/index.vuh =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/mp3-jukebox/www/mp3s/index.vuh,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/mp3-jukebox/www/mp3s/index.vuh 17 Oct 2001 19:44:08 -0000 1.1 @@ -0,0 +1,14 @@ +# This file will process all mp3 requests + +set path_info [ad_conn path_info] + +# assume we get mp3id/mp3title.mp3 as the path + +set mp3_id [lindex [split $path_info /] 0] + +set file_path "[ad_parameter MP3FileLocation]/[db_string get_file_location " + select file_path from mp3_mp3s where mp3_id = :mp3_id +"]" + + +ns_returnfile 200 audio/mpeg $file_path