Skip to content

Commit

Permalink
Worked on known folders script
Browse files Browse the repository at this point in the history
  • Loading branch information
joachimmetz committed Mar 20, 2024
1 parent 971c7fb commit bef9338
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 29 deletions.
30 changes: 19 additions & 11 deletions scripts/knownfolders.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,18 @@ def WriteKnownFolder(self, known_folder, windows_versions):
"""
print('---')
print(f'identifier: "{known_folder.identifier:s}"')
# TODO: escape \ in name
print(f'name: "{known_folder.name:s}"')
# TODO: escape \ in display name
print(f'display_name: "{known_folder.display_name:s}"')

if known_folder.localized_name:
# TODO: escape \ in localize name
print(f'localized_name: "{known_folder.localized_name:s}"')
if known_folder.localized_display_name:
# TODO: escape \ in localized display_name
print(
f'localized_display_name: "{known_folder.localized_display_name:s}"')

if known_folder.alternate_display_names:
alternate_display_names = ', '.join([
f'"{name:s}"' for name in known_folder.alternate_display_names])
print(f'alternate_display_names: [{alternate_display_names:s}]')

windows_versions = ', '.join([f'"{version:s}"' for version in sorted(
windows_versions, key=self._WINDOWS_VERSIONS_KEY_FUNCTION)])
Expand Down Expand Up @@ -123,12 +129,14 @@ def Main():

if not existing_known_folder:
known_folder_per_identifier[known_folder.identifier] = known_folder
elif not existing_known_folder.name:
existing_known_folder.name = known_folder.name
elif (known_folder.name and
known_folder.name != existing_known_folder.name and
known_folder.name not in existing_known_folder.alternate_names):
existing_known_folder.alternate_names.append(known_folder.name)
elif not existing_known_folder.display_name:
existing_known_folder.display_name = known_folder.display_name
elif (known_folder.display_name and
known_folder.display_name != existing_known_folder.display_name and
known_folder.display_name not in (
existing_known_folder.alternate_display_names)):
existing_known_folder.alternate_display_names.append(
known_folder.display_name)

if known_folder.identifier not in windows_versions_per_known_folder:
windows_versions_per_known_folder[known_folder.identifier] = []
Expand Down
13 changes: 7 additions & 6 deletions tests/knownfolders.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@
class KnownFoldersCollectorTest(shared_test_lib.BaseTestCase):
"""Tests for the Windows known folders collector."""

_DISPLAY_NAME = 'Downloads'
_IDENTIFIER = '374de290-123f-4565-9164-39c4925e467b'
_LOCALIZED_NAME = '@%SystemRoot%\\system32\\shell32.dll,-21798'
_NAME = 'Downloads'
_LOCALIZED_DISPLAY_NAME = '@%SystemRoot%\\system32\\shell32.dll,-21798'

def _CreateTestRegistry(self):
"""Creates Registry keys and values for testing.
Expand All @@ -38,12 +38,12 @@ def _CreateTestRegistry(self):
subkey = dfwinreg_fake.FakeWinRegistryKey(self._IDENTIFIER)
registry_key.AddSubkey(self._IDENTIFIER, subkey)

value_data = self._NAME.encode('utf-16-le')
value_data = self._DISPLAY_NAME.encode('utf-16-le')
registry_value = dfwinreg_fake.FakeWinRegistryValue(
'Name', data=value_data, data_type=dfwinreg_definitions.REG_SZ)
subkey.AddValue(registry_value)

value_data = self._LOCALIZED_NAME.encode('utf-16-le')
value_data = self._LOCALIZED_DISPLAY_NAME.encode('utf-16-le')
registry_value = dfwinreg_fake.FakeWinRegistryValue(
'LocalizedName', data=value_data,
data_type=dfwinreg_definitions.REG_SZ)
Expand All @@ -66,9 +66,10 @@ def testCollect(self):

known_folder = test_results[0]
self.assertIsNotNone(known_folder)
self.assertEqual(known_folder.display_name, self._DISPLAY_NAME)
self.assertEqual(known_folder.identifier, self._IDENTIFIER)
self.assertEqual(known_folder.name, self._NAME)
self.assertEqual(known_folder.localized_name, self._LOCALIZED_NAME)
self.assertEqual(
known_folder.localized_display_name, self._LOCALIZED_DISPLAY_NAME)

def testCollectEmpty(self):
"""Tests the Collect function on an empty Registry."""
Expand Down
24 changes: 12 additions & 12 deletions winregrc/knownfolders.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,25 +8,25 @@ class KnownFolder(object):
"""Known folder.
Attributes:
alternate_names (list[str]): alternate names.
alternate_display_names (list[str]): alternate display names.
identifier (str): identifier.
localized_name (str): localized name.
name (str): name.
localized_display_name (str): localized display name.
display_name (str): display name.
"""

def __init__(self, identifier, name, localized_name):
def __init__(self, identifier, display_name, localized_display_name):
"""Initializes a known folder.
Args:
identifier (str): identifier.
name (str): name.
localized_name (str): localized name.
display_name (str): display name.
localized_display_name (str): localized display name.
"""
super(KnownFolder, self).__init__()
self.alternate_names = []
self.alternate_display_names = []
self.identifier = identifier
self.localized_name = localized_name
self.name = name
self.localized_display_name = localized_display_name
self.display_name = display_name


class KnownFoldersCollector(interface.WindowsRegistryKeyCollector):
Expand All @@ -48,10 +48,10 @@ def _CollectKnownFolders(self, folder_descriptions_key):
"""
for subkey in folder_descriptions_key.GetSubkeys():
identifier = subkey.name.lower()
name = self._GetValueFromKey(subkey, 'Name')
localized_name = self._GetValueFromKey(subkey, 'LocalizedName')
display_name = self._GetValueFromKey(subkey, 'Name')
localized_display_name = self._GetValueFromKey(subkey, 'LocalizedName')

yield KnownFolder(identifier, name, localized_name)
yield KnownFolder(identifier, display_name, localized_display_name)

def Collect(self, registry):
"""Collects Windows known folders.
Expand Down

0 comments on commit bef9338

Please sign in to comment.