private static string[] FileExtension(SearchType flags)
        {
            List <string> extensions = new List <string>(4);

            if (flags.HasFlag(SearchType.Prefab))
            {
                extensions.Add("prefab");
            }
            if (flags.HasFlag(SearchType.Scene))
            {
                extensions.Add("unity");
            }
            if (flags.HasFlag(SearchType.Script))
            {
                extensions.Add("cs");
            }
            if (flags.HasFlag(SearchType.Asset))
            {
                extensions.Add("asset");
            }
            if (flags.HasFlag(SearchType.Material))
            {
                extensions.Add("mat");
            }
            return(extensions.ToArray());
        }
Пример #2
0
        /// <inheritdoc />
        public async Task <IList <object> > Search(
            string query,
            SearchType searchTypes = SearchType.Album | SearchType.Artist | SearchType.Playlist | SearchType.Track,
            string market          = "",
            int offset             = 0,
            int resultLimit        = 100)
        {
            var searchTypeString = "&type=";

            if (searchTypes.HasFlag(SearchType.Album))
            {
                searchTypeString += "album,";
            }
            if (searchTypes.HasFlag(SearchType.Artist))
            {
                searchTypeString += "artist,";
            }
            if (searchTypes.HasFlag(SearchType.Playlist))
            {
                searchTypeString += "playlist,";
            }
            if (searchTypes.HasFlag(SearchType.Track))
            {
                searchTypeString += "track,";
            }
            searchTypeString = searchTypeString.Remove(searchTypeString.Length - 1);

            var r = await ApiClient.GetAsync <SearchResult>(
                MakeUri($"search?q={query}{searchTypeString}&offset={offset}{AddMarketCode("&", market)}"),
                this.Token);

            if (r.Response is SearchResult res)
            {
                var result = new List <object>();
                try
                {
                    var artists   = res.Artists.LoadToList(this.Token);
                    var albums    = res.Albums.LoadToList(this.Token);
                    var playlists = res.Playlists.LoadToList(this.Token);
                    var tracks    = res.Tracks.LoadToList(this.Token);

                    // Await all tasks finished...
                    await Task.WhenAll(artists, albums, playlists, tracks);

                    result.AddRange(artists.Result);
                    result.AddRange(albums.Result);
                    result.AddRange(playlists.Result);
                    result.AddRange(tracks.Result);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }
                return(result);
            }
            return(new List <object>());
        }
Пример #3
0
        /// <inheritdoc />
        public async Task <SearchResult> Search(
            string query,
            SearchType searchTypes,
            string market,
            int offset,
            int resultLimit)
        {
            var searchTypeString = string.Empty;

            if (searchTypes.HasFlag(SearchType.Album))
            {
                searchTypeString += "album,";
            }
            if (searchTypes.HasFlag(SearchType.Artist))
            {
                searchTypeString += "artist,";
            }
            if (searchTypes.HasFlag(SearchType.Playlist))
            {
                searchTypeString += "playlist,";
            }
            if (searchTypes.HasFlag(SearchType.Track))
            {
                searchTypeString += "track,";
            }

            var r = await ApiClient.GetAsync <ApiSearchResult>(
                MakeUri(
                    "search",
                    ("q", query.Replace(' ', '+')),
                    ("type", searchTypeString.Remove(searchTypeString.Length - 1)),
                    ("offset", offset.ToString()),
                    ("market", market)),
                this.Token);

            if (r.Response is ApiSearchResult res)
            {
                var result = new SearchResult
                {
                    Albums    = res.Albums.Items,
                    Playlists = res.Playlists.Items,
                    Tracks    = res.Tracks.Items,
                    Artists   = res.Artists.Items
                };

                return(result);
            }
            return(new SearchResult());
        }
Пример #4
0
        public Searcher(Object subject, SearchType type)
        {
            this.Subject    = subject;
            this.SearchType = type;
            this.Name       = subject?.name;

            //If we are a MonoBehaviour or a ScriptableObject, we want to get hte base script
            if (Subject is MonoBehaviour monoBehaviour)
            {
                Subject = MonoScript.FromMonoBehaviour(monoBehaviour);
            }
            else if (Subject is ScriptableObject scriptableObject)
            {
                Subject = MonoScript.FromScriptableObject(scriptableObject);
            }

            //If the subject is a MonoScript and we have the search script
            if (type.HasFlag(SearchType.Script) && Subject is MonoScript)
            {
                _analyticEnumerator = AnalyticSearch.FindReferencesEnumerator(Subject, _analyticResults);
            }

            //If we are searching assets
            if (type != SearchType.None)
            {
                _assetEnumerator = AssetSearch.FindAssetsEnumerator(Subject, type, _assetResults);
            }

            //Update our asset path
            this.AssetPath = AssetDatabase.GetAssetPath(Subject);
        }
