Jukebox/w3tpl: Difference between revisions

From HypertWiki
m Protected "Jukebox": to enable SQL functions [edit=sysop:move=sysop]
updated script to work (at least somewhat) with latest w3tpl syntax
 
(13 intermediate revisions by the same user not shown)
Line 1: Line 1:
=The Hypertwin Jukebox=
=The Hypertwin Jukebox Prototype=
''is under construction, but here are all the artists''
This was a prototype written in [[htyp:W3TPL|W3TPL]]; it allowed us to export files over the LAN, but the links were often broken. It is also rather slow, being written in a language being interpreted by a parser written in another interpreted language. I'm leaving it here as an example of working W3TPL code.
<hide><for db=audioferret table="Artists" sort="sort, name" name=ar hide>
<hide>
   <let name=ar_name val="@row.ar.name" />
=====================
===== functions =====
=====================
<func GetArtists>
  <for db=audioferret table="qryArtists_index" sort="name">
    <let name=ar_name val="@row.name" />
    <let name=outFunc append>
* </let>
    <if comp=@row.id with=$doArtist>
      <let name=chosen_artist_name copy=ar_name />
      <let name=outFunc append>'''</let>
      <let name=outFunc append copy=ar_name />
      <let name=outFunc append>'''</let>
    </if><else>
      <let name=outFunc append vars>[{{fullurl:{{PAGENAME}}|artist=[$@row.id$]}} </let>
      <let name=outFunc append copy=ar_name />
      <let name=outFunc append>]</let>
  </for>
</func>
 
<func GetAlbums>
  <let name=sqlFilt vars>idartist=</let>
  <let name=sqlFilt append copy=doArtist />
  <for db=audioferret table="Albums" where=$sqlFilt sort="sort, name">
    <let name=al_name val="@row.name" />
    <let name=outFunc append>
* </let>
    <let name=outFunc append vars>[{{fullurl:{{PAGENAME}}|artist=[$doArtist$]&album=[$@row.id$]}} </let>
    <let name=outFunc append copy=al_name />
    <let name=outFunc append>]</let>
  </for>
</func>
 
<func GetTitles>
  <if flag=doAlbum>
    <let name=sqlFilt vars>album_id=</let>
    <let name=sqlFilt append copy=doAlbum />
  </if><else>
    <let name=sqlFilt vars>artist_id=</let>
    <let name=sqlFilt append copy=doArtist />
  </else>
   <let name=outFunc>
{| </let>
  <for db=audioferret table="qryTitle_Files" where=$sqlFilt sort="track, name">
    <let name=outFunc append>
|-
| '''</let>
    <let name=outFunc append copy=@row.track />
    <let name=outFunc append>'''. </let>
    <let name=outFunc append copy=@row.name />
    <let name=outFunc append> || [</let>
    <let name=outFunc append copy=urlAudio />
    <let name=outFunc append copy=@row.filespec />
    <let name=outFunc append> download]</let>
  </for>
  <let name=outFunc append>
|} </let>
</func>
============================
===== build the output =====
============================
Set up the environment:
-- Turn off page cache:
<w3tpl nocache />
-- base URL for audio files:
<let name=urlAudio>smb://rizzo/shared/sdd/audio/Jukebox/content/</let>
 
Get the input arguments:
<let name=doArtist copy=@query.artist />
<!-- let name=doArtist val=5 / -->
<let name=doAlbum copy=@query.album />
<!-- let name=doAlbum val=131 / -->
 
Always show the artists:
<call GetArtists />
 
