TonieToolbox 0.6.0a3__py3-none-any.whl → 0.6.0a5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/python3
1
2
  """
2
3
  Module for generating intelligent output filenames for TonieToolbox.
3
4
  """
@@ -8,7 +9,7 @@ from pathlib import Path
8
9
  from typing import List, Optional
9
10
  from .logger import get_logger
10
11
 
11
- logger = get_logger('filename_generator')
12
+ logger = get_logger(__name__)
12
13
 
13
14
  def sanitize_filename(filename: str) -> str:
14
15
  """
@@ -89,4 +90,52 @@ def guess_output_filename(input_filename: str, input_files: list[str] = None) ->
89
90
  except ValueError:
90
91
  # Files might be on different drives
91
92
  logger.debug("Could not determine common path, using generic name")
92
- return "tonie_collection"
93
+ return "tonie_collection"
94
+
95
+ def apply_template_to_path(template, metadata):
96
+ """
97
+ Apply metadata to a path template and ensure the path is valid.
98
+
99
+ Args:
100
+ template: String template with {tag} placeholders
101
+ metadata: Dictionary of tag values
102
+
103
+ Returns:
104
+ Formatted path with placeholders replaced by actual values
105
+ """
106
+ if not template or not metadata:
107
+ return None
108
+
109
+ try:
110
+ # Replace any tags in the path with their values
111
+ formatted_path = template
112
+ for tag, value in metadata.items():
113
+ if value:
114
+ # Sanitize value for use in path
115
+ safe_value = re.sub(r'[<>:"|?*]', '_', str(value))
116
+ # Replace forward slashes with appropriate character, but NOT hyphens
117
+ safe_value = safe_value.replace('/', ' - ')
118
+ # Remove leading/trailing whitespace and dots
119
+ safe_value = safe_value.strip('. \t')
120
+ if not safe_value:
121
+ safe_value = "unknown"
122
+
123
+ placeholder = '{' + tag + '}'
124
+ formatted_path = formatted_path.replace(placeholder, safe_value)
125
+
126
+ # Check if there are any remaining placeholders
127
+ if re.search(r'{[^}]+}', formatted_path):
128
+ return None # Some placeholders couldn't be filled
129
+
130
+ # Normalize path separators for the OS
131
+ formatted_path = os.path.normpath(formatted_path)
132
+ return formatted_path
133
+ except Exception as e:
134
+ logger.error(f"Error applying template to path: {e}")
135
+ return None
136
+
137
+ def ensure_directory_exists(file_path):
138
+ """Create the directory structure for a given file path if it doesn't exist."""
139
+ directory = os.path.dirname(file_path)
140
+ if directory:
141
+ os.makedirs(directory, exist_ok=True)
@@ -1,10 +1,12 @@
1
+ #!/usr/bin/python3
1
2
  import platform
3
+ import os
4
+ import subprocess
2
5
  from .logger import get_logger
3
6
 
4
7
  logger = get_logger(__name__)
5
8
 
6
9
  def handle_integration(args):
7
- import platform
8
10
  if platform.system() == 'Windows':
9
11
  from .integration_windows import WindowsClassicContextMenuIntegration as ContextMenuIntegration
10
12
  if args.install_integration:
@@ -48,19 +50,18 @@ def handle_integration(args):
48
50
 
49
51
  def handle_config():
50
52
  """Opens the configuration file in the default text editor."""
51
- import os
52
- import platform
53
- import subprocess
54
-
55
53
  config_path = os.path.join(os.path.expanduser("~"), ".tonietoolbox", "config.json")
56
-
57
54
  if not os.path.exists(config_path):
58
55
  logger.info(f"Configuration file not found at {config_path}.")
59
56
  logger.info("Creating a new configuration file. Using --install-integration will create a new config file.")
60
57
  return
61
58
  if platform.system() == "Windows":
59
+ from .integration_windows import WindowsClassicContextMenuIntegration as ContextMenuIntegration
60
+ ContextMenuIntegration._apply_config_template()
62
61
  os.startfile(config_path)
63
62
  elif platform.system() == "Darwin":
