Esempio n. 1
0
        public override async Task <IEntryModel> RenameAsync(IEntryModel entryModel, string newName, CancellationToken ct)
        {
            SevenZipWrapper wrapper  = (Profile as SzsProfile).Wrapper;
            string          destPath = Profile.Path.Combine(Profile.Path.GetDirectoryName(entryModel.FullPath), newName);

            SzsProfile    profile       = Profile as SzsProfile;
            ISzsItemModel szsEntryModel = entryModel as ISzsItemModel;
            string        type          = profile.Path.GetExtension(szsEntryModel.Root.Name);

            using (var releaser = await profile.WorkingLock.LockAsync())
                using (var stream = await profile.DiskIO.OpenStreamAsync(szsEntryModel.Root, Defines.FileAccess.ReadWrite, ct))
                    wrapper.Modify(type, stream, (entryModel as ISzsItemModel).RelativePath, newName,
                                   entryModel.IsDirectory && !(entryModel is SzsRootModel));

            lock (profile.VirtualModels)
            {
                if (profile.VirtualModels.Contains(szsEntryModel))
                {
                    profile.VirtualModels.Remove(szsEntryModel);
                }
            }

            Profile.NotifyEntryChanges(this, destPath, Defines.ChangeType.Moved, entryModel.FullPath);

            return(await Profile.ParseAsync(destPath));
        }
        public string CheckJava(string binaryName)
        {
            var javapath = Path.Combine(RuntimeDirectory, "bin", binaryName);

            if (!File.Exists(javapath))
            {
                string json = "";

                var javaUrl = "";
                using (var wc = new WebClient())
                {
                    //this line was added
                    if (MRule.OSName == MRule.Linux)
                    {
                        return("java");
                    }

                    json = wc.DownloadString(MojangServer.LauncherMeta);

                    var job = JObject.Parse(json)[MRule.OSName];


                    javaUrl = job[MRule.Arch]?["jre"]?["url"]?.ToString();

                    if (string.IsNullOrEmpty(javaUrl))
                    {
                        throw new PlatformNotSupportedException("Downloading JRE on current OS is not supported. Set JavaPath manually.");
                    }

                    Directory.CreateDirectory(RuntimeDirectory);
                }

                var lzmapath = Path.Combine(Path.GetTempPath(), "jre.lzma");
                var zippath  = Path.Combine(Path.GetTempPath(), "jre.zip");

                var webdownloader = new WebDownload();
                webdownloader.DownloadProgressChangedEvent += Downloader_DownloadProgressChangedEvent;
                webdownloader.DownloadFile(javaUrl, lzmapath);

                DownloadCompleted?.Invoke(this, new EventArgs());

                SevenZipWrapper.DecompressFileLZMA(lzmapath, zippath);

                var z = new SharpZip(zippath);
                z.ProgressEvent += Z_ProgressEvent;
                z.Unzip(RuntimeDirectory);

                if (!File.Exists(javapath))
                {
                    throw new Exception("Failed Download");
                }

                if (MRule.OSName != MRule.Windows)
                {
                    IOUtil.Chmod(javapath, IOUtil.Chmod755);
                }
            }

            return(javapath);
        }
Esempio n. 3
0
        public string CheckJava(string binaryName)
        {
            var javapath = Path.Combine(RuntimeDirectory, "bin", binaryName);

            if (!File.Exists(javapath))
            {
                string json = "";

                var WorkingPath = Path.Combine(Path.GetTempPath(), "temp_download_runtime");

                if (Directory.Exists(WorkingPath))
                {
                    IOUtil.DeleteDirectory(WorkingPath);
                }
                Directory.CreateDirectory(WorkingPath);

                var javaUrl = "";
                using (var wc = new WebClient())
                {
                    json = wc.DownloadString(MojangServer.LauncherMeta);

                    var job = JObject.Parse(json)[MRule.OSName];
                    javaUrl = job[MRule.Arch]?["jre"]?["url"]?.ToString();

                    if (string.IsNullOrEmpty(javaUrl))
                    {
                        throw new Exception("unsupport os");
                    }

                    Directory.CreateDirectory(RuntimeDirectory);
                }

                var downloader = new WebDownload();
                downloader.DownloadProgressChangedEvent += Downloader_DownloadProgressChangedEvent;
                downloader.DownloadFile(javaUrl, Path.Combine(WorkingPath, "javatemp.lzma"));

                var lzma = Path.Combine(WorkingPath, "javatemp.lzma");
                var zip  = Path.Combine(WorkingPath, "javatemp.zip");

                SevenZipWrapper.DecompressFileLZMA(lzma, zip);
                var z = new SharpZip(zip);
                z.Unzip(RuntimeDirectory);

                if (!File.Exists(javapath))
                {
                    IOUtil.DeleteDirectory(WorkingPath);
                    throw new Exception("Failed Download");
                }

                if (MRule.OSName != "windows")
                {
                    IOUtil.Chmod(javapath, IOUtil.Chmod755);
                }

                DownloadCompleted?.Invoke(this, new EventArgs());
            }

            return(javapath);
        }
Esempio n. 4
0
 public SzsProfile(IEventAggregator events)
     : base(events)
 {
     DragDrop         = new FileBasedDragDropHandler(this, em => !(em is SzsRootModel));
     MetadataProvider = new SzsMetadataProvider();
     DiskIO           = new SzsDiskIOHelper(this);
     _wrapper         = new SevenZipWrapper();
 }
        public override IScriptCommand Execute(ParameterDic pm)
        {
            string path = pm.ReplaceVariableInsideBracketed(PathKey);
            string ext  = (path.Contains(".") ? PathFE.GetExtension(path) : path).TrimStart('.');

            pm.SetValue(DestinationKey, SevenZipWrapper.GetArchiveBytes(ext));
            return(NextCommand);
        }
