aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2016-09-17 18:23:47 -0400
committerTeddy Wing2016-09-17 18:23:47 -0400
commit6cd7b7da10759eb88e5ff3c4dd49a60ac8dacf3b (patch)
treeeae7e351fb45f9cc34355e1f2b8f0d68b2af9fc3
parente0fa2d455da59a40710f87c6f20b8ea891857411 (diff)
parent39633259cc8ece82b93f396f2e675946576b7128 (diff)
downloadirssi-slack-profile-6cd7b7da10759eb88e5ff3c4dd49a60ac8dacf3b.tar.bz2
Merge branch 'profile-field-completion'
-rw-r--r--TODO2
-rw-r--r--slack_profile.pl59
2 files changed, 50 insertions, 11 deletions
diff --git a/TODO b/TODO
index fc47479..d9cac93 100644
--- a/TODO
+++ b/TODO
@@ -16,7 +16,7 @@ v Get the requested user's GitHub URL and Gigster Karma fields (needs users.prof
v3:
v Add a command to set/change the current user's profile fields
-- Profile field completion (see https://github.com/irssi/scripts.irssi.org/blob/22060fc4669627a9859c92efa2d6651e3673d494/scripts/go.pl)
+v Profile field completion (see https://github.com/irssi/scripts.irssi.org/blob/22060fc4669627a9859c92efa2d6651e3673d494/scripts/go.pl)
- Pad colons
v4:
diff --git a/slack_profile.pl b/slack_profile.pl
index 14e96dd..1f9f3a7 100644
--- a/slack_profile.pl
+++ b/slack_profile.pl
@@ -166,10 +166,40 @@ sub underscorize {
return $result;
}
+sub complete_profile_field {
+ my ($complist, $window, $word, $linestart, $want_space) = @_;
+ my $slash = Irssi::parse_special('$k');
+
+ return unless $linestart =~ /^\Q${slash}\Eslack_profile_set\b/i;
+
+ my @profile_fields = qw(first_name last_name email phone skype title);
+
+ if ($window->{'active_server'}) {
+ my $user = find_user($window->{'active_server'}->{'nick'});
+
+ for my $custom_field (keys %{$user->{'fields'}}) {
+ push @profile_fields, underscorize($user->{'fields'}->{$custom_field}->{'label'});
+ }
+ }
+
+ if ($word ne '') {
+ for my $field (@profile_fields) {
+ if ($field =~ /^\Q${word}\E/i) {
+ push @$complist, $field;
+ }
+ }
+ }
+ else {
+ @$complist = @profile_fields;
+ }
+
+ Irssi::signal_stop();
+}
+
sub update_user_profile {
- my ($key, $value) = @_;
+ my ($nick, $key, $value) = @_;
- my $user = find_user($server->{'nick'});
+ my $user = find_user($nick);
my @profile_fields = qw(first_name last_name email phone skype title);
@@ -194,10 +224,13 @@ sub update_user_profile {
}
sub cmd_set {
- my ($data) = @_;
+ my ($data, $server) = @_;
my ($key, $value) = split /\s+/, $data, 2;
+ my $nick = $server->{'nick'};
- update_user_profile($key, $value);
+ if ($key) {
+ update_user_profile($nick, $key, $value);
+ }
}
sub find_user {
@@ -215,6 +248,16 @@ sub find_user {
for my $user (@users_list) {
if ($user->{'name'} eq $username) {
+ unless (exists $user->{'fields'}) {
+ my $profile = fetch_user_profile($user);
+ $user->{'fields'} = $profile->{'fields'};
+ }
+
+ unless (exists $user->{'presence'}) {
+ my $presence = fetch_user_presence($user);
+ $user->{'presence'} = $presence;
+ }
+
return $user;
}
}
@@ -273,12 +316,6 @@ sub swhois {
$username =~ s/^@//;
if (my $user = find_user($username)) {
- my $profile = fetch_user_profile($user);
- $user->{'fields'} = $profile->{'fields'};
-
- my $presence = fetch_user_presence($user);
- $user->{'presence'} = $presence;
-
print_whois($user);
}
}
@@ -290,5 +327,7 @@ Irssi::command_bind('slack_profile_set', 'cmd_set');
Irssi::command_bind('help', 'help');
+Irssi::signal_add('complete word', 'complete_profile_field');
+
Irssi::settings_add_str('slack_profile', 'slack_profile_token', '');