<let name=out>
{|
|-
| '''artists'''</let>
<if flag=doArtist>
  <let name=doTitles val=1 />
</if>
<if flag=doArtist>
  <let name=out append vars> || '''albums''': [$chosen_artist_name$]</let>
</if>
<if flag=doTitles>
  <let name=out append> || '''titles''' (only works from our house network)</let>
</if>
<let name=out append>
|-
|
</let>
 
<let name=out append copy=outFunc />
<let name=outFunc null />
 
<if flag=doArtist>
  <call GetAlbums />
  <let name=out append>
| valign=top | </let>
  <let name=out append copy=outFunc />
  <let name=outFunc null />
</if>
 
<if flag=doTitles>
  <call GetTitles />
   <let name=out append>
   <let name=out append>
* </let>
| valign=top | </let>
   <let name=out append copy=ar_name />
   <let name=out append copy=outFunc />
</for>
  <let name=outFunc null />
</if>
 
<let name=out append>
|}</let>
===========================
===== show the output =====
===========================
</hide><get name=out />
</hide><get name=out />

Latest revision as of 01:33, 31 May 2011

The Hypertwin Jukebox Prototype

This was a prototype written in W3TPL; it allowed us to export files over the LAN, but the links were often broken. It is also rather slow, being written in a language being interpreted by a parser written in another interpreted language. I'm leaving it here as an example of working W3TPL code. <hide>

=========
functions
=========

<func GetArtists>

 <for db=audioferret table="qryArtists_index" sort="name">
   <let name=ar_name val="@row.name" />
   <let name=outFunc append>
  • </let>
   <if comp=@row.id with=$doArtist>
     <let name=chosen_artist_name copy=ar_name />
     <let name=outFunc append></let>
     <let name=outFunc append copy=ar_name />
     <let name=outFunc append></let>
   </if><else>
     <let name=outFunc append vars>[$@row.id$ </let>
     <let name=outFunc append copy=ar_name />
     <let name=outFunc append>]</let>
 </for>

</func>

<func GetAlbums>

 <let name=sqlFilt vars>idartist=</let>
 <let name=sqlFilt append copy=doArtist />
 <for db=audioferret table="Albums" where=$sqlFilt sort="sort, name">
   <let name=al_name val="@row.name" />
   <let name=outFunc append>
  • </let>
   <let name=outFunc append vars>[$doArtist$&album=[$@row.id$] </let>
   <let name=outFunc append copy=al_name />
   <let name=outFunc append>]</let>
 </for>

</func>

<func GetTitles>

 <if flag=doAlbum>
   <let name=sqlFilt vars>album_id=</let>
   <let name=sqlFilt append copy=doAlbum />
 </if><else>
   <let name=sqlFilt vars>artist_id=</let>
   <let name=sqlFilt append copy=doArtist />
 </else>
 <let name=outFunc>
<for db=audioferret table="qryTitle_Files" where=$sqlFilt sort="track, name"> <let name=outFunc append>
</let>
   <let name=outFunc append copy=@row.track />
   <let name=outFunc append>. </let>
   <let name=outFunc append copy=@row.name />
   <let name=outFunc append> || [</let>
   <let name=outFunc append copy=urlAudio />
   <let name=outFunc append copy=@row.filespec />
   <let name=outFunc append> download]</let>
 </for>
 <let name=outFunc append>

</let>

</func>

================
build the output
================

Set up the environment: -- Turn off page cache: <w3tpl nocache /> -- base URL for audio files: <let name=urlAudio>smb://rizzo/shared/sdd/audio/Jukebox/content/</let>

Get the input arguments: <let name=doArtist copy=@query.artist /> <let name=doAlbum copy=@query.album />

Always show the artists: <call GetArtists />

<let name=out>

artists</let>

<if flag=doArtist>

 <let name=doTitles val=1 />

</if> <if flag=doArtist>

 <let name=out append vars> || albums: [$chosen_artist_name$]</let>

</if> <if flag=doTitles>

 <let name=out append> || titles (only works from our house network)</let>

</if> <let name=out append>

</let>

<let name=out append copy=outFunc /> <let name=outFunc null />

<if flag=doArtist>

 <call GetAlbums />
 <let name=out append>
</let>
 <let name=out append copy=outFunc />
 <let name=outFunc null />

</if>

<if flag=doTitles>

 <call GetTitles />
 <let name=out append>
</let>
 <let name=out append copy=outFunc />
 <let name=outFunc null />

</if>

<let name=out append>

</let>

===============
show the output
===============

</hide><get name=out />