Пример #5
0
        private string GetTypes(SearchType type)
        {
            var types = new List <string>();

            if (type.HasFlag(SearchType.Artist))
            {
                types.Add("artist");
            }
            if (type.HasFlag(SearchType.Album))
            {
                types.Add("album");
            }
            if (type.HasFlag(SearchType.Playlist))
            {
                types.Add("playlist");
            }
            if (type.HasFlag(SearchType.Track))
            {
                types.Add("track");
            }
            return(string.Join(",", types));
        }
Пример #6
0
        public static string GetSearchValue(this SearchType en, String separator)
        {
            IEnumerable <StringAttribute> attributes =
                Enum.GetValues(typeof(SearchType))
                .Cast <SearchType>()
                .Where(v => en.HasFlag(v))
                .Select(v => typeof(SearchType).GetRuntimeField(v.ToString()))
                .Select(f => f.GetCustomAttributes(typeof(StringAttribute), false).FirstOrDefault())
                .Cast <StringAttribute>();

            var list = attributes.Select(x => x.Text).ToList();

            return(string.Join(separator, list));
        }
Пример #7
0
        public static string GetSearchValue(this SearchType en, String separator)
        {
            IEnumerable <StringAttribute> attributes =
                Enum.GetValues(typeof(SearchType))
                .Cast <SearchType>()
                .Where(v => en.HasFlag(v))
                .Select(v => typeof(SearchType).GetField(v.ToString()))
                .Select(f => f.GetCustomAttributes(typeof(StringAttribute), false)[0])
                .Cast <StringAttribute>();

            List <String> list = new List <String>();

            attributes.ToList().ForEach((element) => list.Add(element.Text));
            return(string.Join(" ", list));
        }
        /// <summary>
        /// Finds all assets of the type.
        /// </summary>
        /// <param name="asset"></param>
        /// <param name="filter"></param>
        /// <returns></returns>
        private static IEnumerable <AssetResult> FindAssets(SearchType filter)
        {
            var assetPaths = AssetDatabase.GetAllAssetPaths();

            foreach (var path in assetPaths)
            {
                //Validate its folder
                if (!path.StartsWith("Assets/"))
                {
                    continue;
                }

                //Validate its search
                string extension = Path.GetExtension(path);
                if (extension.Length <= 1)
                {
                    continue;
                }
                extension = extension.Substring(1);

                //Get the type
                SearchType searchType;
                switch (extension)
                {
                default:
                    searchType = SearchType.Files;
                    break;

                case "mat":
                    searchType = SearchType.Material;
                    break;

                case "prefab":
                    searchType = SearchType.Prefab;
                    break;

                case "unity":
                    searchType = SearchType.Scene;
                    break;

                case "cs":
                    searchType = SearchType.Script;
                    break;

                case "asset":
                    searchType = SearchType.Asset;
                    break;
                }

                //validate the type
                if (!filter.HasFlag(SearchType.Files) && !filter.HasFlag(searchType))
                {
                    continue;
                }

                //Dont load textures, sound or lighting
                var assetType = AssetDatabase.GetMainAssetTypeAtPath(path);

                //return scene
                switch (searchType)
                {
                default:
                    yield return(new AssetResult()
                    {
                        assetPath = path,
                        assetType = assetType,
                        searchableType = searchType
                    });

                    break;

                //Return scene
                case SearchType.Scene:
                    yield return(new SceneResult()
                    {
                        assetPath = path,
                        assetType = assetType,
                        searchableType = searchType
                    });

                    break;

                //Return prefab
                case SearchType.Prefab:
                    yield return(new PrefabResult()
                    {
                        assetPath = path,
                        assetType = assetType,
                        searchableType = searchType
                    });

                    break;

                //Return Script
                case SearchType.Script:
                    yield return(new ScriptResult()
                    {
                        assetPath = path,
                        assetType = assetType,
                        searchableType = searchType
                    });

                    break;
                }
            }
        }