=pod

=head1 NAME

Net::Citadel::ToDo - To Do items for the Net::Citadel Perl extension.


=head1 TODO

=head2 General

Add a function for the MRTG command, possibly as a separate module like
C<Net::Citadel::MRTG> since it should be in the C<Net::Citadel> namespace
but does not require a login and therefore does not need the C<new> 
function in the main module.

Add a function for the INFO command, possibly as the function C<citadel_info>.

Add a ZIPFLAGS configuration item for dist/zipdist in Makefile.PL?

Add a note in the documenation about the Net::Citadel repository and home page
at GitHub? Also include a refernce to where it is available at the C<gitpan>
CPAN mirror at GitHub?


=head2 Contstants

Use the Readonly module instead of C<use constant> for the constants being 
defined in the module.

There are some numbers being used that are actually constants; change to
using Readonly to define them for use in the code, unless there are other
standard constants that can be used, like those for the flock operations.

When converting the user related constants, also move them up with the
rest of the constants definitions.

Add POD documentation for the constants, inline with where they are defined
so it also serves as documentation when looking at the source.

A C<NO_SUCH_USER> return code is mentioned in the command documentation (for
the USER command, for instance,) but the module doesn't currently appear to
define it.


=head2 Functions

Add an explicit C<return> line as necessary to those subroutines that do not
have them.

Export some functions, at least using C<EXPORT_OK>? Perhaps for the ones that do
require a login to run?

=over 4

=item C<assert_room> function

Is the C<assert_room> command coming up with the correct floor information?

Is the C<assert_room> function sending the parameters for the CRE8 command
properly? (There is a note in the code indicating an uncertainty about what
should be sent.)


=item function C<new>

Add being able to set the port option; if not present, it would default to
the standard Citadel port number (using the C<CITADEL_PORT> constant).


=item C<citadel_time> function

The current C<citadel_time> function only returns the first two parameters
from the TIME command:  C<1347624956|-14400>.  The Citadel TIME command itself
actually returns a line like this: C<200 1347625545|-14400|1|1347537300>,
with the '200' being the OK code and the rest being the four fields that it
returns. So as currently written, the function doesn't return the daylight
savings time indication and the actual citadel server start information.
Function first needs to be changed to at least return all parameters.

Rewrite the C<citadel_time> function to unpack the parameters that the
TIME command returns when it is successful, and then return them to
the calling program in a hash? Could also then return the hash with a 
key named 'error' or 'Error' if it is not successful. Update its POD
to reflect the changes.


=item C<citadel_echo> function

It appears to test if what was sent was actually received back but doesn't
explicitly return any indication one way or another; the function just
croaks if there is no match. Add an explicit return of the value
returned from the command? Or just return true for a normal exit?

=back


=head2 Documentation

Add something like Net::Citadel::Tutorial for examples of the use and configuration
of the module.


=head2 Testing

Change the names of the test floors and rooms to something like C<Test Floor>
and C<Test Room>?

In the testing related to users, change to using the name TestUser.

Implement the testing for the C<retract_floor> function.

Update the testing for the C<citadel_time> function to at least check the
number of parameters returned? Three of the parameters are Unix timestamps;
validate those in some way? The fourth parameter being returned is a Boolean
and is used to indicate Daylight Savings Time and should be a '0' or a '1'.

When testing for a floor, it looks for C<Main Floor>; that exists on
a default install but may not be on an working system. Make it another
configuration item, which if not configured would default to C<Main Floor>?

Separate the testing to: functions that do not require a log in, those that do
require a log in, those that are read only, those that write to the server. Or
use the separation given in the documentation for the different Sections for
the commands?

Add a C<Testing> section of some sort to the configuration file?


=head1 SEE ALSO

 L<Net::Citadel>


=head1 AUTHOR

Robert James Clay, C<< <jame at rocasa.us> >>

=head1 COPYRIGHT AND LICENSE

Copyright 2012 Robert James Clay, all rights reserved.

This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.

=cut
