Skip to content

Commit

Permalink
Add store search source
Browse files Browse the repository at this point in the history
  • Loading branch information
Nice3point committed Sep 5, 2024
1 parent c0fb599 commit 9564ad1
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 20 deletions.
62 changes: 62 additions & 0 deletions source/DependenciesReport/AddinUtilities.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
using System.Xml.Linq;

namespace DependenciesReport;

public static class AddinUtilities
{
public static IGrouping<string, string>[] GetAddinLocations()
{
var userFolder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
var machineFolder = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);

var userAddinsPath = Path.Combine(userFolder, "Autodesk", "Revit", "Addins");
var machineAddinsPath = Path.Combine(machineFolder, "Autodesk", "Revit", "Addins");
var storeAddinsPath = Path.Combine(machineFolder, "Autodesk", "ApplicationPlugins");

return Directory.EnumerateFiles(userAddinsPath, "*.addin", SearchOption.AllDirectories)
.Union(Directory.EnumerateFiles(machineAddinsPath, "*.addin", SearchOption.AllDirectories))
.Union(Directory.EnumerateFiles(storeAddinsPath, "*.addin", SearchOption.AllDirectories))
.GroupBy(file => Path.GetFileName(Path.GetDirectoryName(file))!)
.ToArray();
}

public static Dictionary<string, string> GetAddinDirectories(IGrouping<string, string> addinLocation)
{
var addinDirectories = new Dictionary<string, string>();

foreach (var manifest in addinLocation)
{
try
{
var document = XDocument.Load(manifest);

var addInElement = document.Descendants("AddIn").FirstOrDefault();
if (addInElement == null) continue;

var nameElement = addInElement.Element("Name");
var name = nameElement != null ? nameElement.Value : Path.GetFileNameWithoutExtension(manifest);

var assemblyElement = addInElement.Element("Assembly");
if (assemblyElement == null) continue;

var assemblyPath = assemblyElement.Value;
if (!Path.IsPathRooted(assemblyPath))
{
var directoryName = Path.GetDirectoryName(manifest)!;
assemblyPath = Path.Combine(directoryName, assemblyPath);
}

if (File.Exists(assemblyPath))
{
addinDirectories[name] = Path.GetDirectoryName(assemblyPath)!;
}
}
catch
{
Console.WriteLine($"Bad file: {manifest}");
}
}

return addinDirectories;
}
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/UserDictionary/Words/=addin/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=addins/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@ namespace DependenciesReport;

public static class DependenciesTools
{
public static List<DirectoryDescriptor> CreateDependenciesMap(string[] directories)
public static List<DirectoryDescriptor> CreateDependenciesMap(Dictionary<string, string> addinDirectories)
{
var dependenciesMap = new List<DirectoryDescriptor>();

foreach (var directory in directories)
foreach (var directoryMetadata in addinDirectories)
{
var directoryDescriptor = new DirectoryDescriptor(Path.GetFileName(directory), directory);
var assemblies = Directory.GetFiles(directory, "*.dll");
var directoryDescriptor = new DirectoryDescriptor(directoryMetadata.Key, directoryMetadata.Value);
var assemblies = Directory.GetFiles(directoryMetadata.Value, "*.dll");

foreach (var assembly in assemblies)
{
Expand All @@ -26,7 +26,7 @@ public static List<DirectoryDescriptor> CreateDependenciesMap(string[] directori
}
catch
{
// ignored
Console.WriteLine($"Bad assembly: {assembly}");
}
}

Expand Down
20 changes: 5 additions & 15 deletions source/DependenciesReport/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,19 @@
using DependenciesReport;
using DependenciesReport.Models;

var userFolder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
var machineFolder = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
var userAddinsPath = Path.Combine(userFolder, "Autodesk", "Revit", "Addins");
var machineAddinsPath = Path.Combine(machineFolder, "Autodesk", "Revit", "Addins");
var yearsGroups = Directory.GetDirectories(userAddinsPath)
.Union(Directory.GetDirectories(machineAddinsPath))
.GroupBy(Path.GetFileName)
.ToArray();

var addinLocations = AddinUtilities.GetAddinLocations();
var reportName = $"DependenciesReport-{DateTime.Now.ToString("yyyy-MM-dd", DateTimeFormatInfo.InvariantInfo)}.txt";
var reportPath = Path.Combine(Path.GetTempPath(), reportName);
var summaryWriter = new SummaryWriter(reportPath);

var dependenciesMaps = new List<List<DirectoryDescriptor>>();
foreach (var yearsGroup in yearsGroups)
foreach (var addinLocation in addinLocations)
{
if (yearsGroup.Key is null) continue;

summaryWriter.Write($"Revit version: {Path.GetFileName(yearsGroup.Key)}");
summaryWriter.Write($"Revit version: {Path.GetFileName(addinLocation.Key)}");
summaryWriter.WriteLine();

var directories = yearsGroup.SelectMany(Directory.GetDirectories).ToArray();
var dependenciesMap = DependenciesTools.CreateDependenciesMap(directories);
var addinDirectories = AddinUtilities.GetAddinDirectories(addinLocation);
var dependenciesMap = DependenciesTools.CreateDependenciesMap(addinDirectories);
var dependenciesTable = TableFormater.CreateReportTable(dependenciesMap);

if (dependenciesTable.Rows.Count == 0)
Expand Down

0 comments on commit 9564ad1

Please sign in to comment.