private void EnsureCachePopulated(string path, bool isDir) { foreach (string pkgPath in GetAllPossiblePkgPaths(path, isDir)) { if (!packageStatuses.ContainsKey(pkgPath)) { string pkgRealPath = pkgPath.Replace("/", Path.Separator); if (File.Exists(pkgRealPath)) { CryPkgDecoder pkg = new CryPkgDecoder(File.ReadBytes(pkgRealPath)); packageStatuses[pkgPath] = pkg; } else { packageStatuses[pkgPath] = null; } } } }
private CryPkgPath GetPackagedPath(string fullPath, bool isDir) { string canonicalPath = fullPath.Replace('\\', '/'); this.EnsureCachePopulated(canonicalPath, isDir); string pkgPath = this.GetPathOfHighestCryPkg(canonicalPath, isDir); if (pkgPath == null) { return(null); } string pkgDir = pkgPath.Substring(0, pkgPath.Length - ".crypkg".Length); CryPkgDecoder pkg = packageStatuses[pkgPath]; string relativeDir = (pkgDir == canonicalPath) ? "." : canonicalPath.Substring(pkgDir.Length + 1); return(new CryPkgPath(relativeDir, pkg)); }
public CryPkgPath(string path, CryPkgDecoder package) { this.Package = package; this.Path = path; }