63
+ from .integration_macos import MacOSContextMenuIntegration as ContextMenuIntegration
64
+ ContextMenuIntegration._apply_config_template()
64
65
  subprocess.call(["open", config_path])
65
66
  elif platform.system() == "Linux":
66
67
  subprocess.call(["xdg-open", config_path])
@@ -1,13 +1,19 @@
1
+ #!/usr/bin/python3
2
+ """
3
+ Integration for MacOS Quick Actions (Services) for TonieToolbox.
4
+ This module provides functionality to create and manage Quick Actions.
5
+ """
1
6
  import os
2
7
  import sys
3
8
  import json
4
9
  import plistlib
5
10
  import subprocess
6
11
  from pathlib import Path
7
- from .constants import SUPPORTED_EXTENSIONS, CONFIG_TEMPLATE,UTI_MAPPINGS
12
+ from .constants import SUPPORTED_EXTENSIONS, CONFIG_TEMPLATE,UTI_MAPPINGS,ICON_BASE64
13
+ from .artwork import base64_to_ico
8
14
  from .logger import get_logger
9
15
 
10
- logger = get_logger('integration_macos')
16
+ logger = get_logger(__name__)
11
17
 
12
18
  class MacOSContextMenuIntegration:
13
19
  """
@@ -112,7 +118,7 @@ class MacOSContextMenuIntegration:
112
118
  cmd += ' read -p "Press any key to close this window..." key\n'
113
119
  cmd += ' exit 1\n'
114
120
  cmd += 'fi\n\n'
115
- else:
121
+ else:
116
122
  # For regular file operations, handle paths correctly
117
123
  cmd += '# Handle file paths correctly - try multiple methods for macOS\n'
118
124
  cmd += 'FILE_PATH=""\n'
@@ -178,7 +184,8 @@ class MacOSContextMenuIntegration:
178
184
  # Build the actual command
179
185
  cmd_line = f'"{exe}" {base_args}'
180
186
  if log_to_file:
181
- cmd_line += ' --log-file' if is_recursive:
187
+ cmd_line += ' --log-file'
188
+ if is_recursive:
182
189
  cmd_line += ' --recursive'
183
190
  if output_to_source:
184
191
  cmd_line += ' --output-to-source'
@@ -271,8 +278,11 @@ class MacOSContextMenuIntegration:
271
278
  self.upload_folder_artwork_json_cmd = self._build_cmd(f'{log_level_arg}', is_recursive=True, is_folder=True, use_upload=True, use_artwork=True, use_json=True, log_to_file=self.log_to_file)
272
279
 
273
280
  def _apply_config_template(self):
274
- """Apply the default configuration template if config.json is missing or invalid."""
281
+ """Apply the default configuration template if config.json is missing or invalid. Extracts the icon from base64 if not present."""
275
282
  config_path = os.path.join(self.output_dir, 'config.json')
283
+ icon_path = os.path.join(self.output_dir, 'icon.ico')
284
+ if not os.path.exists(icon_path):
285
+ base64_to_ico(ICON_BASE64, icon_path)
276
286
  if not os.path.exists(config_path):
277
287
  with open(config_path, 'w') as f:
278
288
  json.dump(CONFIG_TEMPLATE, f, indent=4)
@@ -1 +1,2 @@
1
+ #!/usr/bin/python3
1
2
  # TODO: Add integration_ubuntu.py
@@ -1,11 +1,16 @@
1
- # filepath: d:\Repository\TonieToolbox\TonieToolbox\integration_windows.py
1
+ #!/usr/bin/python3
2
+ """
3
+ Integration for Windows "classic" context menu.
4
+ This module generates Windows registry entries to add a 'TonieToolbox' cascade menu.
5
+ """
2
6
  import os
3
7
  import sys
4
8
  import json
5
- from .constants import SUPPORTED_EXTENSIONS, CONFIG_TEMPLATE
9
+ from .constants import SUPPORTED_EXTENSIONS, CONFIG_TEMPLATE, ICON_BASE64
10
+ from .artwork import base64_to_ico
6
11
  from .logger import get_logger
7
12
 
8
- logger = get_logger('integration_windows')
13
+ logger = get_logger(__name__)
9
14
 
10
15
  class WindowsClassicContextMenuIntegration:
11
16
  """
