public static string CreateTemplateIndex(string template, string path, string name = null, string settings = null) { if (settings == null && !SearchDatabaseTemplates.all.ContainsKey(template)) { return(null); } var dirPath = path; var templateContent = settings ?? SearchDatabaseTemplates.all[template]; if (File.Exists(path)) { dirPath = Path.GetDirectoryName(path); if (Selection.assetGUIDs.Length > 1) { path = dirPath; } } if (!Directory.Exists(dirPath)) { Directory.CreateDirectory(dirPath); } var indexFileName = string.IsNullOrEmpty(name) ? Path.GetFileNameWithoutExtension(path) : name; var indexPath = AssetDatabase.GenerateUniqueAssetPath(Path.Combine(dirPath, $"{indexFileName}.index")).Replace("\\", "/"); SearchAnalytics.SendEvent(null, SearchAnalytics.GenericEventType.CreateIndexFromTemplate, template); File.WriteAllText(indexPath, templateContent); return(SearchDatabase.ImportAsset(indexPath)?.path ?? indexPath); }
public override void OnImportAsset(AssetImportContext ctx) { var settings = new SearchDatabase.Settings { type = "asset", options = GetOptions() }; var indexer = SearchDatabase.CreateIndexer(settings); try { indexer.IndexDocument(ctx.assetPath, false); indexer.Finish(removedDocuments: null); var indexArtifactPath = ctx.GetOutputArtifactFilePath($"{(int)options:X}.index".ToLowerInvariant()); using (var fileStream = new FileStream(indexArtifactPath, FileMode.CreateNew, FileAccess.Write, FileShare.None)) indexer.Write(fileStream); ctx.DependsOnSourceAsset(ctx.assetPath); ctx.DependsOnCustomDependency(GetType().GUID.ToString("N")); ctx.DependsOnCustomDependency(nameof(CustomObjectIndexerAttribute)); } catch (Exception ex) { ctx.LogImportError($"Failed to build search index for {ctx.assetPath}\n{ex}"); } }
public override void OnImportAsset(AssetImportContext ctx) { var settings = new SearchDatabase.Settings { type = "asset", options = GetOptions() }; try { var indexer = SearchDatabase.CreateIndexer(settings); try { ctx.DependsOnCustomDependency(GetType().GUID.ToString("N")); ctx.DependsOnCustomDependency(nameof(CustomObjectIndexerAttribute)); indexer.IndexDocument(ctx.assetPath, false); indexer.ApplyUnsorted(); } catch (Exception ex) { ctx.LogImportError($"Failed to build search index for {ctx.assetPath}\n{ex}"); } #if USE_SEARCH_MODULE var indexArtifactPath = ctx.GetOutputArtifactFilePath($"{(int)options:X}.index".ToLowerInvariant()); #else var indexArtifactPath = ctx.GetResultPath($"{(int)options:X}.index".ToLowerInvariant()); #endif using (var fileStream = new FileStream(indexArtifactPath, FileMode.CreateNew, FileAccess.Write, FileShare.Read)) indexer.Write(fileStream); } catch (Exception ex) { ctx.LogImportError(ex.Message); } }
internal static void SetupSearchFirstUse() { if (EditorApplication.isPlayingOrWillChangePlaymode) { return; } if (SearchSettings.onBoardingDoNotAskAgain || Utils.IsRunningTests()) { return; } if (!Utils.IsMainProcess()) { return; } if (!SearchDatabase.Enumerate(SearchDatabase.IndexLocation.assets).Any()) { SearchDatabase.CreateDefaultIndex(); } SearchSettings.onBoardingDoNotAskAgain = true; SearchSettings.Save(); }
internal void OnEnable() { m_DB = (SearchDatabase)target; m_Settings = serializedObject.FindProperty("settings"); m_Settings.isExpanded = true; }