sound_resource.vala 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /*
  2. * Copyright (c) 2012-2026 Daniele Bartolini et al.
  3. * SPDX-License-Identifier: GPL-3.0-or-later
  4. */
  5. namespace Crown
  6. {
  7. public struct SoundResource
  8. {
  9. public Database _db;
  10. public Guid _id;
  11. public SoundResource(Database db
  12. , Guid id
  13. , string source_sound
  14. )
  15. {
  16. _db = db;
  17. _id = id;
  18. _db.create(_id, OBJECT_TYPE_SOUND);
  19. _db.set_string(_id, "source", source_sound);
  20. }
  21. public int save(Project project, string resource_name)
  22. {
  23. return _db.save(project.absolute_path(resource_name) + "." + OBJECT_TYPE_SOUND, _id);
  24. }
  25. public static void import(Import import_result, Database database, string destination_dir, SList<string> filenames)
  26. {
  27. Project project = database._project;
  28. foreach (unowned string filename_i in filenames) {
  29. GLib.File file_src = File.new_for_path(filename_i);
  30. GLib.File file_dst = File.new_for_path(Path.build_filename(destination_dir, file_src.get_basename()));
  31. string resource_filename = project.resource_filename(file_dst.get_path());
  32. string resource_path = ResourceId.normalize(resource_filename);
  33. string resource_name = ResourceId.name(resource_path);
  34. try {
  35. file_src.copy(file_dst, FileCopyFlags.OVERWRITE);
  36. } catch (Error e) {
  37. loge(e.message);
  38. import_result(ImportResult.ERROR);
  39. return;
  40. }
  41. Database db = new Database(project);
  42. var sound_resource = SoundResource(db, Guid.new_guid(), resource_path);
  43. if (sound_resource.save(project, resource_name) != 0) {
  44. import_result(ImportResult.ERROR);
  45. return;
  46. }
  47. }
  48. import_result(ImportResult.SUCCESS);
  49. }
  50. }
  51. } /* namespace Crown */