@@ -127,8 +132,11 @@ class WindowsClassicContextMenuIntegration:
127
132
  self.upload_folder_artwork_json_cmd = self._build_cmd(f'{log_level_arg}', is_recursive=True, is_folder=True, use_upload=True, use_artwork=True, use_json=True, log_to_file=self.log_to_file)
128
133
 
129
134
  def _apply_config_template(self):
130
- """Apply the default configuration template if config.json is missing or invalid."""
135
+ """Apply the default configuration template if config.json is missing or invalid. Extracts the icon from base64 if not present."""
131
136
  config_path = os.path.join(self.output_dir, 'config.json')
137
+ icon_path = os.path.join(self.output_dir, 'icon.ico')
138
+ if not os.path.exists(icon_path):
139
+ base64_to_ico(ICON_BASE64, icon_path)
132
140
  if not os.path.exists(config_path):
133
141
  with open(config_path, 'w') as f:
134
142
  json.dump(CONFIG_TEMPLATE, f, indent=4)
TonieToolbox/logger.py CHANGED
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/python3
1
2
  """
2
3
  Logging configuration for the TonieToolbox package.
3
4
  """
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/python3
1
2
  """
2
3
  Media tag processing functionality for the TonieToolbox package
3
4
 
@@ -14,6 +15,7 @@ from mutagen.flac import Picture
14
15
  from .logger import get_logger
15
16
  from .dependency_manager import is_mutagen_available, ensure_mutagen
16
17
  from .constants import ARTWORK_NAMES, ARTWORK_EXTENSIONS, TAG_VALUE_REPLACEMENTS, TAG_MAPPINGS
18
+ logger = get_logger(__name__)
17
19
 
18
20
  MUTAGEN_AVAILABLE = False
19
21
  mutagen = None
@@ -56,9 +58,6 @@ def _import_mutagen():
56
58
  if is_mutagen_available():
57
59
  _import_mutagen()
58
60
 
59
- logger = get_logger('media_tags')
60
-
61
-
62
61
  def normalize_tag_value(value: str) -> str:
63
62
  """
64
63
  Normalize tag values by replacing special characters or known patterns
TonieToolbox/ogg_page.py CHANGED
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/python3
1
2
  """
2
3
  Classes and functions for handling OGG container pages
3
4
  """
@@ -14,8 +15,7 @@ from .constants import (
14
15
  )
15
16
  from .logger import get_logger
16
17
 
17
- # Setup logging
18
- logger = get_logger('ogg_page')
18
+ logger = get_logger(__name__)
19
19
 
20
20
 
21
21
  def create_crc_table() -> list[int]:
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/python3
1
2
  """
2
3
  Classes and functions for handling Opus audio packets
3
4
  """
@@ -6,8 +7,7 @@ import struct
6
7
  from .constants import SAMPLE_RATE_KHZ
7
8
  from .logger import get_logger
8
9
 
9
- # Setup logging
10
- logger = get_logger('opus_packet')
10
+ logger = get_logger(__name__)
11
11
 
12
12
 
13
13
  class OpusPacket:
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/python3
1
2
  """
2
3
  Recursive folder processing functionality for the TonieToolbox package
3
4
  """
@@ -11,7 +12,7 @@ import re
11
12
  from .audio_conversion import filter_directories
12
13
  from .logger import get_logger
13
14
 
14
- logger = get_logger('recursive_processor')
15
+ logger = get_logger(__name__)
15
16
 
16
17
 
17
18
  def find_audio_folders(root_path: str) -> list[dict[str, any]]:
TonieToolbox/tags.py CHANGED
@@ -8,7 +8,7 @@ from .teddycloud import TeddyCloudClient
8
8
  import json
9
9
  from typing import Optional, Union
10
10
 
11
- logger = get_logger('tags')
11
+ logger = get_logger(__name__)
12
12
 
13
13
  def get_tags(client: 'TeddyCloudClient') -> bool:
