Example #1
0
        void InitiateDeleteSelectedInAssetList(BuildInfo buildReportToDisplay, BuildReportTool.AssetList listToDeleteFrom)
        {
            if (listToDeleteFrom.IsNothingSelected)
            {
                return;
            }


            BuildReportTool.SizePart[] all = listToDeleteFrom.All;

            int numOfFilesRequestedToDelete = listToDeleteFrom.GetSelectedCount();
            int numOfFilesToDelete          = numOfFilesRequestedToDelete;
            int systemDeletionFileCount     = 0;
            int brtFilesSelectedForDelete   = 0;


            // filter out files that shouldn't be deleted
            // and identify unrecoverable files
            for (int n = 0, len = all.Length; n < len; ++n)
            {
                BuildReportTool.SizePart b = all[n];
                bool isThisFileToBeDeleted = listToDeleteFrom.InSumSelection(b);

                if (isThisFileToBeDeleted)
                {
                    if (BuildReportTool.Util.IsFileInBuildReportFolder(b.Name) &&
                        !BuildReportTool.Util.IsUselessFile(b.Name))
                    {
                        //Debug.Log("BRT file? " + b.Name);
                        --numOfFilesToDelete;
                        ++brtFilesSelectedForDelete;
                    }
                    else if (BuildReportTool.Util.HaveToUseSystemForDelete(b.Name))
                    {
                        ++systemDeletionFileCount;
                    }
                }
            }

            if (numOfFilesToDelete <= 0)
            {
                if (brtFilesSelectedForDelete > 0)
                {
                    EditorApplication.Beep();
                    EditorUtility.DisplayDialog("Can't delete!",
                                                "Take note that for safety, Build Report Tool assets themselves will not be included for deletion.",
                                                "OK");
                }

                return;
            }


            // prepare warning message for user

            bool deletingSystemFilesOnly = (systemDeletionFileCount == numOfFilesToDelete);
            bool deleteIsRecoverable     = !deletingSystemFilesOnly;

            string plural = "";

            if (numOfFilesToDelete > 1)
            {
                plural = "s";
            }

            string message;

            if (numOfFilesRequestedToDelete != numOfFilesToDelete)
            {
                message = "Among " + numOfFilesRequestedToDelete + " file" + plural + " requested to be deleted, only " +
                          numOfFilesToDelete + " will be deleted.";
            }
            else
            {
                message = "This will delete " + numOfFilesToDelete + " asset" + plural + " in your project.";
            }

            // add warning about BRT files that are skipped
            if (brtFilesSelectedForDelete > 0)
            {
                message += "\n\nTake note that for safety, " + brtFilesSelectedForDelete + " file" +
                           ((brtFilesSelectedForDelete > 1) ? "s" : "") +
                           " found to be Build Report Tool assets are not included for deletion.";
            }

            // add warning about unrecoverable files
            if (systemDeletionFileCount > 0)
            {
                if (deletingSystemFilesOnly)
                {
                    message += "\n\nThe deleted file" + plural + " will not be recoverable from the " +
                               BuildReportTool.Util.NameOfOSTrashFolder + ", unless you have your own backup.";
                }
                else
                {
                    message += "\n\nAmong the " + numOfFilesToDelete + " file" + plural + " for deletion, " +
                               systemDeletionFileCount + " will not be recoverable from the " +
                               BuildReportTool.Util.NameOfOSTrashFolder + ", unless you have your own backup.";
                }

                message +=
                    "\n\nThis is a limitation in Unity and .NET code. To ensure deleting will move the files to the " +
                    BuildReportTool.Util.NameOfOSTrashFolder +
                    " instead, delete your files the usual way using your project view.";
            }
            else
            {
                message += "\n\nThe deleted file" + plural + " can be recovered from your " +
                           BuildReportTool.Util.NameOfOSTrashFolder + ".";
            }

            message +=
                "\n\nDeleting a large number of files may take a long time as Unity will rebuild the project's Library folder.\n\nProceed with deleting?";

            EditorApplication.Beep();
            if (!EditorUtility.DisplayDialog("Delete?", message, "Yes", "No"))
            {
                return;
            }

            List <BuildReportTool.SizePart> allList  = new List <BuildReportTool.SizePart>(all);
            List <BuildReportTool.SizePart> toRemove = new List <BuildReportTool.SizePart>(all.Length / 4);

            // finally, delete the files
            int deletedCount = 0;

            for (int n = 0, len = allList.Count; n < len; ++n)
            {
                BuildReportTool.SizePart b = allList[n];


                bool okToDelete = BuildReportTool.Util.IsUselessFile(b.Name) ||
                                  !BuildReportTool.Util.IsFileInBuildReportFolder(b.Name);

                if (listToDeleteFrom.InSumSelection(b) && okToDelete)
                {
                    // delete this

                    if (BuildReportTool.Util.ShowFileDeleteProgress(deletedCount, numOfFilesToDelete, b.Name,
                                                                    deleteIsRecoverable))
                    {
                        return;
                    }

                    BuildReportTool.Util.DeleteSizePartFile(b);
                    toRemove.Add(b);
                    ++deletedCount;
                }
            }

            EditorUtility.ClearProgressBar();


            // refresh the asset lists
            allList.RemoveAll(i => toRemove.Contains(i));
            BuildReportTool.SizePart[] allWithRemoved = allList.ToArray();

            // recreate per category list (maybe just remove from existing per category lists instead?)
            BuildReportTool.SizePart[][] perCategoryOfList =
                BuildReportTool.ReportGenerator.SegregateAssetSizesPerCategory(allWithRemoved,
                                                                               buildReportToDisplay.FileFilters);

            listToDeleteFrom.Reinit(allWithRemoved, perCategoryOfList,
                                    IsShowingUsedAssets
                                        ? BuildReportTool.Options.NumberOfTopLargestUsedAssetsToShow
                                        : BuildReportTool.Options.NumberOfTopLargestUnusedAssetsToShow);
            listToDeleteFrom.ClearSelection();


            // print info about the delete operation to console
            string finalMessage = string.Format("{0} file{1} removed from your project.", deletedCount.ToString(), plural);

            if (deleteIsRecoverable)
            {
                finalMessage += " They can be recovered from your " + BuildReportTool.Util.NameOfOSTrashFolder + ".";
            }

            EditorApplication.Beep();
            EditorUtility.DisplayDialog("Delete successful", finalMessage, "OK");

            Debug.LogWarning(finalMessage);
        }