Esempio n. 6
0
        private void decompressJavaFile(string lzmaPath)
        {
            string zippath = Path.Combine(Path.GetTempPath(), "jre.zip");

            SevenZipWrapper.DecompressFileLZMA(lzmaPath, zippath);

            var z = new SharpZip(zippath);

            z.ProgressEvent += Z_ProgressEvent;
            z.Unzip(RuntimeDirectory);
        }
Esempio n. 7
0
        public static IScriptCommand ParseOrCreateArchive(IDiskProfile profile, string path, Func <IEntryModel, IScriptCommand> thenFunc)
        {
            string type = profile.Path.GetExtension(path).ToLower();

            byte[] bytes = SevenZipWrapper.GetArchiveBytes(type);

            if (bytes == null)
            {
                return(ResultCommand.Error(new ArgumentException(type + " is not recognized type.")));
            }

            return(WPFScriptCommands.ParseOrCreatePath(profile, path, false,
                                                       em => WPFScriptCommands.WriteBytes(em, bytes, thenFunc)));
        }
Esempio n. 8
0
        public static IScriptCommand CreateArchive(IEntryModel entryModel, string name, bool renameIfExists,
                                                   Func <IEntryModel, IScriptCommand> thenFunc)
        {
            string type = entryModel.Profile.Path.GetExtension(name).ToLower();

            byte[] bytes = SevenZipWrapper.GetArchiveBytes(type);

            if (bytes == null)
            {
                return(ResultCommand.Error(new ArgumentException(type + " is not recognized type.")));
            }

            return(WPFScriptCommands.CreatePath(entryModel, name, false, renameIfExists,
                                                em => WPFScriptCommands.WriteBytes(em, bytes, thenFunc)));
        }
Esempio n. 9
0
        private DownloadFile[] legacyJavaChecker(MinecraftPath path, out string binPath)
        {
            string legacyJavaPath = Path.Combine(path.Runtime, "m-legacy");
            MJava  mJava          = new MJava(legacyJavaPath);

            binPath = mJava.GetBinaryPath();

            if (mJava.CheckJavaExistence())
            {
                return new DownloadFile[] {}
            }
            ;

            string javaUrl  = mJava.GetJavaUrl();
            string lzmaPath = Path.Combine(Path.GetTempPath(), "jre.lzma");
            string zipPath  = Path.Combine(Path.GetTempPath(), "jre.zip");

            DownloadFile file = new DownloadFile(lzmaPath, javaUrl)
            {
                Name          = "jre.lzma",
                Type          = MFile.Runtime,
                AfterDownload = new Func <Task>[]
                {
                    () => Task.Run(() =>
                    {
                        SevenZipWrapper.DecompressFileLZMA(lzmaPath, zipPath);

                        var z = new SharpZip(zipPath);
                        z.Unzip(legacyJavaPath);

                        tryChmod755(mJava.GetBinaryPath());
                    })
                }
            };

            return(new[] { file });
        }
Esempio n. 10
0
        public string CheckJava(string binaryName)
        {
            var javapath = Path.Combine(RuntimeDirectory, "bin", binaryName);

            if (File.Exists(javapath))
            {
                return(javapath);
            }
            string json = "";

            var javaUrl = "";

            using (var wc = new WebClient())
            {
                json = wc.DownloadString(MojangServer.LauncherMeta);

                var job = JObject.Parse(json)[MRule.OSName];
                javaUrl = job[MRule.Arch]?["jre"]?["url"]?.ToString();
                Log.Information("Downloading java from: " + javaUrl);
                if (string.IsNullOrEmpty(javaUrl))
                {
                    Log.Error("Downloading JRE on current OS is not supported. Set JavaPath manually.");
                    throw new PlatformNotSupportedException("Downloading JRE on current OS is not supported. Set JavaPath manually.");
                }

                Directory.CreateDirectory(RuntimeDirectory);
            }

            var lzmapath = Path.Combine(Path.GetTempPath(), "jre.lzma");
            var zippath  = Path.Combine(Path.GetTempPath(), "jre.zip");

            Log.Information($"Downloading to: {lzmapath}");

            var webdownloader = new WebDownload();

            webdownloader.DownloadProgressChangedEvent += Downloader_DownloadProgressChangedEvent;
            webdownloader.DownloadFile(javaUrl, lzmapath);

            DownloadCompleted?.Invoke(this, new EventArgs());

            Log.Information("Download completed. Start LZMAing...");
            try
            {
                SevenZipWrapper.DecompressFileLZMA(lzmapath, zippath);
                //SevenZipWrapper.DecompressFileLZMA(lzmapath, zippath);
            }
            catch (Exception e)
            {
                Log.Error(e, "LZMA Error");
            }

            Log.Information("Start Unzipping...");

            var z = new SharpZip(zippath);

            z.ProgressEvent += Z_ProgressEvent;
            z.Unzip(RuntimeDirectory);

            if (!File.Exists(javapath))
            {
                Log.Error("Failed Download Java File exists: " + javapath);
                throw new Exception("Failed Download");
            }

            if (MRule.OSName != "windows")
            {
                IOUtil.Chmod(javapath, IOUtil.Chmod755);
            }

            Log.Information("Java path: " + javapath);

            return(javapath);
        }