14
14
  """
@@ -9,8 +9,9 @@ import base64
9
9
  import ssl
10
10
  import socket
11
11
  import requests
12
+ import json
12
13
  from .logger import get_logger
13
- logger = get_logger('teddycloud')
14
+ logger = get_logger(__name__)
14
15
  DEFAULT_CONNECTION_TIMEOUT = 10
15
16
  DEFAULT_READ_TIMEOUT = 15 # seconds
16
17
  DEFAULT_MAX_RETRIES = 3
@@ -334,3 +335,115 @@ class TeddyCloudClient:
334
335
  }
335
336
 
336
337
  # ------------- Custom API Methods -------------
338
+
339
+ def _get_paths_cache_file(self) -> str:
340
+ """
341
+ Get the path to the paths cache file.
342
+
343
+ Returns:
344
+ str: Path to the paths cache file
345
+ """
346
+ cache_dir = os.path.join(os.path.expanduser("~"), ".tonietoolbox")
347
+ os.makedirs(cache_dir, exist_ok=True)
348
+ return os.path.join(cache_dir, "paths.json")
349
+
350
+ def _load_paths_cache(self) -> set:
351
+ """
352
+ Load the paths cache from the cache file.
353
+
354
+ Returns:
355
+ set: Set of existing directory paths
356
+ """
357
+ cache_file = self._get_paths_cache_file()
358
+ try:
359
+ if os.path.exists(cache_file):
360
+ with open(cache_file, 'r', encoding='utf-8') as f:
361
+ paths_data = json.load(f)
362
+ # Convert to set for faster lookups
363
+ return set(paths_data.get('paths', []))
364
+ return set()
365
+ except Exception as e:
366
+ logger.warning(f"Failed to load paths cache: {e}")
367
+ return set()
368
+
369
+ def _save_paths_cache(self, paths: set) -> None:
370
+ """
371
+ Save the paths cache to the cache file.
372
+
373
+ Args:
374
+ paths (set): Set of directory paths to save
375
+ """
376
+ cache_file = self._get_paths_cache_file()
377
+ try:
378
+ paths_data = {'paths': list(paths)}
379
+ with open(cache_file, 'w', encoding='utf-8') as f:
380
+ json.dump(paths_data, f, indent=2)
381
+ logger.debug(f"Saved {len(paths)} paths to cache file")
382
+ except Exception as e:
383
+ logger.warning(f"Failed to save paths cache: {e}")
384
+
385
+ def create_directories_recursive(self, path: str, overlay: str = None, special: str = "library") -> str:
386
+ """
387
+ Create directories recursively on the TeddyCloud server.
388
+
389
+ This function handles both cases:
390
+ - Directories that already exist (prevents 500 errors)
391
+ - Parent directories that don't exist yet (creates them first)
392
+
393
+ This optimized version uses a local paths cache instead of querying the file index,
394
+ since the file index might not represent the correct folders.
395
+
396
+ Args:
397
+ path (str): Directory path to create (can contain multiple levels)
398
+ overlay (str | None): Settings overlay ID (optional)
399
+ special (str | None): Special folder source, only 'library' supported yet (optional)
400
+
401
+ Returns:
402
+ str: Response message from server
403
+ """
404
+ path = path.replace('\\', '/').strip('/')
405
+ if not path:
406
+ return "Path is empty"
407
+ existing_dirs = self._load_paths_cache()
408
+ logger.debug(f"Loaded {len(existing_dirs)} existing paths from cache")
409
+ path_components = path.split('/')
410
+ current_path = ""
411
+ result = "OK"
412
+ paths_updated = False
413
+ for component in path_components:
414
+ if current_path:
415
+ current_path += f"/{component}"
416
+ else:
417
+ current_path = component
418
+ if current_path in existing_dirs:
419
+ logger.debug(f"Directory '{current_path}' exists in paths cache, skipping creation")
420
+ continue
421
+
422
+ try:
423
+ result = self.create_directory(current_path, overlay, special)
424
+ logger.debug(f"Created directory: {current_path}")
425
+ # Add the newly created directory to our cache
426
+ existing_dirs.add(current_path)
427
+ paths_updated = True
428
+ except requests.exceptions.HTTPError as e:
429
+ # If it's a 500 error, likely the directory already exists
430
+ if e.response.status_code == 500:
431
+ if "already exists" in e.response.text.lower():
432
+ logger.debug(f"Directory '{current_path}' already exists, continuing")
433
+ # Add to our cache for future operations
434
+ existing_dirs.add(current_path)
435
+ paths_updated = True
436
+ else:
437
+ # Log the actual error message but continue anyway
438
+ # This allows us to continue even if the error is something else
439
+ logger.warning(f"Warning while creating '{current_path}': {str(e)}")
440
+ else:
441
+ # Re-raise for other HTTP errors
442
+ logger.error(f"Failed to create directory '{current_path}': {str(e)}")
443
+ raise
444
+
445
+ # Save updated paths cache if any changes were made
446
+ if paths_updated:
447
+ self._save_paths_cache(existing_dirs)
448
+
449
+ return result
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/python3
1
2
  """
