BSky.Statistics.R.RPackageManager.InstallPackageFromZip C# (CSharp) Method

InstallPackageFromZip() public method

public InstallPackageFromZip ( string fullpathpackagefilename, bool autoLoad = true, bool overwrite = false ) : UAReturn
fullpathpackagefilename string
autoLoad bool
overwrite bool
return BSky.Statistics.Common.UAReturn
        public UAReturn InstallPackageFromZip(string fullpathpackagefilename, bool autoLoad = true, bool overwrite=false)//autoload loads package in memory after install
        {
            UAReturn result = new UAReturn() { Success = false };
            string pkgversion = string.Empty;
            string packagename = GetPackageNameFromZip(fullpathpackagefilename, out pkgversion);// get package name.
            if (packagename.Trim().Length < 1) // no packagename, may be because of error.
            {
                result.Error = "Error:No Packages Found!";
                return result;
            }



            //See if package is already installed, then dont install it. OR Install if Overwrite is true
            if (!isPackageInstalled(packagename) || overwrite)
            {
                //See if you really want to execute following.
                if (overwrite)
                {
                    if (_dispatcher.IsLoaded(packagename)) // if package is already loaded. Unload 
                    {
                        UnLoadPackage(packagename);
                    }
                    if (isPackageInstalled(packagename)) // and uninstall it
                    {
                        UninstallPackage(packagename);
                    }
                }

                //string AppRPackageDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location).Replace('\\', '/') + "/RPackages";
                string parentDir = Path.GetDirectoryName(fullpathpackagefilename).Replace('\\', '/');
                string command = string.Empty;
                string errmsg = null;
                StringBuilder sb = new StringBuilder("");
                //command = "library(tools)";//already excuted in constructor
                //_dispatcher.EvaluateNoReturn(command);
                //_journal.WriteLine(command);

                command = string.Format("write_PACKAGES('{0}')", parentDir);
                errmsg = _dispatcher.EvaluateNoReturn(command);
                _journal.WriteLine(command);
                if (errmsg != null && errmsg.Trim().Length > 1) //error occurred
                {
                    sb.Append(errmsg);
                }

                command = string.Format("install.packages('{0}', repos=NULL, contriburl='file:///{1}')", packagename, parentDir);
                errmsg = _dispatcher.EvaluateNoReturn(command);
                _journal.WriteLine(command);
                if (errmsg != null && errmsg.Trim().Length > 1) //error occurred
                {
                    sb.Append(errmsg);
                }
                if (!(errmsg.ToLower().Contains("error") || errmsg.ToLower().Contains("warning")))
                {
                    result.Success = true;
                    pkgnamelist.Add(packagename);//"BlueSky" or "MASS" or "car" not zip filenames
                }

                if (autoLoad)//(&& result.Success) // we can use this 'result.Success' to load package only if it installed without errors/warning. 
                {//But we dont know, there may not be error realted to package install but something else so its  better to try loading package
                    sb.Append("Loading package: ");
                    UAReturn rr = LoadPackage(packagename, false); // Normally, when we install package, it should also be loaded. Can also be done outside.
                    sb.Append(rr.Error); //package loading error or warning.
                }
                result.Error = sb.ToString();
            }
            else
            {
                result.Error = packagename + " already installed.";
                pkgnamelist.Add(packagename);//if you want to load already installed package, automatically
            }
            return result;
        }