App-SpreadRevolutionaryDate

 view release on metacpan or  search on metacpan

lib/App/SpreadRevolutionaryDate/MsgMaker/Telechat.pm  view on Meta::CPAN

#
# This file is part of App-SpreadRevolutionaryDate
#
# This software is Copyright (c) 2019-2026 by Gérald Sédrati.
#
# This is free software, licensed under:
#
#   The GNU General Public License, Version 3, June 2007
#
use 5.014;
use utf8;
package App::SpreadRevolutionaryDate::MsgMaker::Telechat;
$App::SpreadRevolutionaryDate::MsgMaker::Telechat::VERSION = '0.54';
# ABSTRACT: MsgMaker class for L<App::SpreadRevolutionaryDate> to build message with Téléchat date

use Moose;
with 'App::SpreadRevolutionaryDate::MsgMaker';

use DateTime;
use File::ShareDir ':ALL';
use App::SpreadRevolutionaryDate;

use Locale::TextDomain 'App-SpreadRevolutionaryDate';
use namespace::autoclean;

has '+locale' => (
  default => 'fr',
);

around BUILDARGS => sub {
  my ($orig, $class, %args) = @_;

  $args{locale} = 'fr';
  return $class->$orig(%args);
};


sub compute {
  my $self = shift;

  my %telechat_calendars = (
    '0tvtime' => {
      '0101' => ['flaque d\'eau', 'flaques d\'eau', 'f'],
      '0102' => ['cadre', 'cadres', 'm'],
      '0103' => ['compte-gouttes', 'compte-gouttes', 'm'],
      '0104' => ['laisse de chien', 'laisses de chien', 'f'],
      '0105' => ['bocal', 'bocaux', 'm'],
      '0106' => ['gibier', 'gibiers', 'm'],
      '0107' => ['pare-chocs', 'pare-chocs', 'f'],
      '0108' => ['tranche de jambon', 'tranches de jambon', 'f'],
      '0109' => ['patate', 'patates', 'f'],
      '0110' => ['appareil de photo', 'appareils de photo', 'm'],
      '0111' => ['raisin sec', 'raisins secs', 'm'],
      '0112' => ['trognon de pomme', 'trognons de pomme', 'm'],
      '0113' => ['fil à couper le beurre', 'fils à couper le beurre', 'm'],
      '0114' => ['casse-noisettes', 'casse-noisettes', 'm'],
      '0115' => ['machine à faire des trous dans les spaguettis', 'machines à faire des trous dans les spaguettis', 'm'],
      '0116' => ['cure-dents', 'cure-dents', 'm'],
      '0117' => ['stylo-feutre', 'stylos-feutres', 'm'],
      '0118' => ['parcmètre', 'parcmètres', 'm'],
      '0119' => ['journal', 'journaux', 'm'],
      '0120' => ['toast', 'toasts', 'm'],
      '0121' => ['colis', 'colis', 'm'],
      '0122' => ['sèche-cheveux', 'sèche-cheveux', 'm'],
      '0123' => ['papier carbone', 'papiers carbone', 'm'],
      '0124' => ['savonnette', 'savonnettes', 'f'],
      '0125' => ['épluchure', 'épluchures', 'f'],
      '0126' => ['cactus', 'cactus', 'm'],
      '0127' => ['sac de dame', 'sacs de dame', 'm'],
      '0128' => ['jus de fruits', 'jus de fruits', 'm'],
      '0129' => ['mot d\'excuse', 'mots d\'excuse', 'm'],
      '0130' => ['sent-bon', 'sent-bon', 'm'],
      '0131' => ['machine à coudre', 'machines à coudre', 'f'],
      '0201' => ['pique-nique', 'pique-niques', 'm'],
      '0202' => ['bonbon à la menthe', 'bonbons à la menthe', 'm'],
      '0203' => ['sabre', 'sabres', 'm'],
      '0204' => ['uniforme', 'uniformes', 'm'],
      '0205' => ['bulle de savon', 'bulles de savon', 'f'],
      '0207' => ['pince à linge', 'pinces à linge', 'f'],
      '0208' => ['peau de banane', 'peaux de banane', 'f'],
      '0209' => ['marguerite', 'marguerites', 'f'],
      '0210' => ['avion en papier', 'avions en papier', 'm'],
      '0211' => ['brosse à cheveux', 'brosses à cheveux', 'f'],
      '0212' => ['équilibre', 'équilibres', 'm'],
      '0213' => ['théière', 'théière', 'f'],
      '0214' => ['porte-monnaie', 'porte-monnaie', 'm'],
      '0215' => ['pince à épiler', 'pinces à épiler', 'f'],
      '0216' => ['essuie-glace', 'essuie-glaces', 'm'],
      '0217' => ['cheminée d\'usine', 'cheminées d\'usine', 'f'],
      '0218' => ['farces et attrapes', 'farces et attrapes', 'f'],
      '0219' => ['gant de boxe', 'gants de boxe', 'm'],
      '0220' => ['cible', 'cibles', 'f'],
      '0221' => ['carte de crédit', 'cartes de crédit', 'f'],

lib/App/SpreadRevolutionaryDate/MsgMaker/Telechat.pm  view on Meta::CPAN

      '1107' => ['bloc-notes', 'blocs-notes', 'm'],
      '1108' => ['routoir', 'routoirs', 'm'],
      '1109' => ['guenille', 'guenilles', 'f'],
      '1110' => ['lunette de soleil', 'lunettes de soleil', 'f'],
      '1111' => ['octavin', 'octavins', 'm'],
      '1112' => ['toque à trois cornes', 'toques à trois cornes', 'f'],
      '1113' => ['navire-hôpital', 'navires-hôpitaux', 'm'],
      '1114' => ['sesquiplan', 'sesquiplans', 'm'],
      '1115' => ['baldaquin', 'baldaquins', 'm'],
      '1116' => ['anémoscope', 'anémoscopes', 'm'],
      '1117' => ['clavicythérium', 'clavicythériums', 'm'],
      '1118' => ['certificat de conformité', 'certificats de conformité', 'm'],
      '1119' => ['bonnet de nuit', ' bonnets de nuit', 'm'],
      '1120' => ['atmomètre', 'atmomètres', 'm'],
      '1121' => ['pnéomètre', 'pnéomètres', 'm'],
      '1122' => ['marie-salope', 'marie-salopes', 'f'],
      '1123' => ['lettre de crédit', 'lettres de crédit', 'f'],
      '1124' => ['cithare', 'cithares', 'f'],
      '1125' => ['tramezzino', 'tramezzinos', 'm'],
      '1126' => ['ichcahuipilli', 'ichcahuipillis', 'f'],
      '1127' => ['journal intime', 'journaux intimes', 'm'],
      '1128' => ['harpe celtique', 'harpes celtiques', 'f'],
      '1129' => ['noeud d’agui', 'noeuds d’agui', 'm'],
      '1130' => ['cabotière', 'cabotières', 'f'],
      '1201' => ['pique-oeuf', 'pique-oeufs', 'm'],
      '1202' => ['revue de contrat', 'revues de contrats', 'f'],
      '1203' => ['grande surface', 'grandes surfaces', 'f'],
      '1204' => ['manteau de cheminée', 'manteaux de cheminées', 'm'],
      '1205' => ['charentaise', 'charentaises', 'f'],
      '1206' => ['chasse-goupille', 'chasse-goupilles', 'm'],
      '1207' => ['chaussure à orteils', 'chaussures à orteils', 'f'],
      '1208' => ['giroflée à cinq pétales', 'giroflées a cinq pétales', 'f'],
      '1209' => ['salade de phalanges', 'salades de phalanges', 'f'],
      '1210' => ['rogntudju', 'rogntudju', 'm'],
      '1211' => ['lixiviateuse', 'lixiviateuses', 'f'],
      '1212' => ['chaise berçante', 'chaises berçantes', 'f'],
      '1213' => ['chebec', 'chebec', 'm'],
      '1214' => ['boulevard circulaire', 'boulevards circulaires', 'm'],
      '1215' => ['bande cyclable', 'bandes cyclables', 'f'],
      '1216' => ['coupe-boulons', 'coupe-boulons', 'm'],
      '1217' => ['clé à pipe', 'clés à pipe', 'f'],
      '1218' => ['zeugme', 'zeugmes', 'm'],
      '1219' => ['tricordeur à ampoules sous vide', 'tricordeurs à ampoules sous vide', 'm'],
      '1220' => ['diptyque', 'diptyques', 'm'],
      '1221' => ['clavette basculante', 'clavettes basculantes', 'f'],
      '1222' => ['glassophone', 'glassophones', 'm'],
      '1223' => ['métaphore', 'métaphores', 'f'],
      '1224' => ['pentécontère', 'pentécontères', 'm'],
      '1225' => ['sapin à trois roues', 'sapins à trois roues', 'm'],
      '1226' => ['cumulus bourgeonnant', 'cumulus bourgeonnants', 'm'],
      '1227' => ['pyréolophore', 'pyréolophores', 'm'],
      '1228' => ['soubassophone', 'soubassophones', 'm'],
      '1229' => ['vastringue', 'vastringues', 'm'],
      '1230' => ['vocifération sportive', 'vociférations sportives', 'f'],
      '1231' => ['connotation de proximité temporelle', 'connotations de proximité temporelle', 'f'],
    },
  );

  my @telechat_days = ('Lourdi', 'Pardi', 'Morquidi', 'Jourdi', 'Dendrevi', 'Sordi', 'Mitanche');

  my $today = DateTime->now(locale => $self->locale);
  my $day_name = $telechat_days[$today->day_of_week_0];

  my @calendars = sort keys %telechat_calendars;
  my $calendar_key = sprintf("%02d", $today->month).sprintf("%02d", $today->day);
  shift @calendars unless $telechat_calendars{'0tvtime'}->{$calendar_key};
  my $chosen_calendar = @calendars[rand @calendars];
  my $feast = $telechat_calendars{$chosen_calendar}->{$calendar_key};
  my $feast_gender = $feast->[2] eq 'm' ? 'Saint' : 'Sainte';
  my $feast_singular = $feast->[0];
  $feast_singular =~ s/\b(\w)/\U$1/g;
  my $feast_plural = $feast->[1];
  my $every_gender = $feast->[2] eq 'm' ? 'tous' : 'toutes';

  if ($self->special_birthday_day && $self->special_birthday_month && $self->special_birthday_name && $today->day == $self->special_birthday_day && $today->month == $self->special_birthday_month) {
      $feast_gender = $self->special_birthday_gender eq 'm' ? 'Saint' : 'Sainte';
      $feast_singular = $self->special_birthday_name;
      $feast_plural = $self->special_birthday_plural;
      $every_gender = $self->special_birthday_gender eq 'm' ? 'tous' : 'toutes';
  }

  my $msg = sprintf("Chalut ! Aujourd'hui, %s %d, c'est la %s-%s.\nBonne fête à %s les %s !", $day_name, $today->day, $feast_gender, $feast_singular, $every_gender, $feast_plural);

  my $img_path = dist_file('App-SpreadRevolutionaryDate', 'images/groucha.png');
  my $img_alt = "Grouchat de Téléchat : « $msg »";
  $img_alt =~ s/\n+/ /g;
  my $img = {path => $img_path, alt => $img_alt};

  return ($msg, $img);
}


no Moose;
__PACKAGE__->meta->make_immutable;

# A module must return a true value. Traditionally, a module returns 1.
# But this module is a revolutionary one, so it discards all old traditions.
# Idea borrowed from Jean Forget's DateTime::Calendar::FrenchRevolutionary.
"Quand le gouvernement viole les droits du peuple,
l'insurrection est pour le peuple le plus sacré
et le plus indispensable des devoirs";

__END__

=pod

=encoding UTF-8

=head1 NAME

App::SpreadRevolutionaryDate::MsgMaker::Telechat - MsgMaker class for L<App::SpreadRevolutionaryDate> to build message with Téléchat date

=head1 VERSION

version 0.54

=head1 METHODS

=head2 compute

Computes date of the day similar to the Belgian-French TV show 'Téléchat" on the 1980's. Takes no argument. Returns message as string and hash with the path to an image file of Groucha, the presenter of Téléchat, and its alt text, with 'path' and...



( run in 0.887 second using v1.01-cache-2.11-cpan-ceb78f64989 )