I have completed the majority of the code for this module. Renamed it
File::TVShow::Info as well.
There are still a few things to do. But its main function of
extracting key identifying information is complete.
I am including the current README from the pod documentation.
One question however:
1) I have separted some data and arrays containing regex patterns into
seperate files
E.G File:TVShow::EpisodeName.pm
Do I need to VERSION this pm file. The expectation would be that
this file would be updated and this would then
require a minor version update to the File::TVShow::Info Note that
VERSION is 0.01.0.0 so if EpsiodeName is updated
Info would become 0.01.0.1 and a minor update to Info would make
the version 0.01.1.0 with a major code change resulting in 0.02.0.0
I look forward to hearing some feedback.
Kind Regards,
Adam Spann
NAME
File::TVShow::Info - Perl meta data extractor from file name for TV
Show file.
VERSION
Version 0.01.0.0
SYNOPSIS
This module is intended to identify and extract nformation in the file
name of a TV show. These details can then be accessed by calling the
relevant methods. It does NOT attempt to read the contents of the file.
Note: This module will be modelled off
https://metacpan.org/pod/Video::Filename created by Behan Webster, but
will focus on TV Shows only and with additional features.
If the file name is parsed and can not be identified as a TV show then
"is_tv_show" will return 0.
use File::TVShow::Info;
my $show = File::TVShow::Info->new('file');
Methods
new
Create a Info object to extract meta information from the file name.
my $show = File::TVShow::Info->new('file');
Object attributes.
Attributes may be accessed through $show->{attribute_name} however
methods do exist for all required operations.
* show_name: Name of the show.
* original_show_name: This will contain the show name found in the
file name without any modifications. This will only be defined if
_isolate_name_year has found a year string within the file name such
as name.2019, name.(2019), name 2018, name (2018)
* season: Show season
* episode: Show episode
* episode_name
* country
* endep: (Naming under consideration) last Episode number found when
file name contains SXXEXXEXX
* year, month, date: Show date e.g 2019.03.03 This can be accessed
using the method "ymd" Note: year will be defined in two cases. One:
show name contains year. show_name.yyyy or Two: File name contains
YYYY.MM.DD that are identified by date. These are mutually exclusive
and no conflict is expected.
* source
* resolution: Show resolution 480p/720p and so on. This will be '' if
not found.
* release_group
* is_subtitle
* subtitle_lang
* ext: File extension
show_name
Return the show name found in the file name.
strip_show_name
Return show_name after removing string delimiters
original_show_name
Return the original show name.
This method will return the orginal show name if original_show_name is
defined. This will be defined if show_name contains a year string
(YYYY) or YYYY
If not defined it will return {show_name}
season
Return the season found in the file name. Return '' if {season} is not
defined.
season_to_int
Return season as an integer
episode
Return the episode found in the file name. Return '' if {episode} is
not defined.
episode_to_int
Return episode as an integer
source
Return the source of tv show. Return '' if not defined. Yet to be
coded.
is_multi_episode
Return 1 if this is a multi-episode file SXXEXXEXX. Return 0 if false
This is true if {endep} is defined.
season_episode
Return SXXEXX or SXXEXXEXX for single or multi episode files. Return ''
if not created
This would only return an empty string if the show_name is not formated
as show_name.SXX.*
has_year
Return 1 if year is defined else return 0
year
Return the year found in the file name. Return '' if {year} is not
defined.
month
Return the month found in the file name. Return '' if {month} is not
defined.
date
Return the date found in the file name. Return '' if {date} is not
defined.
ymd
Return the complete date string as 'YYYY.MM.DD' Ruturn '' if attributes
{year}, {month}, and {date} are not defined.
resolution
Return resolution found in the file name. Return '' if {resolution} is
not defined.
release_group
Return release_group found in the file name. Return '' if
{release_group} is not defined.
episode_name
Return episode_name. Return '' if {extra_meta} is not defined or can
not determine episode name.
Note: episode name MUST directly follow SXXEXX or it can not be found.
strip_episode_name
Return episode name without delimiters.
country
Return country found in {show_name}. Return '' if not defined
ext
Return file extension. {ext}
is_tv_show
Return 1 if identified as a TV Show. Default is 0
is_tv_subtitle
Return 1 if the file is a subtitle file, 0 if {is_subtitle} is not
defined.
The file must also return true for is_tv_show() or the result is 0
has_subtitle_lang
Return 1 if subtitle language was found, Return 0 if {subtitle_lang} is
not defined.
Must also return 1 for is_tv_subtitle()
subtitle_lang
Return the language of the subtitle file: eng or en. Return '' if
{subtitle_lang} is not defined.
has_country
Return 1 if country was found, Return 0 if {country} is not defined.
Must also return 1 for is_tv_subtitle()
is_by_date
Return 1 if by date. Default is 0
This will be true where year, month and date are all defined.
show_name.yyyy.mm.dd.ext
is_by_season
Return 1 if by season. Default is 0
Requires {season} and {episode} to be defined.
AUTHOR
Adam Spann, <baspann at gmail.com>
On Thu, 21 Mar 2019 at 00:13, Adam Spann <[email protected]> wrote:
>
> Thanks for the suggestions. I have decided to go with Info.
>
> At this point support legacy regex appears pretty straight forward. But I
> agree. It will be removed.
> I run my code on an old mac mini, late 2009 which has perl 5.14
>
> Thanks again for the feedback.
>
> Adam
>
> On Sun, 17 Mar 2019 at 04:09, John M. Gamble <[email protected]> wrote:
>>
>> I would tend toward Info myself. The existence of Video::Info is
>> irrelevant except for highlighting that Info is a valid choice. But I also
>> admit that's just me, and I tend to view Parse in a language context.
>>
>> Don't bother trying to support Perl versions less that 5.10. Last I
>> checked the (admittedly unscientific) surveys, 5.10 was the lowest version
>> that had a sizeable usage percentage, and on a personal level, I just
>> don't want to support Perls with flawed security.
>>
>> My current modules either have a minimum required versions of 5.10.1, or
>> 5.16.1, depending on whether I might have to deal with Unicode. I've never
>> had a complaint (I don't write pragmas or system-oriented code, so it's
>> never been anything I've need to worry about).
>>
>> -john
>>
>> On Thu, March 14, 2019 10:56 pm, Adam Spann wrote:
>> > Hello Everyone,
>> >
>> > I am considering a module to supplement Video::Filename written by
>> > Behan Webster. I have tried reaching out to him in the past couple of
>> > weeks. Submitting a patch to provide support for show
>> > name.yyyy.mm.dd.ext
>> >
>> >
>> > In the mean time I have been considering if a specific module for TV
>> > Shows only might also be worth while, of course with additional
>> > features and support.
>> >
>> > See attached podtotext file.
>> >
>> > I have a few questions.
>> >
>> > 1)
>> > Would it be better to go with Parse, Meta, or Info since we are
>> > attempting to get meta data from from the file naming. There is
>> > already a Video::Info which does the deep dive into the file contents
>> > from what I have read. I have not used the module itself.
>> >
>> > 2)
>> > Should I keep support for perl below version 5.10 as versions below
>> > this do not support named groups in regex. I have seen on PerlMonks
>> > that there are still questions being asked by people using perl
>> > versions less than 5.10
>> >
>> >
>> > Looking forward to hearing back.
>> >
>> > Best,
>> > Adam Spann
>> >
>>
>>