import csv from clipboard
parent
38b3e7b504
commit
1ff1b37adb
|
@ -37,6 +37,15 @@ def import_module_from_path(path):
|
|||
print(f'Cannot import file {path}')
|
||||
print(e)
|
||||
|
||||
def fuzzy_match(s1, s2, case_sensitive=False):
|
||||
'''Tell how much two passed strings are similar 1.0 being exactly similar'''
|
||||
from difflib import SequenceMatcher
|
||||
if case_sensitive:
|
||||
similarity = SequenceMatcher(None, s1, s2)
|
||||
else:
|
||||
similarity = SequenceMatcher(None, s1.lower(), s2.lower())
|
||||
return similarity.ratio()
|
||||
|
||||
def norm_str(string, separator='_', format=str.lower, padding=0):
|
||||
string = str(string)
|
||||
string = string.replace('_', ' ')
|
||||
|
|
|
@ -101,7 +101,7 @@ class VSETB_OT_load_settings(Operator):
|
|||
if spreadsheet_import_config:
|
||||
import_cells.clear()
|
||||
|
||||
cell_names = project.get_cell_names()
|
||||
cell_types = project.get_cell_types()
|
||||
for k, v in spreadsheet_import_config.items():
|
||||
if k == 'cells':
|
||||
for i, cell_data in enumerate(v):
|
||||
|
@ -113,11 +113,12 @@ class VSETB_OT_load_settings(Operator):
|
|||
cell.name = cell_data['name']
|
||||
|
||||
norm_import_name = norm_str(cell_data.get('import_name', cell_data['name']))
|
||||
import_name = next((c for c in cell_names if norm_str(c) == norm_import_name), None)
|
||||
import_name = next((n for n, t in cell_types.items() if norm_str(n) == norm_import_name), None)
|
||||
if import_name is None:
|
||||
print(f'import_name {norm_import_name} not in {cell_names}')
|
||||
print(f'import_name {norm_import_name} not in {list(cell_types.values())}')
|
||||
else:
|
||||
cell.import_name = import_name
|
||||
cell.type = cell_types[import_name]
|
||||
|
||||
if 'enabled' in cell_data:
|
||||
try:
|
||||
|
|
|
@ -14,7 +14,7 @@ from bl_operators.presets import AddPresetBase
|
|||
|
||||
from vse_toolbox.sequencer_utils import (get_strips, get_strip_sequence_name)
|
||||
from vse_toolbox.bl_utils import (get_addon_prefs, get_scene_settings)
|
||||
from vse_toolbox.file_utils import open_file, install_module
|
||||
from vse_toolbox.file_utils import (open_file, install_module, fuzzy_match)
|
||||
|
||||
|
||||
class VSETB_MT_export_spreadsheet_presets(Menu):
|
||||
|
@ -143,12 +143,23 @@ class VSETB_OT_spreadsheet_from_clipboard(Operator):
|
|||
def execute(self, context):
|
||||
scn = context.scene
|
||||
project = get_scene_settings().active_project
|
||||
import_cells = project.spreadsheet_import.cells
|
||||
import_cells.clear()
|
||||
|
||||
spreadsheet = context.window_manager.clipboard
|
||||
|
||||
reader = list(csv.reader(spreadsheet.splitlines(), delimiter='\t'))
|
||||
header = reader[0]
|
||||
print(header)
|
||||
cell_types = project.get_cell_types()
|
||||
rows = list(csv.reader(spreadsheet.splitlines(), delimiter='\t'))
|
||||
for cell_name in rows[0]:
|
||||
if not cell_name:
|
||||
continue
|
||||
|
||||
cell = import_cells.add()
|
||||
cell.name = cell_name
|
||||
cell.import_name = max(cell_types.keys(), key=lambda x: fuzzy_match(cell_name, x))
|
||||
cell.enabled = True
|
||||
|
||||
project.spreadsheet_import.use_custom_cells = True
|
||||
|
||||
return {"FINISHED"}
|
||||
|
||||
|
@ -194,12 +205,7 @@ class VSETB_OT_import_spreadsheet(Operator):
|
|||
row.operator("vse_toolbox.spreadsheet_from_clipboard", text='Clipboard', icon='PASTEDOWN')
|
||||
row.operator("vse_toolbox.spreadsheet_from_file", text='File', icon='FILE')
|
||||
|
||||
|
||||
row = layout.row(align=True)
|
||||
row.prop(spreadsheet, 'use_custom_cells', text='Custom Cells')
|
||||
|
||||
col = layout.column(align=False)
|
||||
col.enabled = spreadsheet.use_custom_cells
|
||||
|
||||
row = col.row(align=True, heading='Custom Asset Name')
|
||||
row.use_property_split = True
|
||||
|
@ -211,7 +217,6 @@ class VSETB_OT_import_spreadsheet(Operator):
|
|||
sub.label(icon='BLANK1')
|
||||
|
||||
row = layout.row()
|
||||
row.enabled = spreadsheet.use_custom_cells
|
||||
row.template_list("VSETB_UL_spreadsheet_import", "spreadsheet_import", spreadsheet, "cells", spreadsheet, "cell_index", rows=8)
|
||||
|
||||
col_tool = row.column(align=True)
|
||||
|
|
|
@ -171,11 +171,13 @@ def get_cell_items(self, context):
|
|||
settings = get_scene_settings()
|
||||
project = settings.active_project
|
||||
|
||||
return [(cell, cell, '') for cell in project.get_cell_names()]
|
||||
return [(cell, cell, '') for cell in project.get_cell_types().keys()]
|
||||
|
||||
class SpreadsheetImportCell(PropertyGroup):
|
||||
enabled : BoolProperty(default=True)
|
||||
import_name : EnumProperty(items=get_cell_items)
|
||||
|
||||
#type : EnumProperty(items=[(t, t, "") for t in ('METADATA', 'SHOT', 'ASSET_TYPE')])
|
||||
|
||||
|
||||
def get_custom_name_items(self, context):
|
||||
|
@ -200,7 +202,7 @@ class SpreadsheetExport(PropertyGroup):
|
|||
|
||||
|
||||
class SpreadsheetImport(PropertyGroup):
|
||||
use_custom_cells: BoolProperty(default=False)
|
||||
#use_custom_cells: BoolProperty(default=False)
|
||||
separator : StringProperty(default='\\n')
|
||||
delimiter : StringProperty(default=';')
|
||||
use_custom_name : BoolProperty(default=False)
|
||||
|
@ -258,23 +260,26 @@ class Project(PropertyGroup):
|
|||
|
||||
type : StringProperty()
|
||||
|
||||
def get_cell_names(self):
|
||||
def get_cell_types(self):
|
||||
settings = get_scene_settings()
|
||||
project = settings.active_project
|
||||
|
||||
cell_types = {}
|
||||
cell_names = ['Sequence', 'Shot', 'Frames', 'Description']
|
||||
|
||||
if project.type == 'TVSHOW':
|
||||
cell_names.insert(0, 'Episode')
|
||||
|
||||
cell_types = {cell_name: 'SHOT' for cell_name in cell_names}
|
||||
|
||||
for metadata_type in project.metadata_types:
|
||||
if metadata_type['entity_type'] == "SHOT":
|
||||
cell_names += [metadata_type.name]
|
||||
cell_types[metadata_type.name] = 'METADATA'
|
||||
|
||||
for asset_type in project.asset_types:
|
||||
cell_names += [asset_type.name]
|
||||
cell_types[asset_type.name] = 'ASSET_TYPE'
|
||||
|
||||
return cell_names
|
||||
return cell_types
|
||||
|
||||
def set_spreadsheet(self):
|
||||
|
||||
|
@ -406,12 +411,27 @@ class VSETB_UL_spreadsheet_import(UIList):
|
|||
layout.use_property_split = True
|
||||
layout.use_property_decorate = False
|
||||
|
||||
item_type = project.get_cell_types()[item.import_name]
|
||||
|
||||
enabled = True
|
||||
if item_type == 'METADATA' and not project.spreadsheet_import.import_custom_data:
|
||||
enabled = False
|
||||
elif item_type == 'ASSET_TYPE' and not project.spreadsheet_import.import_casting:
|
||||
enabled = False
|
||||
elif item.import_name == 'Frames' and not project.spreadsheet_import.update_edit:
|
||||
enabled = False
|
||||
|
||||
layout.enabled = enabled
|
||||
|
||||
row = layout.row(align=True)
|
||||
row.alignment = 'LEFT'
|
||||
|
||||
row.prop(item, 'enabled', text='')
|
||||
layout.label(text=item.name)
|
||||
layout.prop(item, 'import_name', text='')
|
||||
|
||||
row = layout.row(align=True)
|
||||
row.enabled = item.enabled
|
||||
row.label(text=item.name)
|
||||
row.prop(item, 'import_name', text='')
|
||||
|
||||
|
||||
class VSETB_UL_spreadsheet_export(UIList):
|
||||
|
|
Loading…
Reference in New Issue