/* * @(#)PutTracks.java * * This file is part of webCDwriter - Network CD/DVD Writing. * * Copyright (C) 1999-2006 Jörg P. M. Haeger * * webCDwriter is free software. See CDcreator.java for details. */ import java.io.File; import java.io.FileInputStream; /** * Execution of a "putTrack" command to copy a file to the server. * * @version 20060410 * @author Jörg P. M. Haeger */ public class PutTracks extends PutFiles { public PutTracks(CDNode CDRootNode, int sessionSizeKB) { super(CDRootNode, getSessionSizeKB(CDRootNode, sessionSizeKB)); MD5Sum = null; } protected void editFileName(DirTreeNode node, int index) { } private static int getSessionSizeKB( CDNode node, int sessionSizeKB) { if (Mode.audioCD()) { // replace seconds by the bytes to transmit sessionSizeKB = 0; for (int i = 0; i < node.getChildCount(); i++) sessionSizeKB += ((CDNode)node.getChildAt(i)) .getFile().length() / 1024; } return sessionSizeKB; } protected void putFile(String dirName, DirTreeNode node) throws java.io.IOException, CommandError, Exception { File file = node.getFile(); String fileName = dirName + "/" + node.toString(); Version.debug("PutTracks", "putFile: " + fileName + " " + file); view.setFileName(fileName); String trackType = "image"; if (file.getName().toLowerCase().endsWith(".wav")) trackType = "wav"; else if (file.getName().toLowerCase().endsWith(".mp3")) trackType = "mp3"; else if (file.getName().toLowerCase().endsWith(".ogg")) trackType = "ogg"; if (file instanceof ServerFile) { writeCommand("linkTrack " + spaceToEsc(file.getPath()) + " " + spaceToEsc(trackType)); readResult(); if (!lastResultOK()) throw new CommandError(); if (file.length() > 0) transmittedKB += (file.length() - 1) / 1024 + 1; view.setProgress(transmittedKB); return; } try { new Wave(file); trackType = "wav"; } catch (Exception e) {} FileInputStream inFile = open(file); if (inFile == null) return; while (!cancel) { byte bs[] = new byte[64 * 1024]; int len = inFile.read(bs); if (len == -1) break; writeCommand("putTrack " + trackType + " " + len); outStream.write(bs, 0, len); transmittedKB += len / 1024; view.setProgress(transmittedKB); readResult(); if (!lastResultOK()) throw new CommandError(); trackType = "continue"; } inFile.close(); if (trackType.equals("image")) return; String name = file.getName(); if (name.length() > 3) { trackType = "inf"; name = name.substring(0, name.length() - 4) + ".inf"; file = new File(file.getParent(), name); if (!file.exists()) return; inFile = open(file); if (inFile == null) return; while (true) { byte bs[] = new byte[64 * 1024]; int len = inFile.read(bs); if (len == -1) break; writeCommand("putTrack " + trackType + " " + len); outStream.write(bs, 0, len); readResult(); trackType = "continue"; } inFile.close(); } } }