]> git.sur5r.net Git - i3/i3/commitdiff
Get rid of _bytelength, use encode_utf8 and length instead. Correctly check for scalar
authorMichael Stapelberg <michael@stapelberg.de>
Mon, 22 Mar 2010 20:37:44 +0000 (21:37 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Mon, 22 Mar 2010 20:37:44 +0000 (21:37 +0100)
lib/AnyEvent/I3.pm

index 7296a9c591ac07576a6ae384bdce2d286310f78f..2addeb3449724ec3357798a6bf2ee9cecbab3c0b 100644 (file)
@@ -7,6 +7,7 @@ use JSON::XS;
 use AnyEvent::Handle;
 use AnyEvent::Socket;
 use AnyEvent;
+use Encode;
 
 =head1 NAME
 
@@ -76,12 +77,6 @@ my %events = (
     output => ($event_mask | 1),
 );
 
-sub _bytelength {
-    my ($scalar) = @_;
-    use bytes;
-    length($scalar)
-}
-
 sub i3 {
     AnyEvent::I3->new(@_)
 }
@@ -172,7 +167,7 @@ sub subscribe {
     my ($self, $callbacks) = @_;
 
     my $payload = encode_json [ keys %{$callbacks} ];
-    my $message = $magic . pack("LL", _bytelength($payload), 2) . $payload;
+    my $message = $magic . pack("LL", length($payload), 2) . $payload;
     $self->{ipchdl}->push_write($message);
 
     # Register callbacks for each message type
@@ -185,7 +180,8 @@ sub subscribe {
 =head2 $i3->message($type, $content)
 
 Sends a message of the specified C<type> to i3, possibly containing the data
-structure C<payload>, if specified.
+structure C<content> (or C<content>, encoded as utf8, if C<content> is a
+scalar), if specified.
 
     my $reply = $i3->message(TYPE_COMMAND, "reload")->recv;
     if ($reply->{success}) {
@@ -200,13 +196,14 @@ sub message {
 
     my $payload = "";
     if ($content) {
-        if (ref($content) eq "SCALAR") {
-            $payload = $content;
+        if (not ref($content)) {
+            # Convert from Perl’s internal encoding to UTF8 octets
+            $payload = encode_utf8($content);
         } else {
             $payload = encode_json $content;
         }
     }
-    my $message = $magic . pack("LL", _bytelength($payload), $type) . $payload;
+    my $message = $magic . pack("LL", length($payload), $type) . $payload;
     $self->{ipchdl}->push_write($message);
 
     my $cv = AnyEvent->condvar;