Skip to content

Commit

Permalink
Worked on scripts
Browse files Browse the repository at this point in the history
  • Loading branch information
joachimmetz committed Mar 19, 2024
1 parent faa3e64 commit 971c7fb
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 42 deletions.
43 changes: 30 additions & 13 deletions scripts/controlpanel_items.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@

from winregrc import controlpanel_items
from winregrc import output_writers
from winregrc import volume_scanner
from winregrc import versions
from winregrc import volume_scanner


class StdoutWriter(output_writers.StdoutOutputWriter):
Expand All @@ -21,7 +21,6 @@ class StdoutWriter(output_writers.StdoutOutputWriter):
def WriteHeader(self):
"""Writes the header to stdout."""
print('# winreg-kb controlpanel items definitions')
print('---')

def WriteKnownFolder(self, control_panel_item, windows_versions):
"""Writes the control panel item to stdout.
Expand All @@ -30,14 +29,19 @@ def WriteKnownFolder(self, control_panel_item, windows_versions):
control_panel_item (KnownFolder): the control panel item.
windows_versions (list[str]): the Windows versions.
"""
print('---')
print(f'identifier: "{control_panel_item.identifier:s}"')
if control_panel_item.module_name:
print(f'module_name: "{control_panel_item.module_name:s}"')

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

windows_versions = ', '.join([f'"{version:s}"' for version in sorted(
windows_versions, key=self._WINDOWS_VERSIONS_KEY_FUNCTION)])
print(f'windows_versions: [{windows_versions:s}]')
print('---')


def Main():
Expand Down Expand Up @@ -114,19 +118,32 @@ def Main():
# TODO: determine Windows version from source.
windows_version = source_definition['windows_version']

for control_panel_item in collector_object.Collect(scanner.registry):
# TODO: compare existing control panel item.
control_panel_item_per_identifier[
control_panel_item.identifier] = control_panel_item

if control_panel_item.identifier not in (
for item in collector_object.Collect(scanner.registry):
# TODO: compare attributes with existing item.
existing_item = control_panel_item_per_identifier.get(
item.identifier, None)

# Ignore a module name that is the same as the identifier.
if (item.module_name and
item.module_name.lower() == item.identifier):
item.module_name = None

if not existing_item:
control_panel_item_per_identifier[item.identifier] = item
elif not existing_item.module_name:
existing_item.module_name = item.module_name
elif (item.module_name and
item.module_name != existing_item.module_name and
item.module_name not in existing_item.alternate_module_names):
existing_item.alternate_module_names.append(item.module_name)

if item.identifier not in (
windows_versions_per_control_panel_item):
windows_versions_per_control_panel_item[
control_panel_item.identifier] = []
windows_versions_per_control_panel_item[item.identifier] = []

if windows_version:
windows_versions_per_control_panel_item[
control_panel_item.identifier].append(windows_version)
windows_versions_per_control_panel_item[item.identifier].append(
windows_version)

if not control_panel_item_per_identifier:
print('No control panel items found.')
Expand Down
24 changes: 18 additions & 6 deletions scripts/knownfolders.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,18 @@

from winregrc import knownfolders
from winregrc import output_writers
from winregrc import versions
from winregrc import volume_scanner


class StdoutWriter(output_writers.StdoutOutputWriter):
"""Stdout output writer."""

_WINDOWS_VERSIONS_KEY_FUNCTION = versions.WindowsVersions.KeyFunction

def WriteHeader(self):
"""Writes the header to stdout."""
print('# winreg-kb knownfolder definitions')
print('---')

def WriteKnownFolder(self, known_folder, windows_versions):
"""Writes the known folder to stdout.
Expand All @@ -27,6 +29,7 @@ def WriteKnownFolder(self, known_folder, windows_versions):
known_folder (KnownFolder): the known folder.
windows_versions (list[str]): the Windows versions.
"""
print('---')
print(f'identifier: "{known_folder.identifier:s}"')
# TODO: escape \ in name
print(f'name: "{known_folder.name:s}"')
Expand All @@ -35,10 +38,9 @@ def WriteKnownFolder(self, known_folder, windows_versions):
# TODO: escape \ in localize name
print(f'localized_name: "{known_folder.localized_name:s}"')

windows_versions = ', '.join([
f'"{version:s}"' for version in sorted(windows_versions)])
windows_versions = ', '.join([f'"{version:s}"' for version in sorted(
windows_versions, key=self._WINDOWS_VERSIONS_KEY_FUNCTION)])
print(f'windows_versions: [{windows_versions:s}]')
print('---')


def Main():
Expand Down Expand Up @@ -115,8 +117,18 @@ def Main():
windows_version = source_definition['windows_version']

for known_folder in collector_object.Collect(scanner.registry):
# TODO: compare existing known folder
known_folder_per_identifier[known_folder.identifier] = known_folder
# TODO: compare attributes with existing with known folder.
existing_known_folder = known_folder_per_identifier.get(
known_folder.identifier, None)

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)

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 scripts/shellfolders.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,18 @@

