View Javadoc

1   /***
2    *     Ambient - A music player for the Android platform
3    Copyright (C) 2007 Martin Vysny
4    
5    This program is free software: you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation, either version 3 of the License, or
8    (at your option) any later version.
9    
10   This program is distributed in the hope that it will be useful,
11   but WITHOUT ANY WARRANTY; without even the implied warranty of
12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   GNU General Public License for more details.
14  
15   You should have received a copy of the GNU General Public License
16   along with this program.  If not, see <http://www.gnu.org/licenses/>.
17   */
18  
19  package sk.baka.ambient.collection;
20  
21  import sk.baka.ambient.library.LibraryUtils;
22  
23  /***
24   * The location of the track.
25   * 
26   * @author Martin Vysny
27   */
28  public enum TrackOriginEnum {
29  	/***
30  	 * The local filesystem.
31  	 */
32  	LocalFs(null, false, true, false),
33  	/***
34  	 * <a href="http://www.magnatune.com">Magnatune</a> shop.
35  	 */
36  	Magnatune("http://www.magnatune.com", true, true, false),
37  	/***
38  	 * <a href="http://www.skreemr.com">SkreemR</a> search engine.
39  	 */
40  	SkreemR("http://www.skreemr.com", true, true, false),
41  	/***
42  	 * A <a href="http://www.shoutcast.com">SHOUTcast</a> radio station.
43  	 */
44  	Shoutcast("http://www.shoutcast.com", true, false, true),
45  	/***
46  	 * <a href="http://www.skreemr.com">Ampache</a> music library.
47  	 */
48  	Ampache("http://ampache.org", true, true, false);
49  	private TrackOriginEnum(final String url, final boolean online,
50  			final boolean seekable, final boolean endless) {
51  		this.url = url;
52  		this.online = online;
53  		this.seekable = seekable;
54  		this.endless = endless;
55  	}
56  
57  	/***
58  	 * If <code>true</code> then this stream type is endless (like an Internet
59  	 * radio). If <code>false</code> then the stream type is a finite file.
60  	 */
61  	public final boolean endless;
62  
63  	/***
64  	 * If <code>true</code> then media player is able to seek in this media
65  	 * type.
66  	 */
67  	public final boolean seekable;
68  
69  	/***
70  	 * The track location URL. May be <code>null</code> if there is no
71  	 * particular URL.
72  	 */
73  	public final String url;
74  	/***
75  	 * If <code>true</code> then tracks from this location are stored on-line.
76  	 */
77  	public final boolean online;
78  
79  	/***
80  	 * Gets the enum constant from a DB INT value.
81  	 * 
82  	 * @param val
83  	 *            the value
84  	 * @return the constant.
85  	 */
86  	public static TrackOriginEnum fromDb(final int val) {
87  		return TrackOriginEnum.values()[val];
88  	}
89  
90  	/***
91  	 * Gets the track type from its location.
92  	 * 
93  	 * @param location
94  	 *            the location.
95  	 * @return the constant.
96  	 */
97  	public static TrackOriginEnum fromLocation(final String location) {
98  		if (!location.startsWith("http://")) {
99  			return TrackOriginEnum.LocalFs;
100 		}
101 		final String hostLoc = location.substring(7);
102 		if (LibraryUtils.MUSIC_NAME_FILTER.accept(null, hostLoc)) {
103 			return TrackOriginEnum.SkreemR;
104 		}
105 		return TrackOriginEnum.Shoutcast;
106 	}
107 
108 	/***
109 	 * Returns the enum value as a database string. This string is passable for
110 	 * example to the {@link ICollection} finder method.
111 	 * 
112 	 * @return a DB representation of this enum.
113 	 */
114 	public String toDBString() {
115 		return String.valueOf(ordinal());
116 	}
117 }