2
3
  Functions for analyzing Tonie files
3
4
  """
@@ -10,7 +11,7 @@ from . import tonie_header_pb2
10
11
  from .ogg_page import OggPage
11
12
  from .logger import get_logger
12
13
 
13
- logger = get_logger('tonie_analysis')
14
+ logger = get_logger(__name__)
14
15
 
15
16
  def format_time(ts: float) -> str:
16
17
  """
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/python3
1
2
  """
2
3
  Tonie file operations module
3
4
  """
@@ -15,7 +16,7 @@ from .ogg_page import OggPage
15
16
  from .constants import OPUS_TAGS, SAMPLE_RATE_KHZ, TIMESTAMP_DEDUCT
16
17
  from .logger import get_logger
17
18
 
18
- logger = get_logger('tonie_file')
19
+ logger = get_logger(__name__)
19
20
 
20
21
 
21
22
  def toniefile_comment_add(buffer: bytearray, length: int, comment_str: str) -> int:
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/python3
1
2
  """
2
3
  TonieToolbox module for handling the tonies.custom.json operations.
3
4
 
@@ -19,7 +20,7 @@ from .media_tags import get_file_tags, extract_album_info
19
20
  from .constants import LANGUAGE_MAPPING, GENRE_MAPPING
20
21
  from .teddycloud import TeddyCloudClient
21
22
 
22
- logger = get_logger('tonies_json')
23
+ logger = get_logger(__name__)
23
24
 
24
25
  class ToniesJsonHandlerv1:
25
26
  """Handler for tonies.custom.json operations using v1 format."""
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/python3
1
2
  """
2
3
  Version handler to check if the latest version of TonieToolbox is being used.
3
4
  """
@@ -17,6 +18,7 @@ CACHE_DIR = os.path.join(os.path.expanduser("~"), ".tonietoolbox")
17
18
  CACHE_FILE = os.path.join(CACHE_DIR, "version_cache.json")
18
19
  CACHE_EXPIRY = 86400 # 24 hours in seconds
19
20
 
21
+ logger = get_logger(__name__)
20
22
 
21
23
  def get_pypi_version(force_refresh: bool = False) -> tuple[str, str | None]:
22
24
  """
@@ -27,7 +29,6 @@ def get_pypi_version(force_refresh: bool = False) -> tuple[str, str | None]:
27
29
  Returns:
28
30
  tuple[str, str | None]: (latest_version, None) on success, (current_version, error_message) on failure
29
31
  """
30
- logger = get_logger("version_handler")
31
32
  logger.debug("Checking for latest version (force_refresh=%s)", force_refresh)
32
33
  logger.debug("Current version: %s", __version__)
33
34
 
@@ -97,7 +98,6 @@ def compare_versions(v1: str, v2: str) -> int:
97
98
  Returns:
98
99
  int: -1 if v1 < v2, 0 if v1 == v2, 1 if v1 > v2
99
100
  """
100
- logger = get_logger("version_handler")
101
101
  logger.debug("Comparing versions: '%s' vs '%s'", v1, v2)
102
102
 
103
103
  try:
@@ -145,7 +145,6 @@ def check_for_updates(quiet: bool = False, force_refresh: bool = False) -> tuple
145
145
  message: string message about the update status or error
146
146
  update_confirmed: boolean indicating if the user confirmed the update
147
147
  """
148
- logger = get_logger("version_handler")
149
148
  current_version = __version__
150
149
  update_confirmed = False
151
150
 
@@ -204,7 +203,6 @@ def install_update() -> bool:
204
203
  Returns:
205
204
  bool: True if the update was successfully installed, False otherwise
206
205
  """