from winregrc import output_writers
from winregrc import shellfolders
from winregrc import versions
from winregrc import volume_scanner


class StdoutWriter(output_writers.StdoutOutputWriter):
"""Stdout output writer."""

_WINDOWS_VERSIONS_KEY_FUNCTION = versions.WindowsVersions.KeyFunction

def WriteHeader(self):
"""Writes the header to stdout."""
print('# winreg-kb shellfolder definitions')
print('---')

def WriteShellFolder(self, shell_folder, windows_versions):
"""Writes the shell folder to stdout.
Expand All @@ -27,6 +29,7 @@ def WriteShellFolder(self, shell_folder, windows_versions):
shell_folder (WindowsShellFolder): the shell folder.
windows_versions (list[str]): the Windows versions.
"""
print('---')
print(f'identifier: "{shell_folder.identifier:s}"')

if shell_folder.class_name:
Expand All @@ -44,10 +47,9 @@ def WriteShellFolder(self, shell_folder, windows_versions):
f'"{name:s}"' for name in shell_folder.alternate_names])
print(f'alternate_names: [{alternate_names:s}]')

windows_versions = ', '.join([
f'"{version:s}"' for version in sorted(windows_versions)])
windows_versions = ', '.join([f'"{version:s}"' for version in sorted(
windows_versions, key=self._WINDOWS_VERSIONS_KEY_FUNCTION)])
print(f'windows_versions: [{windows_versions:s}]')
print('---')


def Main():
Expand Down Expand Up @@ -125,8 +127,7 @@ def Main():
windows_version = source_definition['windows_version']

for shell_folder in collector_object.Collect(scanner.registry):
# TODO: compare existing shell folder
# TODO: track multiple names
# TODO: compare attributes with existing with shell folder.
existing_shell_folder = shell_folder_per_identifier.get(
shell_folder.identifier, None)

Expand Down
2 changes: 2 additions & 0 deletions winregrc/controlpanel_items.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ class ControlPanelItem(object):
"""Control panel item.
Attributes:
alternate_module_names (list[str]): alternate module names.
identifier (str): identifier.
module_name (str): module name.
"""
Expand All @@ -20,6 +21,7 @@ def __init__(self, identifier, module_name):
module_name (str): module name.
"""
super(ControlPanelItem, self).__init__()
self.alternate_module_names = []
self.identifier = identifier
self.module_name = module_name

Expand Down
2 changes: 2 additions & 0 deletions winregrc/knownfolders.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ class KnownFolder(object):
"""Known folder.
Attributes:
alternate_names (list[str]): alternate names.
identifier (str): identifier.
localized_name (str): localized name.
name (str): name.
Expand All @@ -22,6 +23,7 @@ def __init__(self, identifier, name, localized_name):
localized_name (str): localized name.
"""
super(KnownFolder, self).__init__()
self.alternate_names = []
self.identifier = identifier
self.localized_name = localized_name
self.name = name
Expand Down
19 changes: 2 additions & 17 deletions winregrc/shellfolders.py
Original file line number Diff line number Diff line change
@@ -1,31 +1,20 @@
# -*- coding: utf-8 -*-
"""Windows Shell folder collector."""

from acstore.containers import interface as containers_interface
from acstore.containers import manager as containers_manager

from winregrc import interface


class WindowsShellFolder(containers_interface.AttributeContainer):
class WindowsShellFolder(object):
"""Windows Shell folder.
Attributes:
alternate_names (list[str]): alternate names.
class_name (str): class name (CLSID).
identifier (str): identifier (GUID).
name (str): name.
localized_string (str): localized string of the name.
"""

CONTAINER_TYPE = 'windows_shell_folder'

SCHEMA = {
'alternate_names': 'List[str]',
'class_name': 'str',
'identifier': 'str',
'localized_string': 'str',
'name': 'str'}

def __init__(self, identifier=None, localized_string=None):
"""Initializes a Windows Shell folder.
Expand Down Expand Up @@ -135,7 +124,3 @@ def Collect(self, registry):
self._CLASS_IDENTIFIERS_KEY_PATH)
if class_identifiers_key:
yield from self._CollectShellFolders(class_identifiers_key)


containers_manager.AttributeContainersManager.RegisterAttributeContainer(
WindowsShellFolder)

0 comments on commit 971c7fb

Please sign in to comment.