Package com.pugh.sockso.web.action.playlist

Source Code of com.pugh.sockso.web.action.playlist.Playlister

package com.pugh.sockso.web.action.playlist;

import com.pugh.sockso.music.Files;
import com.pugh.sockso.music.Track;
import com.pugh.sockso.web.BadRequestException;
import com.pugh.sockso.web.Request;
import com.pugh.sockso.web.Response;
import com.pugh.sockso.web.TracksRequest;
import com.pugh.sockso.web.action.BaseAction;

import java.io.IOException;
import java.sql.SQLException;

/**
* Handles creating playlists (eg. M3u, Pls, etc...)
*
* Abstract class for all playlist generators to implement
*
*/
public abstract class Playlister extends BaseAction {
   
    protected abstract PlaylistTemplate getPlaylistTemplate();

    private String protocol;
    private String extension;
   
    /**
     *  constructor
     *
     *  @param db the database connection
     *
     */
   
    public void init( final String protocol, final String extension ) {

        this.protocol = protocol;
        this.extension = extension;
       
    }

    @Override
    public void handleRequest() throws IOException, SQLException, BadRequestException {
       
        final Request req = getRequest();
        final String type = req.getUrlParam( 1 );

        if ( type.equals("random") ) {
            createRandomPlaylist();
        }

        else {
            createPlaylist();
        }
       
    }

    /**
     *  creates a playlist to play a random stream (just one track that links
     *  to a stream that keeps fetching more info)
     *
     *  @param req the request object
     *  @param res the response object
     *
     *  @throws IOException
     *
     */
   
    public void createRandomPlaylist() throws IOException, SQLException {

        showPlaylist(
            getTracksRequest().getRandomTracks()
        );

    }
   
    /**
     *  creates a custom playlist based on "TY123" type url
     *  arguments (where TY is the filter type, and 123 the id)
     *
     *  @param playArgs the url arguments
     *
     *  @throws SQLException
     *  @throws BadRequestException
     *  @throws IOException
     *
     */
   
    public void createPlaylist() throws SQLException, BadRequestException, IOException {

        showPlaylist(
            getTracksRequest().getRequestedTracks()
        );

    }
   
    /**
     *  shows a playlist with the specified tracks
     *
     *  @param tracks
     *
     */

    protected void showPlaylist( final Track[] tracks ) throws IOException {

        sendHeaders();

        final PlaylistTemplate tpl = getPlaylistTemplate();

        tpl.setProperties( getProperties() );
        tpl.setUser( getUser() );
        tpl.setRequest( getRequest() );
        tpl.setTracks( tracks );
        tpl.setProtocol( protocol );

        getResponse().showTemplate( tpl.makeRenderer() );

    }
   
    /**
     *  sends the HTTP headers needed before sending this playlists to the client
     *
     */
   
    private void sendHeaders() {

        final Response res = getResponse();
        final String filename = "playlist." +extension;
       
        res.addHeader( "Content-type", Files.getMimeType(filename) );
        res.addHeader( "Content-Disposition", "inline; filename=\"" +filename+ "\"" );
        res.addHeader( "Expires", "0" );
        res.addHeader( "Cache-Control", "must-revalidate, post-check=0, pre-check=0" );
        res.addHeader( "Pragma", "nocache" );

    }

    /**
     *  Creates a new TracksRequest object for querying for tracks
     *
     *  @return
     *
     */
   
    protected TracksRequest getTracksRequest() {

        return new TracksRequest(
            getRequest(),
            getDatabase(),
            getProperties()
        );

    }

}
TOP

Related Classes of com.pugh.sockso.web.action.playlist.Playlister

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.