207
- logger = get_logger("version_handler")
208
206
  import subprocess
209
207
  import sys
210
208
 
@@ -242,7 +240,6 @@ def clear_version_cache() -> bool:
242
240
  Returns:
243
241
  bool: True if cache was cleared, False otherwise
244
242
  """
245
- logger = get_logger("version_handler")
246
243
 
247
244
  try:
248
245
  if os.path.exists(CACHE_FILE):
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: TonieToolbox
3
- Version: 0.6.0a3
4
- Summary: Create files for the Tonie box and interact with TeddyCloud servers
3
+ Version: 0.6.0a5
4
+ Summary: Convert audio files to Toniebox compatible format (.TAF) and interact with TeddyCloud.
5
5
  Home-page: https://github.com/Quentendo64/TonieToolbox
6
6
  Author: Quentendo64
7
7
  Author-email: Quentendo64 <quentin@wohlfeil.at>
@@ -23,6 +23,7 @@ Requires-Dist: protobuf<=3.19.0
23
23
  Requires-Dist: requests>=2.32.3
24
24
  Requires-Dist: mutagen>=1.47.0
25
25
  Requires-Dist: packaging>=25.0
26
+ Requires-Dist: tqdm>=4.67.1
26
27
  Provides-Extra: test
27
28
  Requires-Dist: pytest>=8.3.5; extra == "test"
28
29
  Requires-Dist: pytest-cov>=6.1.1; extra == "test"
@@ -806,3 +807,6 @@ If you need help, have questions, or want to report a bug, please use the follow
806
807
  - [GitHub Issues](https://github.com/Quentendo64/TonieToolbox/issues) for bug reports and feature requests
807
808
  - [GitHub Discussions](https://github.com/Quentendo64/TonieToolbox/discussions) for general questions and community support
808
809
  - [HOWTO Guide](HOWTO.md) for common usage instructions
810
+
811
+ ## Attribution
812
+ [Parrot Icon created by Freepik - Flaticon](https://www.flaticon.com/free-animated-icons/parrot)
@@ -0,0 +1,30 @@
1
+ TonieToolbox/__init__.py,sha256=0gNvQWCJmnGv7_OCrSTA7qyNe3zUQ546m7TL9_SFtwY,117
2
+ TonieToolbox/__main__.py,sha256=KSDasW-QaTzStXSKtemMKxoFV8IWvCmq1Oig5yo8BQs,41573
3
+ TonieToolbox/artwork.py,sha256=BhAjLWqzui8zUOU9z9P4H3zbCCTOB94aT0MPlqEvZoY,5605
4
+ TonieToolbox/audio_conversion.py,sha256=xXXsRGPS_yQ_mqtFJiqupLbeXN8__Q2Hg05C94EPC_8,17199
5
+ TonieToolbox/constants.py,sha256=nTKDBy55PTv6Tazda3rsZZcckcm3AZOyWXa1LDuTuEk,33989
6
+ TonieToolbox/dependency_manager.py,sha256=sQv0vNE7Gp_RqdR9GOwF8jJgu8GTw0Krppg5MjG5qJU,49432
7
+ TonieToolbox/filename_generator.py,sha256=NJrRxv0sm_9G5ZDp1QG39mktgJnz5yGC8HUs7NhLYFg,5293
8
+ TonieToolbox/integration.py,sha256=qWRZfowNBIQJPPnGUJ52Xw0SqyfScuzoONPVtZI8yjA,3063
9
+ TonieToolbox/integration_macos.py,sha256=YxK7gIqiy1QTp7EM1M1OPC-mgb3gaIoI6Xfu3eUAyX0,27311
10
+ TonieToolbox/integration_ubuntu.py,sha256=_Da2s7CmuP7kts0W-yyt4odZA8jr14d8iisVF_ipLDA,52
11
+ TonieToolbox/integration_windows.py,sha256=WBclD1bW5X8cJ-x3j3-YPnSkpWOQmzxQXjj2-gemPN0,24011
12
+ TonieToolbox/logger.py,sha256=ppAnOJAKNwwbt5q3NdF2WHgHemZjP0QWRaUx8UrkQK8,3139
13
+ TonieToolbox/media_tags.py,sha256=pOLcqnY4sUudI-gBre0A7le3nA7ZDkhUNkozUdRVHiE,20843
14
+ TonieToolbox/ogg_page.py,sha256=CpL3mHoRsfHBBrT2r4x5p3LBPgHfYQxb_WQsCZq6SI0,22341
15
+ TonieToolbox/opus_packet.py,sha256=skKzr5sVpL7L77JisqqGL4Kz86acOGDzwbFRqRL2oSM,8017
16
+ TonieToolbox/recursive_processor.py,sha256=IcTmQY6OF01KUfqjYE7F0CFl1SeWcSLzkB_Du6R8deI,13910
17
+ TonieToolbox/tags.py,sha256=usNcZxMEAMP7vEfeNOtg70YBJpHiWuHb_XKCyEafsYc,2702
18
+ TonieToolbox/teddycloud.py,sha256=1fpRzhJrOiUXTBhX9JNL9rlO5obIl32WMoYz5RWz0zA,18486
19
+ TonieToolbox/tonie_analysis.py,sha256=KkaZ6vt4sntMTfutyQApI8gvCirMjTW8aeIBSbhtllA,30798
20
+ TonieToolbox/tonie_file.py,sha256=z7yRmK0ujZ6SjF78-xJImGmQ2bS-Q7b-6d2ryYJnmwA,21769
21
+ TonieToolbox/tonie_header.proto,sha256=WaWfwO4VrwGtscK2ujfDRKtpeBpaVPoZhI8iMmR-C0U,202
22
+ TonieToolbox/tonie_header_pb2.py,sha256=s5bp4ULTEekgq6T61z9fDkRavyPM-3eREs20f_Pxxe8,3665
23
+ TonieToolbox/tonies_json.py,sha256=Icu5ClFbRK0gFuefJkHQNRjeOW79tQV-GZ3hoIATo3M,60768
24
+ TonieToolbox/version_handler.py,sha256=Q-i5_0r5lX3dlwDLI2lMAx4X10UZGN2rvMcntmyuiT4,9862
25
+ tonietoolbox-0.6.0a5.dist-info/licenses/LICENSE.md,sha256=rGoga9ZAgNco9fBapVFpWf6ri7HOBp1KRnt1uIruXMk,35190
26
+ tonietoolbox-0.6.0a5.dist-info/METADATA,sha256=Hzna0YOJdh0olBqOV921ZCfa62g8b_iL555_WeFsYdo,27009
27
+ tonietoolbox-0.6.0a5.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
28
+ tonietoolbox-0.6.0a5.dist-info/entry_points.txt,sha256=oqpeyBxel7aScg35Xr4gZKnf486S5KW9okqeBwyJxxc,60
29
+ tonietoolbox-0.6.0a5.dist-info/top_level.txt,sha256=Wkkm-2p7I3ENfS7ZbYtYUB2g-xwHrXVlERHfonsOPuE,13
30
+ tonietoolbox-0.6.0a5.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.4.0)
2
+ Generator: setuptools (80.7.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,30 +0,0 @@
1
- TonieToolbox/__init__.py,sha256=03DkelZsljyJIZJPxhaIrnGaLVecnU_C3sxGmHN3a_0,98
2
- TonieToolbox/__main__.py,sha256=pD-goy-ke-M3Z8zkbUgW1IF94UQPGQSHql15yeBBDzk,34040
3
- TonieToolbox/artwork.py,sha256=fOlYx1cffVq-2u1e_qiW5bd3LpPCGMmIfZAxIwC05tA,4451
4
- TonieToolbox/audio_conversion.py,sha256=0GpC6mSRYikIjf_A1w26LAnYtCP2gpHLEKozOISapnM,17190
5
- TonieToolbox/constants.py,sha256=4L-lOX0_UBt3Xo5_Y2tVKhlHCRysjTIbC-cdlE7lNl0,8104
6
- TonieToolbox/dependency_manager.py,sha256=GB1RlXNkRHsEd4m7x45-uqly6kVbnyr9wlOmxHzAzgc,28392
7
- TonieToolbox/filename_generator.py,sha256=ATCG4w8uN1vyAqvmdhOtpJLlb9QFKCnYIdBViYqpHjw,3464
8
- TonieToolbox/integration.py,sha256=NEQpKQSwLa6el7DoIqWbscBUGmRrYls_UiSmmvpSpxw,2785
9
- TonieToolbox/integration_macos.py,sha256=bWAQ-vWrQK-KluL3NYdZexEUBwnkL_-tasFgkHL3yK4,26907
10
- TonieToolbox/integration_ubuntu.py,sha256=MU6W0xRCdoHBxrIiOIHePqYTF5Wvn4JxBnDQUPf6fgg,33
11
- TonieToolbox/integration_windows.py,sha256=SSVg-9bf8wDQMuJgg-j_6cUczcx7H1-C1mbEIlNJlzs,23691
12
- TonieToolbox/logger.py,sha256=Q_cXbCWfzNmt5q6fvVzeM8IugkD24CSZAVjuf16n6b4,3120
13
- TonieToolbox/media_tags.py,sha256=oDlLe0AyvmIdQlqPzH74AUCqwbZZ-49AQKAJdrW26XE,20830
14
- TonieToolbox/ogg_page.py,sha256=IHdP0er0TYjyLfON8zes11FdQtRab3QNxeK6sxnAX08,22340
15
- TonieToolbox/opus_packet.py,sha256=yz5jvViGZ-nGZjEaQ1gCKd-j1jPW402szYirbEl4izA,8019
16
- TonieToolbox/recursive_processor.py,sha256=6JD4b5sGnCe45GkJqWua9u9ZHv-RC77BRV58qQ8pA3Q,13904
17
- TonieToolbox/tags.py,sha256=7BowNWmbJDymvJ0hPVAAXwJRAfPklLokQQuV8FVldSI,2700
18
- TonieToolbox/teddycloud.py,sha256=5PSV5Qp0VRfDG78kGPbKQ7bXxxB1sfmGNHYhvIumVF8,13794
19
- TonieToolbox/tonie_analysis.py,sha256=KYDfWi9EmA5EvVyq_h_gcxrZ5Eaa5etYsF152GRgyqI,30787
20
- TonieToolbox/tonie_file.py,sha256=YntpgpmtWTe64WWqJmWWo2sXyMUnZ57pp3sKGoY-Yik,21754
21
- TonieToolbox/tonie_header.proto,sha256=WaWfwO4VrwGtscK2ujfDRKtpeBpaVPoZhI8iMmR-C0U,202
22
- TonieToolbox/tonie_header_pb2.py,sha256=s5bp4ULTEekgq6T61z9fDkRavyPM-3eREs20f_Pxxe8,3665
23
- TonieToolbox/tonies_json.py,sha256=YGS2wtaDudxxSy7QuRLWaE5n4bf_AyoSvVLH1Vdh8SE,60754
24
- TonieToolbox/version_handler.py,sha256=MLpJ9mSEHkcSoyePnACpfINHTSB1q1_4iEgcT1tGqNU,10028
25
- tonietoolbox-0.6.0a3.dist-info/licenses/LICENSE.md,sha256=rGoga9ZAgNco9fBapVFpWf6ri7HOBp1KRnt1uIruXMk,35190
26
- tonietoolbox-0.6.0a3.dist-info/METADATA,sha256=N6HxrJmWGLbiTvwXInNLMHsptNPJagYkg3TACTODc0M,26849
27
- tonietoolbox-0.6.0a3.dist-info/WHEEL,sha256=DnLRTWE75wApRYVsjgc6wsVswC54sMSJhAEd4xhDpBk,91
28
- tonietoolbox-0.6.0a3.dist-info/entry_points.txt,sha256=oqpeyBxel7aScg35Xr4gZKnf486S5KW9okqeBwyJxxc,60
29
- tonietoolbox-0.6.0a3.dist-info/top_level.txt,sha256=Wkkm-2p7I3ENfS7ZbYtYUB2g-xwHrXVlERHfonsOPuE,13
30
- tonietoolbox-0.6.0a3.dist-info/RECORD,,