Example #2
0
        public override void DrawGUI(Rect position, BuildInfo buildReportToDisplay)
        {
            if (!buildReportToDisplay.HasUsedAssets)
            {
                return;
            }



            // init variables to use
            // --------------------------------------------------------------------------

            BuildReportTool.FileFilterGroup fileFilterGroupToUse = buildReportToDisplay.FileFilters;

            if (BuildReportTool.Options.ShouldUseConfiguredFileFilters())
            {
                fileFilterGroupToUse = _configuredFileFilterGroup;
            }

            BuildReportTool.AssetList listToDisplay = GetAssetListToDisplay(buildReportToDisplay);

            //BuildReportTool.SizePart[] assetListToUse = listToDisplay.GetListToDisplay(fileFilterGroupToUse);
            //
            //if (assetListToUse == null || assetListToUse.Length == 0)
            //{
            //	fileFilterGroupToUse.ForceSetSelectedFilterIdx(0);
            //}


            if (listToDisplay == null)
            {
                if (IsShowingUsedAssets)
                {
                    Utility.DrawCentralMessage(position, "No \"Used Assets\" included in this build report.");
                }
                else if (IsShowingUnusedAssets)
                {
                    Utility.DrawCentralMessage(position, "No \"Unused Assets\" included in this build report.");
                }
                return;
            }


            // gui
            // --------------------------------------------------------------------------

            GUILayout.Space(1);

            DrawTopBar(position, buildReportToDisplay, fileFilterGroupToUse);

            if (buildReportToDisplay.HasUsedAssets)
            {
                DrawAssetList(position, listToDisplay, fileFilterGroupToUse, BuildReportTool.Options.AssetListPaginationLength);
            }



            // status bar at bottom
            // --------------------------------------------------------------------------

            GUILayout.Space(20);

            string selectedInfoLabel = string.Format("{0}{1}. {2}{3} ({4}%)				Click on an asset's checkbox to include it in size calculation. Click on the filename to highlight it on your Project window.", Labels.SELECTED_QTY_LABEL, listToDisplay.GetSelectedCount().ToString("N0"), Labels.SELECTED_SIZE_LABEL, listToDisplay.GetReadableSizeOfSumSelection(), listToDisplay.GetPercentageOfSumSelection().ToString("N"));

            GUI.Label(new Rect(0, position.height - 20, position.width, 20), selectedInfoLabel, BuildReportTool.Window.Settings.STATUS_BAR_LABEL_STYLE_NAME);
        }