A game about forced loneliness, made by TACStudios
1using System.Collections.Generic;
2using System.IO;
3
4using UnityEditor.VersionControl;
5
6using PlasticGui.WorkspaceWindow.Items;
7using Unity.PlasticSCM.Editor.AssetsOverlays;
8using Unity.PlasticSCM.Editor.AssetsOverlays.Cache;
9using Unity.PlasticSCM.Editor.AssetUtils;
10
11namespace Unity.PlasticSCM.Editor.AssetMenu
12{
13 internal static class AssetsSelection
14 {
15 internal static Asset GetSelectedAsset(
16 string wkPath,
17 AssetList assetList)
18 {
19 if (assetList.Count == 0)
20 return null;
21
22 foreach (Asset asset in assetList)
23 {
24 if (AssetsPath.GetFullPathUnderWorkspace.
25 ForAsset(wkPath, asset.path) == null)
26 continue;
27
28 return asset;
29 }
30
31 return null;
32 }
33
34 internal static string GetSelectedPath(
35 string wkPath,
36 AssetList assetList)
37 {
38 Asset result = GetSelectedAsset(wkPath, assetList);
39
40 if (result == null)
41 return null;
42
43 return Path.GetFullPath(result.path);
44 }
45
46 internal static List<string> GetSelectedPaths(
47 string wkPath,
48 IEnumerable<Asset> assetList)
49 {
50 List<string> result = new List<string>();
51
52 foreach (Asset asset in assetList)
53 {
54 string fullPath = AssetsPath.GetFullPathUnderWorkspace.
55 ForAsset(wkPath, asset.path);
56
57 if (fullPath == null)
58 continue;
59
60 result.Add(fullPath);
61 }
62
63 return result;
64 }
65
66 internal static SelectedPathsGroupInfo GetSelectedPathsGroupInfo(
67 string wkPath,
68 AssetList assetList,
69 IAssetStatusCache statusCache)
70 {
71 SelectedPathsGroupInfo result = new SelectedPathsGroupInfo();
72
73 if (assetList.Count == 0)
74 return result;
75
76 result.IsRootSelected = false;
77 result.IsCheckedoutEverySelected = true;
78 result.IsDirectoryEverySelected = true;
79 result.IsCheckedinEverySelected = true;
80 result.IsChangedEverySelected = true;
81
82 foreach (Asset asset in assetList)
83 {
84 string fullPath = AssetsPath.GetFullPathUnderWorkspace.
85 ForAsset(wkPath, asset.path);
86
87 if (fullPath == null)
88 continue;
89
90 if (MetaPath.IsMetaPath(fullPath))
91 fullPath = MetaPath.GetPathFromMetaPath(fullPath);
92
93 AssetStatus status = statusCache.GetStatus(fullPath);
94 string assetName = GetAssetName(asset);
95
96 result.IsCheckedoutEverySelected &= ClassifyAssetStatus.IsCheckedOut(status);
97 result.IsDirectoryEverySelected &= asset.isFolder;
98 result.IsCheckedinEverySelected &= false; // TODO: not implemented yet
99 result.IsChangedEverySelected &= false; // TODO: not implemented yet
100
101 result.IsAnyDirectorySelected |= asset.isFolder;
102 result.IsAnyPrivateSelected |= ClassifyAssetStatus.IsPrivate(status) || ClassifyAssetStatus.IsIgnored(status);
103
104 result.FilterInfo.IsAnyIgnoredSelected |= ClassifyAssetStatus.IsIgnored(status);
105 result.FilterInfo.IsAnyHiddenChangedSelected |= ClassifyAssetStatus.IsHiddenChanged(status);
106
107 result.SelectedCount++;
108
109 if (result.SelectedCount == 1)
110 {
111 result.FirstIsControlled = ClassifyAssetStatus.IsControlled(status);
112 result.FirstIsDirectory = asset.isFolder;
113
114 result.FilterInfo.CommonName = assetName;
115 result.FilterInfo.CommonExtension = Path.GetExtension(assetName);
116 result.FilterInfo.CommonFullPath = asset.assetPath;
117 continue;
118 }
119
120 if (result.FilterInfo.CommonName != assetName)
121 result.FilterInfo.CommonName = null;
122
123 if (result.FilterInfo.CommonExtension != Path.GetExtension(assetName))
124 result.FilterInfo.CommonExtension = null;
125
126 if (result.FilterInfo.CommonFullPath != asset.assetPath)
127 result.FilterInfo.CommonFullPath = null;
128 }
129
130 return result;
131 }
132
133 static string GetAssetName(Asset asset)
134 {
135 if (asset.isFolder)
136 return Path.GetFileName(Path.GetDirectoryName(asset.path));
137
138 return asset.fullName;
139 }
140 }
141}