static void ShowWindow()
    {
        ImportHistoryWindow window = CreateInstance <ImportHistoryWindow>();

        window.titleContent = new GUIContent("Import History");
        window.Show();
    }
    private static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
    {
        ImportHistoryWindow.TryRead();


        //Ignores massive operations
        const int MAX_COUNT = 100;
        int       count     = deletedAssets.Length + movedAssets.Length + importedAssets.Length;

        if (count > MAX_COUNT)
        {
            ignores.Clear();
            return;
        }


        for (int ii = 0; ii < deletedAssets.Length; ii++)
        {
            ImportHistoryWindow.Remove(deletedAssets[ii]);
        }
        for (int ii = 0; ii < movedFromAssetPaths.Length; ii++)
        {
            ImportHistoryWindow.Remove(movedFromAssetPaths[ii]);
        }

        void Add(string path)
        {
            if (!ignores.Remove(path))
            {
                ImportHistoryWindow.Add(path, false);
            }
        }

        for (int ii = 0; ii < movedAssets.Length; ii++)
        {
            var moved = movedAssets[ii];

            bool imported = false; //Renaming an asset in Unity will call both movedAssets and importedAssets, but that creates a problem for the ignores
            for (int iii = 0; iii < importedAssets.Length; iii++)
            {
                if (importedAssets[iii] == moved)
                {
                    imported = true;
                    break;
                }
            }

            if (!imported)
            {
                Add(moved);
            }
        }
        for (int ii = 0; ii < importedAssets.Length; ii++)
        {
            Add(importedAssets[ii]);
        }

        ImportHistoryWindow.TryWrite();
    }