1
0
mirror of https://github.com/Tha14/toxic.git synced 2024-11-16 04:03:02 +01:00

add audio settings for conf file

This commit is contained in:
Jfreegman 2014-04-08 17:20:21 -04:00
parent 9fbf7bd1c1
commit 4643996c3a
No known key found for this signature in database
GPG Key ID: 3627F3144076AE63
6 changed files with 69 additions and 22 deletions

View File

@ -6,3 +6,9 @@ autolog:0;
# 1 to use native terminal colours, 0 to use toxic default colour theme # 1 to use native terminal colours, 0 to use toxic default colour theme
colour_theme:0; colour_theme:0;
# preferred audio input device; numbers correspond to /lsdev in
audio_in_dev:0;
# preferred audio output device; numbers correspond to /lsdev out
audio_out_dev:0;

View File

@ -21,7 +21,6 @@
#include <unistd.h> #include <unistd.h>
#include <stdlib.h> #include <stdlib.h>
#define MAX_DEVICES 32
#define _cbend pthread_exit(NULL) #define _cbend pthread_exit(NULL)
#define AUDIO_FRAME_SIZE (av_DefaultSettings.audio_sample_rate * av_DefaultSettings.audio_frame_duration / 1000) #define AUDIO_FRAME_SIZE (av_DefaultSettings.audio_sample_rate * av_DefaultSettings.audio_frame_duration / 1000)
@ -36,12 +35,6 @@ typedef struct _DeviceIx {
int index; /* Current index */ int index; /* Current index */
} DeviceIx; } DeviceIx;
typedef enum _Devices
{
input,
output,
} _Devices;
struct _ASettings { struct _ASettings {
DeviceIx device[2]; DeviceIx device[2];
@ -72,6 +65,21 @@ static void print_err (ToxWindow *self, uint8_t *error_str)
line_info_add(self, NULL, NULL, NULL, error_str, SYS_MSG, 0, 0); line_info_add(self, NULL, NULL, NULL, error_str, SYS_MSG, 0, 0);
} }
int device_set(ToxWindow *self, _Devices type, long int selection)
{
uint8_t error_str[MAX_STR_SIZE];
uint8_t *s_type = type == input ? "input" : "output";
if ( selection < 0 || selection >= ASettins.device[type].size ) {
snprintf(error_str, sizeof(error_str), "Cannot set audio %s device: Invalid index", s_type);
line_info_add(self, NULL, NULL, NULL, error_str, SYS_MSG, 0, 0);
return -1;
}
ASettins.device[type].index = selection;
return 0;
}
/* Opens device under current index /* Opens device under current index
*/ */
int device_open (ToxWindow *self, _Devices type) int device_open (ToxWindow *self, _Devices type)
@ -710,14 +718,10 @@ void cmd_change_device(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (
goto on_error; goto on_error;
} }
if ( selection < 0 || selection >= ASettins.device[type].size ) { if ( device_set(self, type, selection ) == 0) {
error_str = "No device with such index";
goto on_error;
}
ASettins.device[type].index = selection;
snprintf(msg, sizeof(msg), "Selected: %s", ASettins.device[type].devices[selection]); snprintf(msg, sizeof(msg), "Selected: %s", ASettins.device[type].devices[selection]);
line_info_add(self, NULL, NULL, NULL, msg, SYS_MSG, 0, 0); line_info_add(self, NULL, NULL, NULL, msg, SYS_MSG, 0, 0);
}
return; return;
on_error: on_error:

View File

@ -7,6 +7,8 @@
#include <tox/toxav.h> #include <tox/toxav.h>
#define MAX_DEVICES 32
typedef struct ToxWindow ToxWindow; typedef struct ToxWindow ToxWindow;
typedef enum _AudioError typedef enum _AudioError
@ -17,6 +19,12 @@ typedef enum _AudioError
ErrorStartingCoreAudio = 1 << 2 ErrorStartingCoreAudio = 1 << 2
} AudioError; } AudioError;
typedef enum _Devices
{
input,
output,
} _Devices;
/* You will have to pass pointer to first member of 'windows' /* You will have to pass pointer to first member of 'windows'
* declared in windows.c otherwise undefined behaviour will * declared in windows.c otherwise undefined behaviour will
*/ */
@ -26,5 +34,6 @@ void terminate_audio();
int errors(); int errors();
int start_transmission(ToxWindow *self); int start_transmission(ToxWindow *self);
int device_set(ToxWindow *self, _Devices type, long int selection);
#endif /* _audio_h */ #endif /* _audio_h */

