aboutsummaryrefslogtreecommitdiff
path: root/main/src/ui/util/file_metadata_providers.vala
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/ui/util/file_metadata_providers.vala')
-rw-r--r--main/src/ui/util/file_metadata_providers.vala27
1 files changed, 27 insertions, 0 deletions
diff --git a/main/src/ui/util/file_metadata_providers.vala b/main/src/ui/util/file_metadata_providers.vala
new file mode 100644
index 00000000..9e8d9640
--- /dev/null
+++ b/main/src/ui/util/file_metadata_providers.vala
@@ -0,0 +1,27 @@
+using Dino.Entities;
+using Xmpp;
+using Xmpp.Xep;
+using Gtk;
+
+namespace Dino.Ui.Util {
+
+public class AudioVideoFileMetadataProvider: Dino.FileMetadataProvider, Object {
+ public bool supports_file(File file) {
+ string? mime_type = file.query_info("*", FileQueryInfoFlags.NONE).get_content_type();
+ if (mime_type == null) {
+ return false;
+ }
+ return mime_type.has_prefix("audio") || mime_type.has_prefix("video");
+ }
+
+ public async void fill_metadata(File file, Xep.FileMetadataElement.FileMetadata metadata) {
+ MediaFile media = MediaFile.for_file(file);
+ media.notify["prepared"].connect((object, pspec) => {
+ Idle.add(fill_metadata.callback);
+ });
+ yield;
+ metadata.length = media.duration / 1000;
+ }
+}
+
+} \ No newline at end of file