📄 freenav.jsp
字号:
<%@ page contentType="text/html;charset=ISO-8859-15"
pageEncoding="ISO-8859-1"%>
<%@page import="org.homeplayer.util.*"%>
<%@page import="org.homeplayer.web.*"%>
<%@page import="java.io.*"%>
<%@page import="java.util.*"%>
<%@page import="java.net.URL"%>
<%@page import="javax.swing.filechooser.FileSystemView"%>
<jsp:useBean id="hppc" class="org.homeplayer.web.HPPageContext"
scope="request">
<jsp:setProperty name="hppc" property="request" value="<%=request%>" />
<jsp:setProperty name="hppc" property="serviceName" value="FreeNav" />
</jsp:useBean>
<%!
/**
@param o must be a File, a URL or a Shotcut
*/
public String getFolderFileName(Object dirObj, boolean isRoot, FreeNavService service) {
String name;
if (dirObj instanceof File) {
File dir = (File) dirObj;
if( isRoot ) {
if (FileSystemView.getFileSystemView().isFloppyDrive(dir) == true) {
name = dir.getAbsolutePath() ;
} else {
name = service.getDisplayString(dir) ;
name = name.equals("")||name.startsWith("Disque local") ? dir.getAbsolutePath() : name ;
}
} else {
name = dir.getName().equals( "" ) ? dir.getAbsolutePath() : dir.getName() ;
}
} else if( dirObj instanceof URL ) {
URL dir = (URL) dirObj;
if( isRoot ) {
name = dir.getFile().substring(1) + " (FB HD)";
} else {
name = new File(dir.getFile()).getName() ;
}
} else if( dirObj instanceof Favorite ) {
name = ((Favorite)dirObj).getName() ;
} else {
Shortcut shortcut = (Shortcut) dirObj;
name = shortcut.getName();
}
return name;
}
/**
@param o must be a File, a URL or a Shotcut
*/
public String getFileName(Object o) {
if (o instanceof File) {
return ((File) o).getName();
} else if (o instanceof URL) {
String fullName = ((URL) o).getFile() ;
int index = fullName.lastIndexOf("/") ;
return fullName.substring(index+1,fullName.length());
} else {
return ((Shortcut) o).getName();
}
}
public String getShort(String name, int nbChars) {
int idx = name.lastIndexOf('.');
if (idx >= 1) {
name = name.substring(0, idx);
}
return StringUtil.cut(name, nbChars, ".");
}
public String getShortName(Object o, int nbChars) {
return getShort(getFileName(o), nbChars);
}
%>
<%
FreeNavService service = new FreeNavService() ;
//-------------------------------------------------------------------------------------------
// List subdirectories
// -------------------------------------------------------------------------------------------
int MAX_HEIGHT_FOLDER = hppc.getSkin().getMenuHeight();
int FOLDER_ICON_WIDTH = 20;
int folderMenuWidth = hppc.getSkin().getMenuWidth();
int dirPage = WebUtil.getParam(request, "dirPage", 0) ;
String folder = WebUtil.getParam(request, "folder", null);
Object folderFile = (folder != null) ? (folder.startsWith("ftp") ? (Object)new URL(folder) : (Object)new File(folder)) : null;
boolean isRoot = (folder == null);
hppc.setNavLevel(service.getDeep(folder) + 1);
List folders = service.getDirectory(folder) ;
if( isRoot && HPConf.getBool(HPConf.FTP_ACTIVATED) && hppc.isFreeBoxHD() ) {
try {
Vector ftproots = FTPBrowser.getFBFTPBrowser().listDirectories( "" ) ;
for( int i=0 ; i<ftproots.size() ; i++ ) {
folders.add( new URL( FTPBrowser.getFBFTPBrowser().getServerPath()+"/"+ftproots.get(i) )) ;
}
} catch ( Exception e ) {
System.out.println( "Unable to connect to FBHD." ) ;
System.out.println( "Error: "+e.getMessage() ) ;
}
}
if( isRoot ) {
FavoriteManager favman = FavoriteManager.getInstance();
if( favman.getFavorites("FreeNav").size()>0 ) {
folders.add( null ) ;
}
for (Iterator it2 = favman.getFavorites("FreeNav").iterator(); it2.hasNext();) {
Favorite fav = (Favorite) it2.next();
if( fav.getUrl() != null ) {
String favDir = WebUtil.getParam(fav.getUrl(), "folder","") ;
if( favDir != null && fav.getName() != null ) {
folders.add( fav ) ;
}
}
}
}
dirPage = Math.min(folders.size()-1, dirPage) ;
dirPage = Math.max(0,dirPage) ;
// build the pages list (files to display on each pages
List<List<Object>> folderPages = new ArrayList<List<Object>>(folders.size() / 10 + 1);
int foldersHeightCpt = 0;
List<Object> foldersCurrentPage = new ArrayList<Object>(20);
folderPages.add(foldersCurrentPage);
for (int i = 0; i < folders.size(); i++) {
Object o = folders.get(i);
if( o != null ) {
if ((o instanceof File) && ! isRoot) {
if (((File) o).getName().equals("VIDEO_TS")) {
request.setAttribute("isDvdDirectory", Boolean.TRUE);
}
}
String name = getFolderFileName(o, isRoot, service);
if( name != null ) {
int lineHeight = StringUtil.splitInMultipleLines(name, folderMenuWidth - FOLDER_ICON_WIDTH, 0).size() * 17 + 5;
if (lineHeight + foldersHeightCpt > MAX_HEIGHT_FOLDER) {
foldersCurrentPage = new ArrayList<Object>(20);
folderPages.add(foldersCurrentPage);
foldersHeightCpt = lineHeight;
} else {
foldersHeightCpt += lineHeight;
}
}
}
foldersCurrentPage.add(o);
}
foldersCurrentPage = folderPages.get(dirPage);
if (dirPage > 0) {
String url = "/freenav/freenav.jsp?dirPage="+(dirPage - 1);
if (! isRoot) {
url+= "&folder=" + WebUtil.urlEncode(folder);
}
hppc.addMenuItem(new HPMenuPrevious(url));
}
if (! isRoot) {
// add the parent directory link
String dirPath = service.getParentPath(folder) ;
FavoriteManager favman = FavoriteManager.getInstance();
for (Iterator it2 = favman.getFavorites("FreeNav").iterator(); it2.hasNext();) {
Favorite fav = (Favorite) it2.next();
if( fav.getUrl() != null ) {
String favDir = WebUtil.getParam(fav.getUrl(), "folder","") ;
if( favDir!=null && WebUtil.urlDecode(favDir).equals(folder) ) {
dirPath = null ;
break ;
}
}
}
String url = "/freenav/freenav.jsp";
if (dirPath != null) {
url += "?folder=" + WebUtil.urlEncode(dirPath);
}
hppc.addMenuItem(new HPMenuLink("<i>Dossier Parent</i>", url, "<img border=0 align=middle src=images/parent.gif width=20 height=20 alt=..> "));
}
for (int i=0; i<foldersCurrentPage.size(); i++) {
Object dirObj = foldersCurrentPage.get(i);
if( dirObj != null ) {
String name = getFolderFileName(dirObj, isRoot, service);
if( name != null ) {
List<String> lines = StringUtil.splitInMultipleLines(name, folderMenuWidth - FOLDER_ICON_WIDTH, 0);
StringBuilder buf = new StringBuilder();
buf.append(lines.get(0));
for (int j = 1; j < lines.size(); j++) {
buf.append("<br> ");
buf.append(lines.get(j));
}
name = buf.toString();
String url;
String icon = "" ;
if (dirObj instanceof File) {
File dir = (File) dirObj;
url = "/freenav/freenav.jsp?folder="+WebUtil.urlEncode(dir.getAbsolutePath());
//icon = isRoot ? service.getIcon( dir ) : "" ;
icon = service.getIcon( dir );
} else if( dirObj instanceof URL ) {
URL dir = (URL) dirObj;
url = "/freenav/freenav.jsp?folder="+WebUtil.urlEncode(dir.toExternalForm());
icon = isRoot && IOUtil.isWin() ? service.getIcon( new File("c:\\") ) : "" ;
} else if( dirObj instanceof Favorite ) {
Favorite fav = (Favorite) dirObj;
url = fav.getUrl();
icon = "/images/favfreenav16.gif" ;
} else {
Shortcut shortcut = (Shortcut) dirObj;
url = "/freenav/freenav.jsp?folder="+WebUtil.urlEncode(shortcut.getFile().getAbsolutePath());
//icon = isRoot ? service.getIcon( shortcut ) : "" ;
icon = service.getIcon( shortcut.getShortcutFile() );
}
if( icon.equals("") == false ) {
icon = "<img border=0 align=middle src=\""+icon+"\" width=16 height=16> " ;
}
if( url!=null ) {
HPMenuLink link = icon.equals("") ? new HPMenuLink(name, url) : new HPMenuLink(name, url, icon);
link.setAlreadyFitToWidth(true);
hppc.addMenuItem( link );
}
}
} else {
hppc.addMenuItem(new HPMenuSeparator()) ;
}
}
if (dirPage < folderPages.size() - 1) {
String url = "/freenav/freenav.jsp?dirPage="+(dirPage+1);
if (! isRoot) {
url+= "&folder=" + WebUtil.urlEncode(folder);
}
hppc.addMenuItem(new HPMenuNext(url));
}
//-------------------------------------------------------------------------------------------
//List files
// -------------------------------------------------------------------------------------------
List files = (isRoot) ? Collections.EMPTY_LIST : service.getMediaFile(folder ) ;
hppc.setHeaderTitle((isRoot) ? "Ordinateur" : ( IOUtil.getSmartPath(folder) + " (" +files.size()+")" ));
//hppc.setChannelPage("/freenav/freenav.jsp?folder=" + WebUtil.urlEncode(folder)+"&start="+start+"&page=%d" ) ;
int MAX_HEIGHT = 345;
int ICON_WIDTH = 20;
int availableWidth = hppc.getSkin().getContentWidth() -25;
int filePage = WebUtil.getParam(request, "filePage", 0) ;
// build the pages list (files to display on each pages
List<List<Object>> pages = new ArrayList<List<Object>>(files.size() / 10 + 1);
int heightCpt = 0;
List<Object> currentPage = new ArrayList<Object>(20);
pages.add(currentPage);
String firstFileName = files.isEmpty() ? "" : getShort(getFileName(files.get(0)), 100);
hppc.addPage(1, firstFileName, WebUtil.setParam(hppc.getLocalURL(), "filePage=0"));
for (int i = 0; i < files.size(); i++) {
Object o = files.get(i);
String name = getFileName(o);
int lineHeight = StringUtil.splitInMultipleLines(name, availableWidth - ICON_WIDTH, 0).size() * 17 + 5;
if (lineHeight + heightCpt > MAX_HEIGHT) {
currentPage = new ArrayList<Object>(20);
pages.add(currentPage);
heightCpt = lineHeight;
hppc.addPage(pages.size(), getShort(name, 100), WebUtil.setParam(hppc.getLocalURL(), "filePage=" + (pages.size()-1)));
} else {
heightCpt += lineHeight;
}
currentPage.add(o);
// check if DVD directory
if (o instanceof File) {
if (name.equals("VIDEO_TS.VOB")) {
request.setAttribute("isDvdDirectory", Boolean.TRUE);
}
}
}
filePage = Math.max(0,filePage) ;
filePage = Math.min(pages.size()-1,filePage) ;
hppc.setCurrentPage(filePage+1);
currentPage = pages.get(filePage);
if (! isRoot) {
String favoriteTitle = folderFile instanceof File ? (((File)folderFile).getName().equals("")? ((File)folderFile).getAbsolutePath() : ((File)folderFile).getName()) : ((URL)folderFile).getFile();
hppc.setFavorite(hppc.getServiceName(), favoriteTitle, StringUtil.gsub(hppc.getLocalURL(),"filePage=","dummy="));
}
//-------------------------------------------------------------------------------------------
// create the top command
//-------------------------------------------------------------------------------------------
if (folder != null) {
request.setAttribute("freenav.folder", folder);
request.setAttribute("freenav.folders", folders);
request.setAttribute("freenav.files", files);
request.setAttribute("freenav.service", service);
if( folderFile instanceof File ) {
hppc.setTopCommandPage("/freenav/topCommand.jsp");
}
}
%>
<jsp:include page="<%= hppc.getSkin().getHeader() %>" />
<table width=406 border=0>
<tr>
<td>
<table width="100%" cellpadding=0 cellspacing=0>
<%
for (int i = 0; i < currentPage.size(); i++) {
Object obj = currentPage.get(i);
String icon;
String url;
if (obj instanceof Shortcut) {
Shortcut shortcut = (Shortcut) obj;
icon = service.getIcon(shortcut.getShortcutFile());
url = shortcut.getFile().getAbsolutePath();
} else if (obj instanceof URL) {
URL item = (URL) obj;
icon = service.getIcon(item.getFile());
url = item.toString();
} else {
File item = (File) obj;
icon = service.getIcon(item);
url = item.getAbsolutePath();
}
String name = getFileName(obj);
List<String> lines = StringUtil.splitInMultipleLines(name, availableWidth - ICON_WIDTH, 0);
StringBuilder buf = new StringBuilder();
buf.append(lines.get(0));
for (int j = 1; j < lines.size(); j++) {
buf.append("<br> ");
buf.append(lines.get(j));
}
String desc = buf.toString();
String playurl = "play"
+ (service.isImageFile(url) ? "Images" : "")
+ ".jsp?level=" + (hppc.getNavLevel() + 1) + "&File="
+ WebUtil.urlEncode(url);
%>
<tr>
<td><%=hppc.getTableLink(icon, desc, playurl, hppc.getSkin().getProp("bodyColor"), 20, false)%></td>
</tr>
<%
}
%>
</table>
</td>
</tr>
</table>
<jsp:include page="<%= hppc.getSkin().getFooter() %>" />
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -