NAME

File::Sticker::Writer - write and standardize meta-data from files

VERSION

version 3.03

SYNOPSIS

use File::Sticker::Writer;

my $writer = File::Sticker::Writer->new(%args);

$writer->write_meta(%args);

DESCRIPTION

This will write meta-data from files in various formats, and standardize it to a common nomenclature.

DEBUGGING

whoami

Used for debugging info

METHODS

new

Create a new object, setting global values for the object.

my $obj = File::Sticker::Writer->new();

init

Initialize the object. Set which fields you are interested in ('wanted_fields').

$writer->init(wanted_fields=>{title=>'TEXT',count=>'NUMBER',tags=>'MULTI'});

name

The name of the writer; this is basically the last component of the module name. This works as either a class function or a method.

$name = $self->name();

$name = File::Sticker::Writer::name($class);

priority

The priority of this writer. Writers with higher priority get tried first. This is useful where there may be more than one possible meta-data format for a file, such as EXIF versus XATTR.

This works as either a class function or a method.

This must be overridden by the specific writer class.

$priority = $self->priority();

$priority = File::Sticker::Writer::priority($class);

allow

If this writer can be used for the given file, and the wanted_fields then this returns true. Returns false if there are no 'wanted_fields'!

    if ($writer->allow($file))
    {
	....
    }

allowed_file

If this writer can be used for the given file, then this returns true. This must be overridden by the specific writer class.

    if ($writer->allowed_file($file))
    {
	....
    }

allowed_fields

If this writer can be used for the known and wanted fields, then this returns true. By default, if there are no wanted_fields, this returns false. (But this may be overridden by subclasses)

    if ($writer->allowed_fields())
    {
	....
    }

known_fields

Returns the fields which this writer knows about.

This must be overridden by the specific writer class.

my $known_fields = $writer->known_fields();

readonly_fields

Returns the fields which this writer knows about, which can't be overwritten, but are allowed to be "wanted" fields. Things like file-size etc.

This must be overridden by the specific writer class.

my $readonly_fields = $writer->readonly_fields();

add_field_to_file

Adds a field to a file, taking account of whether it is a multi-value field or not. This requires the old meta-data for the file to be passed in.

$writer->add_field_to_file(filename=>$filename,
    field=>$field,
    value=>$value,
    old_meta=>\%meta);

delete_field_from_file

Completely remove the given field. For multi-value fields, it removes ALL the values.

This must be overridden by the specific writer class.

$writer->delete_field_from_file(filename=>$filename,field=>$field);

replace_all_meta

Overwrite the existing meta-data with that given.

$writer->replace_all_meta(filename=>$filename,meta=>\%meta);

Helper Functions

Private interface.

update_multival_field

A multi-valued field could have individual values added or removed from it. This expects a comma-separated list of individual values, prefixed with an operation: '+' or nothing -- add the values '-' -- remove the values '=' -- replace the values

This also needs to know the existing values of the multi-valued field. The old values are either a reference to an array, or a string with comma-separated values.

$writer->update_multival_field(filename=>$filename,
    field=>$field_name,
    value=>$value,
    old_vals=>$old_vals);

add_multival_to_file

Add a multi-valued field to the file. Needs to know the existing values of the multi-valued field. The old values are either a reference to an array, or a string with comma-separated values.

$writer->add_multival_to_file(filename=>$filename,
    field=>$field_name,
    value=>$value,
    old_vals=>$old_vals);

delete_multival_from_file

Remove one value of a multi-valued field. Needs to know the existing values of the multi-valued field. The old values are either a reference to an array, or a string with comma-separated values.

$writer->delete_multival_from_file(filename=>$filename,
    value=>$value,
    field=>$field_name,
    old_vals=>$old_vals);

replace_one_field

Overwrite the given field. This does no checking.

This must be overridden by the specific writer class.

$writer->replace_one_field(filename=>$filename,field=>$field,value=>$value);

BUGS

Please report any bugs or feature requests to the author.