Skip to content
Snippets Groups Projects
Commit df30de14 authored by Russell Bryant's avatar Russell Bryant
Browse files

Add a new option for files-based music on hold to ensure that the sort order

of the files is alphabetical.

(closes issue #10855)
Reported by: jamesgolovich
Patches: 
      asterisk-mohsortalpha.diff.txt uploaded by jamesgolovich (license 176)


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@84168 65c4cc65-6c06-0410-ace0-fbb531ad65f3
parent bff784d5
No related branches found
No related tags found
No related merge requests found
......@@ -39,11 +39,16 @@ directory=/var/lib/asterisk/moh
;[native-random]
;mode=files
;directory=/var/lib/asterisk/moh
;random=yes ; Play the files in a random order
;digit=# ; If this option is set for a class, then when callers are
; ; listening to music on hold, they can press this digit, and
; ; they will switch to listening to this music class.
;sort=random ; Sort the files in random order
;[native-alphabetical]
;mode=files
;directory=/var/lib/asterisk/moh
;sort=alpha ; Sort the files in alphabetical order. If this option is
; ; not specified, the sort order is undefined.
; =========
; Other (non-native) playback methods
......
......@@ -125,6 +125,7 @@ struct moh_files_state {
#define MOH_SINGLE (1 << 1)
#define MOH_CUSTOM (1 << 2)
#define MOH_RANDOMIZE (1 << 3)
#define MOH_SORTALPHA (1 << 4)
struct mohclass {
char name[MAX_MUSICCLASS];
......@@ -810,6 +811,16 @@ static int moh_add_file(struct mohclass *class, const char *filepath)
return 0;
}
static int moh_sort_compare(const void *i1, const void *i2)
{
char *s1, *s2;
s1 = ((char **)i1)[0];
s2 = ((char **)i2)[0];
return strcasecmp(s1, s2);
}
static int moh_scan_files(struct mohclass *class) {
DIR *files_DIR;
......@@ -871,6 +882,8 @@ static int moh_scan_files(struct mohclass *class) {
closedir(files_DIR);
chdir(path);
if (ast_test_flag(class, MOH_SORTALPHA))
qsort(&class->filearray[0], class->total_files, sizeof(char *), moh_sort_compare);
return class->total_files;
}
......@@ -1061,6 +1074,10 @@ static int load_moh_classes(int reload)
class->digit = *var->value;
else if (!strcasecmp(var->name, "random"))
ast_set2_flag(class, ast_true(var->value), MOH_RANDOMIZE);
else if (!strcasecmp(var->name, "sort") && !strcasecmp(var->value, "random"))
ast_set_flag(class, MOH_RANDOMIZE);
else if (!strcasecmp(var->name, "sort") && !strcasecmp(var->value, "alpha"))
ast_set_flag(class, MOH_SORTALPHA);
else if (!strcasecmp(var->name, "format")) {
class->format = ast_getformatbyname(var->value);
if (!class->format) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment