예제 #1
0
        public bool ProcessFileManagement(XciItem xci)
        {
            bool success = false;

            if (!Helpers.Settings.CheckForSdCard() &&
                (xci.fileAction.action == FileAction.Copy ||
                 xci.fileAction.action == FileAction.Delete ||
                 xci.fileAction.action == FileAction.Move))
            {
                return(false);
            }

            switch (xci.fileAction.action)
            {
            case FileAction.None:
                break;

            case FileAction.Copy:
            case FileAction.Move:
                FileHelper.TransferXci(xci);
                break;

            case FileAction.Delete:
                try
                {
                    if (File.Exists(xci.xciFilePath))
                    {
                        File.Delete(xci.xciFilePath);
                    }

                    if (!File.Exists(xci.xciFilePath))
                    {
                        success = true;
                    }

                    xci.fileAction.actionCompleted = true;
                    xci.fileAction.actionSuccess   = success;

                    XciHelper.UpdateXci(xci);
                    return(success);
                }
                catch { }

                return(false);

            case FileAction.CompletelyDelete:

                List <XciItem> deleteItems = GetAllItemsByIdentifer(xci.uniqueId);

                for (int i = deleteItems.Count - 1; i >= 0; i--)
                {
                    if (File.Exists(deleteItems[i].xciFilePath))
                    {
                        File.Delete(deleteItems[i].xciFilePath);
                    }

                    if (!File.Exists(deleteItems[i].xciFilePath))
                    {
                        success = true;
                    }

                    deleteItems[i].fileAction = Clone(xci.fileAction);
                    deleteItems[i].fileAction.actionCompleted = true;
                    deleteItems[i].fileAction.actionSuccess   = success;

                    UpdateXci(deleteItems[i]);
                }

                return(success);

            case FileAction.Trim:
                bool trim;
                if (xci.gameSize != xci.gameUsedSize)
                {
                    trim = XciHelper.TrimXci(xci);

                    if (trim)
                    {
                        UpdateToolStripLabel($"Successfully trimmed {xci.gameName}!");
                    }
                    else
                    {
                        UpdateToolStripLabel($"Failed to trim {xci.gameName}!");
                    }

                    xci.fileAction.actionCompleted = true;
                    xci.fileAction.actionSuccess   = true;

                    //re-process the XCI
                    //RefreshXciInBackground(xci);

                    return(trim);
                }
                else
                {
                    UpdateToolStripLabel($"{xci.gameName} is already trimmed!");
                    return(true);
                }

            case FileAction.ShowCert:
                XciHelper.ShowXciCert(xci);
                return(true);

            case FileAction.ShowXciInfo:
                if (!string.IsNullOrWhiteSpace(xci.xciFilePath))
                {
                    ShowXciExplorer(xci.xciFilePath);
                }
                break;

            case FileAction.ShowInExplorer:
                if (!File.Exists(xci.xciFilePath))
                {
                    UpdateToolStripLabel($"{xci.xciFilePath} could not be found!");
                    return(false);
                }

                Process.Start("explorer.exe", "/select, \"" + xci.xciFilePath + "\"");
                return(true);

            default:
                break;
            }

            return(true);
        }