View File

@ -505,6 +505,8 @@ int main(int argc, char *argv[])
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
memset(user_settings, 0, sizeof(struct user_settings));
int settings_err = settings_load(user_settings, NULL); int settings_err = settings_load(user_settings, NULL);
init_term(); init_term();
@ -538,12 +540,15 @@ int main(int argc, char *argv[])
av = init_audio(prompt, m); av = init_audio(prompt, m);
if ( errors() == NoError ) if ( errors() == NoError )
msg = "Audio started with no problems."; msg = "Audio initiated with no problems.";
else /* Get error code and stuff */ else /* Get error code and stuff */
msg = "Error starting audio!"; msg = "Error initiating audio!";
line_info_add(prompt, NULL, NULL, NULL, msg, SYS_MSG, 0, 0); line_info_add(prompt, NULL, NULL, NULL, msg, SYS_MSG, 0, 0);
device_set(prompt, input, user_settings->audio_in_dev);
device_set(prompt, output, user_settings->audio_out_dev);
#endif /* _SUPPORT_AUDIO */ #endif /* _SUPPORT_AUDIO */
if (f_loadfromfile) if (f_loadfromfile)

View File

@ -25,11 +25,14 @@
#include "toxic_windows.h" #include "toxic_windows.h"
#include "configdir.h" #include "configdir.h"
#include "audio_call.h"
#include "settings.h" #include "settings.h"
static void uset_autolog(struct user_settings *s, int val); static void uset_autolog(struct user_settings *s, int val);
static void uset_time(struct user_settings *s, int val); static void uset_time(struct user_settings *s, int val);
static void uset_colours(struct user_settings *s, int val); static void uset_colours(struct user_settings *s, int val);
static void uset_ain_dev(struct user_settings *s, int val);
static void uset_aout_dev(struct user_settings *s, int val);
struct { struct {
const char *name; const char *name;
@ -38,6 +41,8 @@ struct {
{ "autolog", uset_autolog }, { "autolog", uset_autolog },
{ "time", uset_time }, { "time", uset_time },
{ "colour_theme", uset_colours }, { "colour_theme", uset_colours },
{ "audio_in_dev", uset_ain_dev },
{ "audio_out_dev", uset_aout_dev },
}; };
static void uset_autolog(struct user_settings *s, int val) static void uset_autolog(struct user_settings *s, int val)
@ -58,6 +63,22 @@ static void uset_colours(struct user_settings *s, int val)
s->colour_theme = val == NATIVE_COLS ? NATIVE_COLS : DFLT_COLS; s->colour_theme = val == NATIVE_COLS ? NATIVE_COLS : DFLT_COLS;
} }
static void uset_ain_dev(struct user_settings *s, int val)
{
if (val < 0 || val > MAX_DEVICES)
val = (long int) 0;
s->audio_in_dev = (long int) val;
}
static void uset_aout_dev(struct user_settings *s, int val)
{
if (val < 0 || val > MAX_DEVICES)
val = (long int) 0;
s->audio_out_dev = (long int) val;
}
int settings_load(struct user_settings *s, char *path) int settings_load(struct user_settings *s, char *path)
{ {
char *user_config_dir = get_user_config_dir(); char *user_config_dir = get_user_config_dir();

View File

@ -20,13 +20,15 @@
* *
*/ */
#define NUM_SETTINGS 3 #define NUM_SETTINGS 5
/* holds user setting values */ /* holds user setting values */
struct user_settings { struct user_settings {
int autolog; /* boolean */ int autolog; /* boolean */
int time; /* 12 or 24 */ int time; /* 12 or 24 */
int colour_theme; /* boolean (0 for default toxic colours) */ int colour_theme; /* boolean (0 for default toxic colours) */
long int audio_in_dev;
long int audio_out_dev;
}; };
enum { enum {