NAME XML::OBEXFTP::FolderListing - parse OBEX FTP x-obex/folder-listing XML SYNOPSIS use strict; use warnings; use lib '../lib'; use XML::OBEXFTP::FolderListing; my $data =<<'END_DATA'; END_DATA my $p = XML::OBEXFTP::FolderListing->new; $p->parse($data); for ( @{ $p->folders } ) { printf "Folder: %s\n\tPermissions: %s\n\tLast-Modified: %s\n\n", $_, $p->perms( $_, 'folder' ), $p->modified( $_, 'folder' ); } for my $file ( @{ $p->files } ) { printf "File: %s\n\tPermissions: %s\n\tSize: %s\n\tType: %s\n\t" . "Last-Modified: %s\n\n", $file, map { $p->$_( $file ) } qw( perms size type modified ); } DESCRIPTION The module provides means to parse information from OBEX File Transfer Profile XML. CONSTRUCTOR new my $p = XML::OBEXFTP::FolderListing->new; Takes no arguments, returns a freshly made XML::OBEXFTP::FolderListing object that still has that "new object" smell on it!. METHODS parse my $tree = $p->parse( $your_XML_data ); Takes one mandatory argument which is the OBEX FTP x-obex/folder-listing XML data. Returns a hashref which is a full parsed tree of your data, e.g: $VAR1 = { 'parent_folder' => {}, 'file' => { '26-01-08_1228.jpg' => { 'type' => 'image/jpeg', 'size' => '40196', 'modified' => '20080126T122836Z', 'user-perm' => 'RW' }, '05-02-08_2312.jpg' => { 'type' => 'image/jpeg', 'size' => '33399', 'modified' => '20080205T230946Z', 'user-perm' => 'RW' }, '26-01-08_0343.jpg' => { 'type' => 'image/jpeg', 'size' => '40802', 'modified' => '20080126T034339Z', 'user-perm' => 'RW' }, '05-02-08_2043.jpg' => { 'type' => 'image/jpeg', 'size' => '33210', 'modified' => '20080205T204310Z', 'user-perm' => 'RW' }, '31-01-08_2213.jpg' => { 'type' => 'image/jpeg', 'size' => '27665', 'modified' => '20080131T221123Z', 'user-perm' => 'RW' }, '05-02-08_2047.jpg' => { 'type' => 'image/jpeg', 'size' => '21318', 'modified' => '20080205T204358Z', 'user-perm' => 'RW' } }, 'folder' => { 'audio' => { 'type' => 'folder', 'size' => '0', 'modified' => '19700101T000000Z', 'user-perm' => 'RW' }, 'video' => { 'type' => 'folder', 'size' => '0', 'modified' => '19700101T000000Z', 'user-perm' => 'RW' }, 'picture' => { 'type' => 'folder', 'size' => '0', 'modified' => '19700101T000000Z', 'user-perm' => 'RW' } } }; folders my $folders_ref = $p->folders; Must be called after a call to "parse()". Takes no arguments. Returns a possibly empty arrayref, elements of which are the names of folders your XML contains. files my $files_ref = $p->files; Must be called after a call to "parse()". Takes no arguments. Returns a possibly empty arrayref, elements of which are the names of files your XML contains. parent_folder my $parent_folder = $p->parent_folder; Must be called after a call to "parse()". Takes no arguments. Supposedly should return the parent folder of your OBEX FTP listing, I am yet to see XML contain that info, maybe it's just my device (I got only one). Please tell me if this actually works for someone. tree my $tree = $p->tree; Must be called after a call to "parse()". Takes no arguments. Returns the same hashref as the return of last "parse()". See "parse()" method above for more information. is_folder if ( $p->is_folder('audio') ) { # it's a folder, maybe we should setpath to it } Must be called after a call to "parse()". Takes one mandatory argument which is the name of the folder. Returns a true value if the name you provided is a name of a folder. Returns a false value if the name you've specified does not exist in the "folder" listing of your XML. is_file if ( $p->is_file('05-02-08_2043.jpg') ) { # it's a file, maybe we should download it } Must be called after a call to "parse()". Takes one mandatory argument which is the name of the file. Returns a true value if the name you provided is a name of a file. Returns a false value if the name you've specified does not exist in the "file" listing of your XML. perms my $permissions = $p->perms('05-02-08_2043.jpg'); my $permissions2 = $p->perms('audio', 'folder' ); Must be called after a call to "parse()". Takes one mandatory and one optional arguments. The first argument is the name of either a file or a folder, the second argument can contain either "file" or "folder" to specify whether your name is a name of a file or a folder respectively; if not specified it will default to "file". Returns a string containing the permissions of the folder or file you've specified, e.g. "RW" for read-write access. Will return "undef" if specified file/folder was not found in your XML. size my $size = $p->size('05-02-08_2043.jpg'); Must be called after a call to "parse()". Takes one mandatory argument which is a name of a file. Returns file's size in bytes. All folders have size of zero. Will return "undef" if specified file was not found in your XML. type my $type = $p->type('05-02-08_2043.jpg'); Must be called after a call to "parse()". Takes one mandatory argument which is the name of the file. Returns a string containing file's type (MIME), e.g. "image/jpeg". All folders have a type of "folder". Will return "undef" if specified file was not found in your XML. modified my $modified = $p->modified('05-02-08_2043.jpg'); my $modified = $p->modified('audio', 'folder' ); Must be called after a call to "parse()". Takes one mandatory and one optional arguments. The first argument is the name of either the file or a folder. The second optional argument can be set to either "file" or "folder" to indicate whether your name represents a file or a folder; it will default to "file". Returns a scalar containing the modification date of the folder or file you've specified, e.g. "20080205T204358Z". Will return "undef" if specified file/folder was not found in your XML. modified_sane my $modified = $p->modified_sane('05-02-08_2043.jpg'); my $modified = $p->modified_sane('audio', 'folder' ); Must be called after a call to "parse()". Takes one mandatory and one optional arguments. The first argument is the name of either the file or a folder. The second optional argument can be set to either "file" or "folder" to indicate whether your name represents a file or a folder; it will default to "file". The method is similiar to "modified()" except it returns a hashref with the following keys/values representing the last modification time of your folder/file: $VAR1 = { 'hour' => '12', 'minute' => '28', 'second' => '36', 'month' => '01', 'day' => '26', 'year' => '2008' }; Will return "undef" if specified file/folder was not found in your XML. info my $info_ref = $p->info('05-02-08_2043.jpg'); my $info2_ref = $p->info('audio', 'folder' ); Must be called after a call to "parse()". Takes one mandatory and one optional arguments. The first argument is the name of either the file or a folder. The second optional argument can be set to either "file" or "folder" to indicate whether your name represents a file or a folder; it will default to "file". This method combines info from "modified()", "type()", "perms()", "size()" and "modified_sane()" methods. Will return "undef" if specified file/folder was not found in your XML. Otherwise returns a hashref with the following keys/values: $VAR1 = { 'type' => 'image/jpeg', 'modified_sane' => { 'hour' => '12', 'minute' => '28', 'second' => '36', 'month' => '01', 'day' => '26', 'year' => '2008' }, 'perms' => 'RW', 'size' => '40196', 'modified' => '20080126T122836Z' }; type See "type()" method. modified_sane See "modified_sane()" method. perms See "perms()" method. size See "size()" method. modified See "modified()" method. *Note:* the "info()" method does NOT call each of the method listed above, it just takes a piece of "tree()" and appends "modified_sane()" and changes the name of "user-perm" key. Therefore, it's possible that it might contain some extra keys. Let me know if you come across such case. AUTHOR Zoffix Znet, "" (, ) BUGS Please report any bugs or feature requests to "bug-xml-obexftp-folderlisting at rt.cpan.org", or through the web interface at . I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. SUPPORT You can find documentation for this module with the perldoc command. perldoc XML::OBEXFTP::FolderListing You can also look for information at: * RT: CPAN's request tracker * AnnoCPAN: Annotated CPAN documentation * CPAN Ratings * Search CPAN COPYRIGHT & LICENSE Copyright 2008 Zoffix Znet, all rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.