예제 #2
0
        private void ToolStripManagement(object sender, EventArgs e)
        {
            //use ProcessFileManagement
            //delete all copies
            //trim
            //show cert
            //show xciexplorer
            //show in explorer
            string     message = string.Empty, action = string.Empty, source = string.Empty, destination = string.Empty;
            FileStruct fileAction = new FileStruct();

            ToolStripItem clicked   = sender as ToolStripItem;
            int           toolIndex = olvList.ContextMenuStrip.Items.IndexOf(clicked);

            if (toolIndex < 0)
            {
                toolIndex = gameManagementToolStripMenuItem.DropDownItems.IndexOf(clicked);
            }

            if (toolIndex == 1)
            {
                fileAction.action = FileAction.CompletelyDelete;
            }
            if (toolIndex == 2)
            {
                fileAction.action = FileAction.Trim;
            }
            if (toolIndex == 3)
            {
                fileAction.action = FileAction.ShowRenameWindow;
            }
            if (toolIndex == 4)
            {
                fileAction.action = FileAction.ShowCert;
            }
            if (toolIndex == 5)
            {
                fileAction.action = FileAction.ShowXciInfo;
            }
            if (toolIndex == 6)
            {
                fileAction.action = FileAction.ShowInExplorer;
            }
            if (toolIndex == 7)
            {
                fileAction.action = FileAction.OpenOnTinfoilWeb;
            }

            if (Helpers.Settings.config.defaultView == XciLocation.PC)
            {
                fileAction.destination = XciLocation.SD;
                fileAction.source      = XciLocation.PC;
            }
            else
            {
                fileAction.destination = XciLocation.PC;
                fileAction.source      = XciLocation.SD;
            }

            switch (fileAction.action)
            {
            case FileAction.ShowRenameWindow:
                formRenamer renamer = new formRenamer();

                List <XciItem> renameList = olvList.SelectedObjects.Cast <XciItem>().ToList();

                renamer.PopulateList(renameList);
                renamer.Show();
                return;

            case FileAction.ShowInExplorer:
            case FileAction.ShowCert:
            case FileAction.ShowXciInfo:
                List <XciItem> showInfo = olvList.SelectedObjects.Cast <XciItem>().ToList();

                foreach (XciItem item in showInfo)
                {
                    item.fileAction = Clone(fileAction);
                    ProcessFileManagement(item);
                }
                return;

            case FileAction.OpenOnTinfoilWeb:
                List <XciItem> openWeb = olvList.SelectedObjects.Cast <XciItem>().ToList();

                foreach (XciItem item in openWeb)
                {
                    if (item.titleId != null || item.titleId.Length > 0)
                    {
                        System.Diagnostics.Process.Start("https://tinfoil.io/Title/" + item.titleId);
                    }
                }
                return;


            default:
                break;
            }

            XciItem xci;
            int     success = 0, failure = 0;

            action = Enum.GetName(typeof(FileAction), fileAction.action);

            if (fileAction.action == FileAction.CompletelyDelete)
            {
                action = "completely delete (from all locations)";
            }

            if (olvList.SelectedIndices.Count > 1)
            {
                if (MessageBox.Show($"Are you sure you want to {action} {olvList.SelectedObjects.Count} games?", $"Confirm {action.ToUpperInvariant()}", MessageBoxButtons.YesNoCancel) != DialogResult.Yes)
                {
                    return;
                }

                List <XciItem> actionList = olvList.SelectedObjects.Cast <XciItem>().ToList();

                foreach (XciItem obj in actionList)
                {
                    xci            = Clone(obj);
                    xci.fileAction = Clone(fileAction);

                    if (ProcessFileManagement(xci))
                    {
                        success++;
                    }
                    else
                    {
                        failure++;
                    }

                    UpdateToolStripLabel($"{action.ToUpperInvariant()} results: Success: {success} Failed: {failure}");

                    if (fileAction.action == FileAction.Trim)
                    {
                        XciHelper.UpdateXci(xci);
                    }
                }
            }
            else
            {
                xci            = Clone((XciItem)olvList.GetItem(olvList.SelectedIndex).RowObject);
                xci.fileAction = fileAction;

                if (MessageBox.Show($"Are you sure you want to {action} {xci.gameName}?", $"Confirm {action.ToUpperInvariant()}", MessageBoxButtons.YesNoCancel) != DialogResult.Yes)
                {
                    return;
                }

                ProcessFileManagement(xci);

                if (fileAction.action == FileAction.Trim)
                {
                    XciHelper.UpdateXci(xci);
                }
            }

            if (fileAction.action == FileAction.CompletelyDelete)
            {
                XciHelper.RefreshList();
            }
        }