⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 diskmanagerimpl.java

📁 java 文件下载器。可自定义
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
		TOTorrentFile files[] = torrent.getFiles();
		for (int i = 0; i < files.length; i++)
		{
			byte path_comps[][] = files[i].getPathComponents();
			String path_str = (new StringBuilder()).append(torrent_save_dir).append(File.separator).append(torrent_save_file).append(File.separator).toString();
			for (int j = 0; j < path_comps.length; j++)
			{
				String comp = locale_decoder.decodeString(path_comps[j]);
				comp = FileUtil.convertOSSpecificChars(comp, j != path_comps.length - 1);
				path_str = (new StringBuilder()).append(path_str).append(j != 0 ? File.separator : "").append(comp).toString();
			}

			File file = (new File(path_str)).getCanonicalFile();
			File linked_file = FMFileManagerFactory.getSingleton().getFileLink(torrent, file);
			boolean skip = false;
			if (linked_file != file && !linked_file.getCanonicalPath().startsWith((new File(torrent_save_dir)).getCanonicalPath()))
				skip = true;
			if (!skip && file.exists() && !file.isDirectory())
				res++;
		}

		return res;
		Throwable e;
		e;
		Debug.printStackTrace(e);
		return -1;
	}

	private static void deleteDataFileContents(TOTorrent torrent, String torrent_save_dir, String torrent_save_file)
		throws TOTorrentException, UnsupportedEncodingException, LocaleUtilEncodingException
	{
		LocaleUtilDecoder locale_decoder = LocaleTorrentUtil.getTorrentEncoding(torrent);
		TOTorrentFile files[] = torrent.getFiles();
		String root_path = (new StringBuilder()).append(torrent_save_dir).append(File.separator).append(torrent_save_file).append(File.separator).toString();
		boolean delete_if_not_in_dir = COConfigurationManager.getBooleanParameter("File.delete.include_files_outside_save_dir");
		for (int i = 0; i < files.length; i++)
		{
			byte path_comps[][] = files[i].getPathComponents();
			String path_str = root_path;
			for (int j = 0; j < path_comps.length; j++)
				try
				{
					String comp = locale_decoder.decodeString(path_comps[j]);
					comp = FileUtil.convertOSSpecificChars(comp, j != path_comps.length - 1);
					path_str = (new StringBuilder()).append(path_str).append(j != 0 ? File.separator : "").append(comp).toString();
				}
				catch (UnsupportedEncodingException e)
				{
					Debug.out("file - unsupported encoding!!!!");
				}

			File file = new File(path_str);
			File linked_file = FMFileManagerFactory.getSingleton().getFileLink(torrent, file);
			boolean delete;
			if (linked_file == file)
				delete = true;
			else
				try
				{
					if (delete_if_not_in_dir || linked_file.getCanonicalPath().startsWith((new File(root_path)).getCanonicalPath()))
					{
						file = linked_file;
						delete = true;
					} else
					{
						delete = false;
					}
				}
				catch (Throwable e)
				{
					Debug.printStackTrace(e);
					delete = false;
				}
			if (!delete || !file.exists() || file.isDirectory())
				continue;
			try
			{
				FileUtil.deleteWithRecycle(file);
			}
			catch (Exception e)
			{
				Debug.out(e.toString());
			}
		}

		TorrentUtils.recursiveEmptyDirDelete(new File(torrent_save_dir, torrent_save_file));
	}

	public void skippedFileSetChanged(DiskManagerFileInfo file)
	{
		skipped_file_set_changed = true;
		listeners.dispatch(2, file);
	}

	public void priorityChanged(DiskManagerFileInfo file)
	{
		listeners.dispatch(2, file);
	}

	private void loadFilePriorities()
	{
		loadFilePriorities(download_manager, fileset);
	}

	private static void loadFilePriorities(DownloadManager download_manager, DiskManagerFileInfoSet fileSet)
	{
		DiskManagerFileInfo files[];
		files = fileSet.getFiles();
		if (files == null)
			return;
		List file_priorities;
		file_priorities = (List)download_manager.getData("file_priorities");
		if (file_priorities == null)
			return;
		boolean toSkip[];
		boolean prio[];
		int i;
		toSkip = new boolean[files.length];
		prio = new boolean[files.length];
		i = 0;
_L2:
		if (i >= files.length)
			break MISSING_BLOCK_LABEL_112;
		DiskManagerFileInfo file = files[i];
		if (file == null)
			return;
		int priority = ((Long)file_priorities.get(i)).intValue();
		if (priority == 0)
			toSkip[i] = true;
		else
		if (priority == 1)
			prio[i] = true;
		i++;
		if (true) goto _L2; else goto _L1
_L1:
		fileSet.setPriority(prio, true);
		fileSet.setSkipped(toSkip, true);
		break MISSING_BLOCK_LABEL_138;
		Throwable t;
		t;
		Debug.printStackTrace(t);
	}

	protected void storeFilePriorities()
	{
		storeFilePriorities(download_manager, ((DiskManagerFileInfo []) (files)));
	}

	protected static void storeFilePriorities(DownloadManager download_manager, DiskManagerFileInfo files[])
	{
		if (files == null)
			return;
		List file_priorities = new ArrayList(files.length);
		for (int i = 0; i < files.length; i++)
		{
			DiskManagerFileInfo file = files[i];
			if (file == null)
				return;
			boolean skipped = file.isSkipped();
			boolean priority = file.isPriority();
			int value = -1;
			if (skipped)
				value = 0;
			else
			if (priority)
				value = 1;
			file_priorities.add(i, new Long(value));
		}

		download_manager.setData("file_priorities", file_priorities);
	}

	protected static void storeFileDownloaded(DownloadManager download_manager, DiskManagerFileInfo files[], boolean persist)
	{
		DownloadManagerState state = download_manager.getDownloadState();
		Map details = new HashMap();
		List downloaded = new ArrayList();
		details.put("downloaded", downloaded);
		for (int i = 0; i < files.length; i++)
			downloaded.add(new Long(files[i].getDownloaded()));

		state.setMapAttribute("filedownloaded", details);
		if (persist)
			state.save();
	}

	protected static void loadFileDownloaded(DownloadManager download_manager, DiskManagerFileInfoHelper files[])
	{
		DownloadManagerState state = download_manager.getDownloadState();
		Map details = state.getMapAttribute("filedownloaded");
		if (details == null)
			return;
		List downloaded = (List)details.get("downloaded");
		if (downloaded == null)
			return;
		try
		{
			for (int i = 0; i < files.length; i++)
				files[i].setDownloaded(((Long)downloaded.get(i)).longValue());

		}
		catch (Throwable e)
		{
			Debug.printStackTrace(e);
		}
	}

	public void saveState()
	{
		saveState(true);
	}

	protected void saveState(boolean persist)
	{
		if (files != null)
		{
			storeFileDownloaded(download_manager, files, persist);
			storeFilePriorities();
		}
		checkFreePieceList(false);
	}

	public DownloadManager getDownloadManager()
	{
		return download_manager;
	}

	public String getInternalName()
	{
		return download_manager.getInternalName();
	}

	public DownloadManagerState getDownloadState()
	{
		return download_manager.getDownloadState();
	}

	public File getSaveLocation()
	{
		return download_manager.getSaveLocation();
	}

	public String[] getStorageTypes()
	{
		return getStorageTypes(download_manager);
	}

	public String getStorageType(int fileIndex)
	{
		return getStorageType(download_manager, fileIndex);
	}

	public static String[] getStorageTypes(DownloadManager download_manager)
	{
		DownloadManagerState state = download_manager.getDownloadState();
		String types[] = state.getListAttribute("storetypes");
		if (types.length == 0)
		{
			types = new String[download_manager.getTorrent().getFiles().length];
			for (int i = 0; i < types.length; i++)
				types[i] = "L";

		}
		return types;
	}

	public static String getStorageType(DownloadManager download_manager, int fileIndex)
	{
		DownloadManagerState state = download_manager.getDownloadState();
		String type = state.getListAttribute("storetypes", fileIndex);
		return type == null ? "L" : type;
	}

	private static boolean setFileLink(DownloadManager download_manager, DiskManagerFileInfo info[], DiskManagerFileInfo file_info, File from_file, File to_link)
	{
		File existing_link = FMFileManagerFactory.getSingleton().getFileLink(download_manager.getTorrent(), to_link);
		if (!existing_link.equals(to_link) && !from_file.equals(to_link))
		{
			Logger.log(new LogAlert(download_manager, true, 3, (new StringBuilder()).append("Attempt to link to existing link '").append(existing_link.toString()).append("'").toString()));
			return false;
		}
		File existing_file = file_info.getFile(true);
		if (to_link.equals(existing_file))
			return true;
		for (int i = 0; i < info.length; i++)
			if (to_link.equals(info[i].getFile(true)))
			{
				Logger.log(new LogAlert(download_manager, true, 3, (new StringBuilder()).append("Attempt to link to existing file '").append(info[i].getFile(true)).append("'").toString()));
				return false;
			}

		if (to_link.exists())
		{
			if (!existing_file.exists())
				download_manager.recheckFile(file_info);
			else
			if (FileUtil.deleteWithRecycle(existing_file))
			{
				download_manager.recheckFile(file_info);
			} else
			{
				Logger.log(new LogAlert(download_manager, true, 3, (new StringBuilder()).append("Failed to delete '").append(existing_file.toString()).append("'").toString()));
				return false;
			}
		} else
		if (existing_file.exists() && !FileUtil.renameFile(existing_file, to_link))
		{
			Logger.log(new LogAlert(download_manager, true, 3, (new StringBuilder()).append("Failed to rename '").append(existing_file.toString()).append("'").toString()));
			return false;
		}
		DownloadManagerState state = download_manager.getDownloadState();
		state.setFileLink(from_file, to_link);
		state.save();
		return true;
	}

	public static DiskManagerFileInfoSet getFileInfoSkeleton(DownloadManager download_manager, DiskManagerListener listener)
	{
		TOTorrent torrent;
		String root_dir;
		torrent = download_manager.getTorrent();
		if (torrent == null)
			return new DiskManagerFileInfoSetImpl(new DiskManagerFileInfoImpl[0], null);
		String tempRootDir = download_manager.getAbsoluteSaveLocation().getParent();
		if (tempRootDir == null)
			tempRootDir = download_manager.getAbsoluteSaveLocation().getPath();
		if (!torrent.isSimpleTorrent())
			tempRootDir = (new StringBuilder()).append(tempRootDir).append(File.separator).append(download_manager.getAbsoluteSaveLocation().getName()).toString();
		tempRootDir = (new StringBuilder()).append(tempRootDir).append(File.separator).toString();
		root_dir = tempRootDir;
		DiskManagerFileInfoSet fileSetSkeleton;
		LocaleUtilDecoder locale_decoder = LocaleTorrentUtil.getTorrentEncoding(torrent);
		TOTorrentFile torrent_files[] = torrent.getFiles();
		FileSkeleton res[] = new FileSkeleton[torrent_files.length];
		fileSetSkeleton = new DiskManagerFileInfoSet(res, download_manager, listener) {

			final FileSkeleton val$res[];
			final DownloadManager val$download_manager;
			final DiskManagerListener val$listener;

			public DiskManagerFileInfo[] getFiles()
			{
				return res;
			}

			public int nbFiles()
			{
				return res.length;
			}

			public void setPriority(boolean toChange[], boolean setPriority)
			{
				if (toChange.length != res.length)
					throw new IllegalArgumentException("array length mismatches the number of files");
				for (int i = 0; i < res.length; i++)
					if (toChange[i])
						res[i].priority = setPriority;

				DiskManagerImpl.storeFilePriorities(download_manager, res);
				for (int i = 0; i < res.length; i++)
					if (toChange[i])
						listener.filePriorityChanged(res[i]);

			}

			public void setSkipped(boolean toChange[], boolean setSkipped)
			{
				if (toChange.length != res.length)
					throw new IllegalArgumentException("array length mismatches the number of files");
				if (!setSkipped && !Arrays.equals(toChange, setStorageTypes(toChange, 1)))
					return;
				for (int i = 0; i < res.length; i++)
					if (toChange[i])
						res[i].skipped = setSkipped;

				if (!setSkipped)
					DiskManagerUtil.doFileExistenceChecks(this, toChange, download_manager, true);
				DiskManagerImpl.storeFilePriorities(download_manager, res);
				for (int i = 0; i < res.length; i++)
					if (toChange[i])
						listener.filePriorityChanged(res[i]);

			}

			public boolean[] setStorageTypes(boolean toChange[], int newStroageType)
			{
				String types[];
				boolean modified[];
				boolean toSkip[];
				int toSkipCount;
				DownloadManagerState dmState;
				if (toChange.length != res.length)
					throw new IllegalArgumentException("array length mismatches the number of files");
				types = DiskManagerImpl.getStorageTypes(download_manager);
				modified = new boolean[res.length];
				toSkip = new boolean[res.length];
				toSkipCount = 0;
				dmState = download_manager.getDownloadState();
				dmState.suppressStateSave(true);
				for (int i = 0; i < res.length; i++)
				{
					if (!toChange[i])
						continue;
					final int idx = i;
					int old_type = types[i].equals("L") ? 1 : 2;
					if (newStroageType == old_type)
					{
						modified[i] = true;
						continue;
					}
					try
					{
						File target_file = res[i].getFile(true);
						if (target_file.exists())
						{
							CacheFile cache_file = CacheFileManagerFactory.getSingleton().createFile(new CacheFileOwner() {

								final int val$idx;
								final 6 this$0;

								public String getCacheFileOwnerName()
								{
									return download_manager.getInternalName(

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -