HaikuDepot: notify work status from main window
[haiku.git] / src / kits / midi / MidiSettings.cpp
blob508ef63a7f0f81f139c79e1701c8af5727caa971
1 /*
2 * Copyright 2015 Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 */
6 #include <MidiSettings.h>
8 #include <File.h>
9 #include <FindDirectory.h>
10 #include <Path.h>
12 #include <driver_settings.h>
14 #include <stdio.h>
15 #include <stdlib.h>
16 #include <string.h>
18 #define SETTINGS_FILE "Media/midi_settings"
20 namespace BPrivate {
22 status_t
23 read_midi_settings(struct midi_settings* settings)
25 if (settings == NULL)
26 return B_ERROR;
28 BPath path;
29 status_t status = find_directory(B_USER_SETTINGS_DIRECTORY, &path);
30 if (status != B_OK)
31 return status;
33 path.Append(SETTINGS_FILE);
34 void* handle = load_driver_settings(path.Path());
35 if (handle == NULL)
36 return B_ERROR;
38 const char* soundfont = get_driver_parameter(handle, "soundfont", NULL,
39 NULL);
40 if (soundfont == NULL) {
41 unload_driver_settings(handle);
42 return B_ERROR;
44 strlcpy(settings->soundfont_file, soundfont,
45 sizeof(settings->soundfont_file));
47 unload_driver_settings(handle);
48 return B_OK;
52 status_t
53 write_midi_settings(struct midi_settings settings)
55 BPath path;
56 status_t status = find_directory(B_USER_SETTINGS_DIRECTORY, &path);
57 if (status != B_OK)
58 return status;
60 path.Append(SETTINGS_FILE);
62 BFile file;
63 if (file.SetTo(path.Path(), B_WRITE_ONLY | B_CREATE_FILE | B_ERASE_FILE)
64 != B_OK)
65 return B_ERROR;
67 char buffer[B_FILE_NAME_LENGTH + 128];
68 snprintf(buffer, sizeof(buffer), "# Midi\n\tsoundfont \"%s\"\n",
69 settings.soundfont_file);
71 size_t bufferSize = strlen(buffer);
72 if (file.InitCheck() != B_OK
73 || file.Write(buffer, bufferSize) != (ssize_t)bufferSize)
74 return B_ERROR;
76 return B_OK;