tune.c
author Myhailo Danylenko <isbear@ukrpost.net>
Mon, 21 May 2012 19:10:25 +0300
changeset 31 e404cd1c7077
parent 29 23fa36d480fb
child 35 a77a8e7ab8ae
permissions -rw-r--r--
Drop publish_*, rework build system * use foreach and lists in cmake * put hook and option names in cmake configurable variables * put module descriptions into cmake variables * use cmake-provided options in .rc * use cmake-provided module description in header and avv files * rename headers to pep_*.h * remove publish_*() * api versions for pep_* bumped to 2 (incompatible) * update documentation * rework & optimize tune outgoing handler (ex-tune_publish) * ignore backup files at installation
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
29
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     1
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     2
/* Copyright 2009-2012 Myhailo Danylenko
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     3
 *
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     4
 * This file is part of mcabber-pep
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     5
 *
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     6
 * mcabber-pep is free software: you can redistribute it and/or modify
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     7
 * it under the terms of the GNU General Public License as published by
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     8
 * the Free Software Foundation, either version 2 of the License, or
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     9
 * (at your option) any later version.
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    10
 *
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    11
 * This program is distributed in the hope that it will be useful,
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    14
 * GNU General Public License for more details.
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    15
 *
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    16
 * You should have received a copy of the GNU General Public License
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    17
 * along with this program.  If not, see <http://www.gnu.org/licenses/>. */
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    18
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    19
#include <glib.h>
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    20
#include <string.h>
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    21
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    22
#include <mcabber/commands.h>
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    23
#include <mcabber/compl.h>
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    24
#include <mcabber/utils.h>
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    25
#include <mcabber/screen.h>
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    26
#include <mcabber/logprint.h>
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    27
#include <mcabber/roster.h>
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    28
#include <mcabber/hbuf.h>      // HBUF_PREFIX_*
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    29
#include <mcabber/hooks.h>
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    30
#include <mcabber/modules.h>
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    31
31
e404cd1c7077 Drop publish_*, rework build system
Myhailo Danylenko <isbear@ukrpost.net>
parents: 29
diff changeset
    32
#include "pep_tune.h"
29
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    33
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    34
#include "config.h"
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    35
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    36
//
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    37
//  module description
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    38
//
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    39
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    40
void tune_init   (void);
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    41
void tune_uninit (void);
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    42
31
e404cd1c7077 Drop publish_*, rework build system
Myhailo Danylenko <isbear@ukrpost.net>
parents: 29
diff changeset
    43
