summaryrefslogtreecommitdiff
path: root/libgaim/plugins/fortuneprofile.pl
blob: 4a0570efaa98c6975761ca2edee606b24743e2c2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# FORTUNE PROFILE
#
# Sets your AIM profile to a fortune (with a header and footer of your
# choice).
#

# By Sean Egan
# seanegan@gmail.com
# AIM: SeanEgn
#
# Updated by Nathan Conrad, 31 January 2002
# Changes:
#  * Fortunes have HTML tabs and newlines
# AIM: t98502
# ICQ: 16106363
#
# Updated by Mark Doliner, 15 October 2002
# Changes:
#  * Modified to work with the changed perl interface of gaim 0.60
#  * Fixed a bug where your info would be set to nothing if you had 
#    no pre and no post message
# AIM: lbdash
#
# Updated by Christian Hammond, 20 August 2003
# Changes:
#  * Modified to work with the changed perl interface of gaim 0.68
# AIM: ChipX86

# Copyright (C) 2001 Sean Egan

# This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program; if not, write to the Free Software
#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA

use Gaim;

%PLUGIN_INFO = (
	perl_api_version => 2,
	name             => "Fortune Profile",
	version          => "3.4",
	summary          => "Sets your AIM profile to a fortune (with a header and footer of your choice).",
	description      => "Sets your AIM profile to a fortune (with a header and footer of your choice).",
	author           => "Sean Egan <seanegan\@gmail.com>",
	url              => "http://gaim.sf.net/",

	load             => "plugin_load"
);

sub plugin_init {
	return %PLUGIN_INFO;
}

sub plugin_load {
	$plugin = shift;

	$tab = "&nbsp;";
	$tab = $tab . $tab . $tab . $tab;
	$nl = "<BR>";

	$seconds = 30;                   # Delay before updating away messages.
	$max = 1020;                     # Max length of an profile. It should be
									 # 1024, but I am being safe
	$pre_message = "";               # This gets added before the fortune

	$post_message ="";

	$len = 0;
	if ($pre_message ne "") {
	  $len += length( $pre_message . "---$nl" );
	}
	if ($post_message ne "") {
	  $len += length("---$nl" . $post_message);
	}

	# Command to get dynamic message from
	$command = "fortune -sn " . ($max - $len);

	# output the first message and start the timers...
	# This is done as a timeout to prevent attempts to set the
	# profile before logging in.
	Gaim::timeout_add($plugin, $seconds, \&update_away, 0);
}

sub update_away {
  # The fortunes are expanded into HTML (the tabs and newlines) which
  # causes the -s option of fortune to be a little bit meaningless. This
  # will loop until it gets a fortune of a good size (after expansion).

  do {
    do {  #It's a while loop because it doesn't always work for some reason
      $fortune =  `$command`;
      if ($? == -1) {
        return;
      }
    } while ($fortune eq "");
    $fortune =~ s/\n/$nl/g;
    $fortune =~ s/\t/$tab/g;
  } while ((length($fortune) + $len ) > $max);

  $message = $fortune;
  if ($pre_message ne "") {
    $message = $pre_message . "---$nl" . $message;
  }
  if ($post_message ne "") {
    $message = $message . "---$nl" . $post_message ;
  }

  foreach $account (Gaim::accounts()) {
    if ($account->is_connected()) {
      $account->set_user_info($message);
    }
  }

  Gaim::timeout_add($plugin, $seconds, \&update_away, 0);
}