2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-25 03:39:21 +00:00

49_TBot_List: sorting entries plus corrections

git-svn-id: https://svn.fhem.de/fhem/trunk@14275 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
viegener 2017-05-13 21:34:02 +00:00
parent 79636599e7
commit 2f99cdc010
2 changed files with 73 additions and 25 deletions

View File

@ -1,5 +1,6 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it.
- feature: 49_TBot_List: sorting entries plus corrections
- bugfix: 73_PRESENCE: fix restart of threshold counter after FHEM restart
- feature: 44_S7: new attribute receiveTimeoutMs
- feature: 38_CO20: introduced state reading

View File

@ -24,7 +24,7 @@
#
# This module interacts with TelegramBot and PostMe devices
#
# Discussed in FHEM Forum: <not yet> TODO
# Discussed in FHEM Forum: https://forum.fhem.de/index.php/topic,67976.0.html
#
# $Id$
#
@ -62,6 +62,13 @@
# make unsolicited entries configurable
# handle multiline entries --> remove line ends
# handle multiline entries --> multiple entries to be created
# 0.3 2017-03-16
# Fix: undef errors in listhandler resolved
# Menu für gesamte Liste
# Sortierung A-Z und Z-A für Liste
# allow double entries and correct handling
# 0.3 2017-05-13 Menu / Sort und fixes
#
#
@ -103,8 +110,6 @@ sub TBot_List_Undef($$);
sub TBot_List_Set($@);
sub TBot_List_Get($@);
sub TBot_List_ReplacePattern( $$;$ );
sub TBot_List_handler( $$$$;$ );
#########################
@ -720,7 +725,7 @@ sub TBot_List_handler($$$$;$)
@list = TBot_List_getList( $hash );
}
Log3 $name, 4, "JVLISTMGR_handler: $name - after prefetch peer :$peer: chatId :$chatId: msgId :$msgId: ";
Log3 $name, 4, "JVLISTMGR_handler: $name - after prefetch peer :$peer: chatId :$chatId: msgId :".($msgId?$msgId:"<undef>").": ";
#####################
if ( $ret ) {
@ -783,7 +788,7 @@ sub TBot_List_handler($$$$;$)
$inline .= ") " if ( $double == 2 );
$inline .= "(ok:".$name."\%"."list_ok|leeren:".$name."\%"."list_askclr|hinzu:".$name."\%"."list_askadd)";
$inline .= "(ok:".$name."\%"."list_ok|ändern:".$name."\%"."list_menu|hinzu:".$name."\%"."list_askadd)";
my $textmsg = "Liste ".$lname;
$textmsg .= " ist leer " if ( scalar(@list) == 0 );
@ -791,7 +796,6 @@ sub TBot_List_handler($$$$;$)
if ( $cmd eq "list" ) {
# remove msgId if existing
if ( defined($msgId ) ) {
# done old list now and start a new list message
@ -799,7 +803,7 @@ sub TBot_List_handler($$$$;$)
} else {
# there might be still a dialog in another chat
my $oldchatId = TBot_List_getMsgId( $hash, $tbot, $peer, "chat" );
TBot_List_handler( $hash, "list_done", $tbot, $peer, "wurde beendet" ) if ( defined( TBot_List_getMsgId( $hash, $tbot, $oldchatId ) ) );
TBot_List_handler( $hash, "list_done", $tbot, $peer, "wurde beendet" ) if ( $oldchatId && ( defined( TBot_List_getMsgId( $hash, $tbot, $oldchatId ) ) ) );
}
# store text msg to recognize msg id in dummy
@ -846,12 +850,16 @@ sub TBot_List_handler($$$$;$)
my $no = $1;
if ( ( $no >= 0 ) && ( $no < scalar(@list) ) ) {
my $topentry = $list[$no];
my $text = $topentry;
foreach my $entry ( @list ) {
$text .= ",".$entry if ( $entry ne $topentry );
}
# remove from array the entry with the index
splice(@list, $no, 1);
# add it at the beginning
unshift @list, $topentry;
my $text = join(",", @list );
fhem( "set ".TBot_List_getConfigPostMe($hash)." clear $lname " );
fhem( "set ".TBot_List_getConfigPostMe($hash)." add $lname $text" );
@ -884,13 +892,64 @@ sub TBot_List_handler($$$$;$)
if ( ( $no >= 0 ) && ( $no < scalar(@list) ) ) {
fhem( "set ".TBot_List_getConfigPostMe($hash)." remove $lname ".$list[$no] );
# remove from array the entry with the index
splice(@list, $no, 1);
my $text = join(",", @list );
fhem( "set ".TBot_List_getConfigPostMe($hash)." clear $lname " );
fhem( "set ".TBot_List_getConfigPostMe($hash)." add $lname $text" );
# show updated list -> call recursively
TBot_List_handler( $hash, "list_edit", $tbot, $peer, " Eintrag geloescht" );
}
#####################
} elsif ( $cmd eq "list_menu" ) {
# post new msg to ask what to do on list
if ( defined($msgId ) ) {
# show menu
my $textmsg = "Liste ".$lname." ?";
# show menu msg
fhem( "set ".$tbot." queryEditInline $msgId ".'@'.$chatId." (Sortieren:".$name."\%"."list_asksrt|Leeren:".$name."\%"."list_askclr|Zurück:".$name."\%"."list_edit) $textmsg" );
} else {
$ret = "TBot_List_handler: $name - $tbot ERROR no msgId known for peer :$peer: chat :$chatId: cmd :$cmd: ".(defined($arg)?"arg :$arg:":"");
}
#####################
} elsif ( $cmd eq "list_asksrt" ) {
# post new msg to ask for srt
if ( defined($msgId ) ) {
# show ask for sort
my $textmsg = "Liste ".$lname." sortieren ?";
# show ask msg
fhem( "set ".$tbot." queryEditInline $msgId ".'@'.$chatId." (Ja - von A-Z:".$name."\%"."list_srtyes1|Ja - von Z-A:".$name."\%"."list_srtyes2|Nein:".$name."\%"."list_edit) $textmsg" );
} else {
$ret = "TBot_List_handler: $name - $tbot ERROR no msgId known for peer :$peer: chat :$chatId: cmd :$cmd: ".(defined($arg)?"arg :$arg:":"");
}
#####################
} elsif ( $cmd =~ /list_srtyes(\d)/ ) {
my $stype = $1;
# means sort all entries - now it is confirmed
# sort depending on stype
if ( scalar(@list) > 0 ) {
if ( $stype == 1 ) {
@list = sort {$a cmp $b} @list;
} else {
@list = sort {$b cmp $a} @list;
}
my $text = join( ",", @list );
fhem( "set ".TBot_List_getConfigPostMe($hash)." clear $lname " );
fhem( "set ".TBot_List_getConfigPostMe($hash)." add $lname $text" );
}
# show updated list -> call recursively
TBot_List_handler( $hash, "list_edit", $tbot, $peer, " Liste sortiert" );
#####################
} elsif ( $cmd eq "list_askclr" ) {
# post new msg to ask for clr
@ -1063,18 +1122,6 @@ sub TBot_List_handler($$$$;$)
##############################################################################
#####################################
# INTERNAL: get pattern replaced
# TODO - adapt for texts
sub TBot_List_ReplacePattern( $$;$ ) {
my ( $pattern, $id, $name ) = @_;
$pattern =~ s/q_id_q/$id/g if ( defined($id) );
$pattern =~ s/q_name_q/$name/g if ( defined($name) );
return $pattern;
}
#####################################
# notify function provide dev and
# is corresponding to the delete command the opposite to the define function