xref: /haiku/src/bin/installsound.cpp (revision 899e0ef82b5624ace2ccfa5f5a58c8ebee54aaef)
1 // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
2 //
3 //  Copyright (c) 2001-2003, Haiku
4 //
5 //  This software is part of the Haiku distribution and is covered
6 //  by the MIT License.
7 //
8 //
9 //  File:        installsound.cpp
10 //  Author:      Jérôme Duval
11 //  Description: manages sound events
12 //
13 // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
14 
15 #include <stdio.h>
16 #include <stdlib.h>
17 #include <Application.h>
18 #include <Entry.h>
19 #include <MediaFiles.h>
20 #include <Path.h>
21 #include <String.h>
22 
23 void
24 usage(void)
25 {
26 	printf("installsound eventname filename\n");
27 	printf("        installs a new named sound event in the Sounds preferences panel.\n");
28 	printf("installsound --list\n");
29 	printf("        lists all sound events.\n");
30 	printf("installsound --test eventname\n");
31 	printf("        prints the file for the given event name, or nothing and returns error if none.\n");
32 	printf("installsound --clear eventname\n");
33 	printf("        clears a named event in the Sounds preferences panel.\n");
34 	printf("installsound --remove eventname\n");
35 	printf("        removes a named event from the Sounds preferences panel.\n");
36 	exit(1);
37 }
38 
39 int main(int argc, const char **argv)
40 {
41 	// Make sure we have the minimum number of arguments.
42 	if (argc < 2) usage();
43 
44 	BApplication app("application/x-vnd.be.installsound");
45 
46 	BMediaFiles mfiles;
47 
48 	if(strcmp(argv[1], "--list")==0) {
49 		mfiles.RewindRefs(BMediaFiles::B_SOUNDS);
50 
51 		BString name;
52 		entry_ref ref;
53 		while(mfiles.GetNextRef(&name,&ref) == B_OK) {
54 			printf("%s:\t%s\n", name.String(),BPath(&ref).Path());
55 		}
56 	} else {
57 		if (argc != 3) usage();
58 
59 		if(strcmp(argv[1], "--test")==0) {
60 			entry_ref ref;
61 			if(mfiles.GetRefFor(BMediaFiles::B_SOUNDS, argv[2], &ref) == B_OK)
62 				printf("%s\n", BPath(&ref).Path());
63 			else {
64 				printf("%s: No such sound event\n", argv[2]);
65 				exit(1);
66 			}
67 		} else if(strcmp(argv[1], "--clear")==0) {
68 			entry_ref ref;
69 			if(mfiles.GetRefFor(BMediaFiles::B_SOUNDS, argv[2], &ref) == B_OK)
70 				mfiles.RemoveRefFor(BMediaFiles::B_SOUNDS, argv[2], ref);
71 			else {
72 				printf("clear %s: No such sound event\n", argv[2]);
73 				exit(1);
74 			}
75 		} else if(strcmp(argv[1], "--remove")==0) {
76 			if(mfiles.RemoveItem(BMediaFiles::B_SOUNDS, argv[2]) != B_OK) {
77 				printf("remove %s: No such sound event\n", argv[2]);
78 				exit(1);
79 			}
80 		} else {
81 			entry_ref ref;
82 			if(get_ref_for_path(argv[2], &ref)!=B_OK || !BEntry(&ref, true).Exists()) {
83 				printf("error: %s not found\n", argv[2]);
84 				exit(1);
85 			}
86 
87 			mfiles.SetRefFor(BMediaFiles::B_SOUNDS, argv[1], ref);
88 		}
89 	}
90 
91 	exit(0);
92 }
93