#define DESCRIPTION ( TUNE_DESCRIPTION )
29
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    44
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    45
static const gchar *deps[] = { "pep_tune", NULL };
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    46
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    47
static module_info_t info_tune_dev = {
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    48
	.branch      = "dev",
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    49
	.api         = 20,
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    50
	.version     = PROJECT_VERSION,
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    51
	.description = DESCRIPTION,
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    52
	.requires    = deps,
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    53
	.init        = tune_init,
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    54
	.uninit      = tune_uninit,
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    55
	.next        = NULL,
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    56
};
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    57
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    58
static module_info_t info_tune_0_10_0 = {
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    59
	.branch      = "0.10.0",
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    60
	.api         = 1,
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    61
	.version     = PROJECT_VERSION,
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    62
	.description = DESCRIPTION,
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    63
	.requires    = deps,
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    64
	.init        = tune_init,
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    65
	.uninit      = tune_uninit,
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    66
	.next        = &info_tune_dev,
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    67
};
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    68
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    69
module_info_t info_tune = {
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    70
	.branch      = "0.10.1",
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    71
	.api         = 1,
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    72
	.version     = PROJECT_VERSION,
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    73
	.description = DESCRIPTION,
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    74
	.requires    = deps,
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    75
	.init        = tune_init,
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    76
	.uninit      = tune_uninit,
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    77
	.next        = &info_tune_0_10_0,
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    78
};
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    79
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    80
//
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    81
//  globals
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    82
//
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    83
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    84
#ifdef MCABBER_API_HAVE_CMD_ID
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    85
static gpointer tune_cmid     = NULL;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    86
static gboolean tune_set_safe = FALSE;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    87
#endif
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    88
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    89
static guint tune_cid        = 0;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    90
static guint tune_hid_tunein = 0;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    91
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    92
//
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    93
//  code
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    94
//
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    95
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    96
static void do_tune (char *arg)
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    97
{
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    98
	hk_arg_t tags[] = {
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    99
		{ "artist", NULL },
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   100
		{ "length", NULL },
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   101
		{ "rating", NULL },
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   102
		{ "source", NULL },
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   103
		{ "title",  NULL },
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   104
		{ "track",  NULL },
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   105
		{ "uri",    NULL },
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   106
		{ NULL,     NULL },
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   107
	};
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   108
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   109
	if (!*arg) { // request
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   110
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   111
		GError *error = NULL;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   112
31
e404cd1c7077 Drop publish_*, rework build system
Myhailo Danylenko <isbear@ukrpost.net>
parents: 29
diff changeset
   113
		pep_tune_request ( CURRENT_JID, &error );
29
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   114
		if ( error ) {
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   115
			scr_log_print ( LPRINT_NORMAL, "Error sending request: %s.", error -> message );
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   116
			g_error_free ( error );
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   117
		} else
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   118
			scr_log_print ( LPRINT_NORMAL, "Request sent." ); // XXX
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   119
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   120
		return;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   121
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   122
	} else if (arg[0] != '-' || arg[1] != '\0') { 
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   123
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   124
		char *p;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   125
		char *argstart     = NULL;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   126
		char *argstop      = NULL;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   127
		char *tagstart     = NULL;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   128
		char *tagstop      = NULL;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   129
		char *wordstart    = arg;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   130
		gboolean proceed   = TRUE;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   131
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   132
// pt = p, ws = wordstart, ts = tagstart, tt = tagstop, as = argstart, at = argstop
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   133
// tag=value value tag=value
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   134
// w  p
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   135
// s  t
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   136
// t  ta
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   137
// s  t*
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   138
// tag=value value tag=value
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   139
// t  ta    p
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   140
// s  t*    t
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   141
// t  ta    aw
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   142
// s  ts    ts
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   143
// tag=value value tag=value
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   144
// t  ta    aw    p
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   145
// s  ts    ts    t
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   146
// t  ta          aw
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   147
// s  ts          ts
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   148
// tag=value value tag=value
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   149
// t  ta          aw  p
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   150
// s  ts          ts  t
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   151
//                 t  ta
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   152
//                 s  t*
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   153
// tag=value value tag=value
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   154
//                 t  ta    p
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   155
//                 s  t*    t
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   156
//                 t  ta    a
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   157
//                 s  ts    t
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   158
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   159
		for (p = arg; proceed; ++p) {
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   160
			switch (*p) {
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   161
			case '=':
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   162
				if (tagstart && tagstop - tagstart) {
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   163
					// process previous args
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   164
					hk_arg_t *tag;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   165
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   166
					for (tag = tags; tag->name; ++tag) {
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   167
						if (!strncmp (tag->name, tagstart, tagstop - tagstart)) {
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   168
							g_free ( (gchar *) tag->value );
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   169
							if (argstop - argstart) {
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   170
								*argstop = '\0';
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   171
								tag->value = to_utf8 (argstart);
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   172
							}
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   173
							break;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   174
						}
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   175
					}
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   176
				}
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   177
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   178
				tagstart = wordstart;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   179
				tagstop  = p;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   180
				argstop  = p+1;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   181
				argstart = p+1;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   182
				break;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   183
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   184
			case '\0':
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   185
				argstop = p;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   186
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   187
				if (tagstop - tagstart) {
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   188
					// process previous args
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   189
					hk_arg_t *tag;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   190
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   191
					for (tag = tags; tag->name; ++tag) {
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   192
						if (!strncmp (tag->name, tagstart, tagstop - tagstart)) {
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   193
							g_free ( (gchar *) tag->value );
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   194
							if (argstop - argstart)
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   195
								tag->value = to_utf8 (argstart);
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   196
							break;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   197
						}
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   198
					}
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   199
				}
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   200
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   201
				proceed = FALSE;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   202
				break;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   203
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   204
			case ' ':
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   205
				argstop = p;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   206
				wordstart = p+1;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   207
				break;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   208
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   209
			default:
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   210
				break;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   211
			}
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   212
		}
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   213
	}
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   214
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   215
	hk_run_handlers ( HOOK_TUNE_OUT, tags );
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   216
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   217
	{
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   218
		hk_arg_t *tag;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   219
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   220
		for (tag = tags; tag->name; ++tag)
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   221
			g_free ( (gchar *) tag->value );
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   222
	}
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   223
}
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   224
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   225
static guint tune_htih ( const gchar *htype, hk_arg_t *args, gpointer udata )
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   226
{
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   227
	GString     *mesg = g_string_new ( NULL );
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   228
	const gchar *from = NULL;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   229
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   230
	{
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   231
		hk_arg_t *arg;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   232
		for ( arg = args; arg -> name; arg ++ )
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   233
			if ( arg -> value ) {
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   234
				if ( ! strcmp ( arg -> name, "from" ) )
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   235
					from = arg -> value;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   236
				else
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   237
					g_string_append_printf ( mesg, "\n - %s: %s", arg -> name, arg -> value );
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   238
			}
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   239
	}
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   240
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   241
	if (mesg->len)
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   242
		g_string_prepend (mesg, "Now listens to:");
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   243
	else
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   244
		g_string_overwrite (mesg, 0, "Now listening to nothing");
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   245
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   246
	{ // print to buddy's buffer
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   247
		gchar *jid = jidtodisp ( from );
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   248
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   249
		scr_write_incoming_message ( jid, mesg->str, 0, HBB_PREFIX_INFO|HBB_PREFIX_NOFLAG, 0 ); // NO conversion from utf-8
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   250
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   251
		g_free ( jid );
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   252
	}
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   253
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   254
	g_string_free ( mesg, TRUE );
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   255
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   256
	return HOOK_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   257
}
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   258
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   259
void tune_init(void)
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   260
{
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   261
	tune_cid = compl_new_category ();
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   262
	if (tune_cid) {
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   263
		compl_add_category_word (tune_cid, "artist=");
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   264
		compl_add_category_word (tune_cid, "length=");
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   265
		compl_add_category_word (tune_cid, "rating=");
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   266
		compl_add_category_word (tune_cid, "source=");
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   267
		compl_add_category_word (tune_cid, "title=");
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   268
		compl_add_category_word (tune_cid, "track=");
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   269
		compl_add_category_word (tune_cid, "uri=");
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   270
	}
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   271
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   272
#ifndef MCABBER_API_HAVE_CMD_ID
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   273
	cmd_add ("tune", "", tune_cid, tune_cid, do_tune, NULL);
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   274
#else
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   275
	tune_cmid     = cmd_add ("tune", "", tune_cid, tune_cid, do_tune, NULL);
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   276
	tune_set_safe = cmd_set_safe ("tune", TRUE);
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   277
#endif
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   278
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   279
	tune_hid_tunein = hk_add_handler (tune_htih, HOOK_TUNE_IN, G_PRIORITY_DEFAULT, NULL);
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   280
}
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   281
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   282
void tune_uninit(void)
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   283
{
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   284
	hk_del_handler (HOOK_TUNE_IN, tune_hid_tunein);
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   285
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   286
#ifndef MCABBER_API_HAVE_CMD_ID
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   287
	cmd_del ("tune");
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   288
#else
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   289
	if (tune_cmid)
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   290
		cmd_del (tune_cmid);
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   291
	if (tune_set_safe)
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   292
		cmd_set_safe ("tune", FALSE);
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   293
#endif
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   294
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   295
	if (tune_cid)
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   296
		compl_del_category (tune_cid);
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   297
}
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   298
23fa36d480fb Merge pep modules & use events
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   299
/* vim: se ts=4 sw=4: */