from https://gitlab.gnome.org/GNOME/easytag/-/merge_requests/16.patch
compatibility added with taglib1

diff '--color=auto' -uNr a/src/tags/gio_wrapper.cc b/src/tags/gio_wrapper.cc
--- a/src/tags/gio_wrapper.cc
+++ b/src/tags/gio_wrapper.cc
@@ -47,11 +47,15 @@
 }
 
 TagLib::ByteVector
+#if (TAGLIB_MAJOR_VERSION == 2)
+GIO_InputStream::readBlock (ulong len)
+#else
 GIO_InputStream::readBlock (TagLib::ulong len)
+#endif
 {
     if (error)
     {
-        return TagLib::ByteVector::null;
+        return TagLib::ByteVector();
     }
 
     TagLib::ByteVector rv (len, 0);
@@ -69,15 +73,25 @@
 }
 
 void
+#if (TAGLIB_MAJOR_VERSION == 2)
+GIO_InputStream::insert (TagLib::ByteVector const &data,
+                         TagLib::offset_t start,
+                         size_t replace)
+#else
 GIO_InputStream::insert (TagLib::ByteVector const &data,
                          TagLib::ulong start,
                          TagLib::ulong replace)
+#endif
 {
     g_warning ("%s", "Trying to write to read-only file!");
 }
 
 void
+#if (TAGLIB_MAJOR_VERSION == 2)
+GIO_InputStream::removeBlock (TagLib::offset_t start, size_t len)
+#else
 GIO_InputStream::removeBlock (TagLib::ulong start, TagLib::ulong len)
+#endif
 {
     g_warning ("%s", "Trying to write to read-only file!");
 }
@@ -200,11 +214,15 @@
 }
 
 TagLib::ByteVector
+#if (TAGLIB_MAJOR_VERSION == 2)
+GIO_IOStream::readBlock (ulong len)
+#else
 GIO_IOStream::readBlock (TagLib::ulong len)
+#endif
 {
     if (error)
     {
-        return TagLib::ByteVector::null;
+        return TagLib::ByteVector();
     }
 
     gsize bytes = 0;
@@ -238,9 +256,15 @@
 }
 
 void
+#if (TAGLIB_MAJOR_VERSION == 2)
+GIO_IOStream::insert (TagLib::ByteVector const &data,
+                      TagLib::offset_t start,
+                      size_t replace)
+#else
 GIO_IOStream::insert (TagLib::ByteVector const &data,
                       TagLib::ulong start,
                       TagLib::ulong replace)
+#endif
 {
     if (error)
     {
@@ -351,9 +375,15 @@
 }
 
 void
+#if (TAGLIB_MAJOR_VERSION == 2)
+GIO_IOStream::removeBlock (TagLib::offset_t start, size_t len)
+{
+    if (start + len >= (ulong)length ())
+#else
 GIO_IOStream::removeBlock (TagLib::ulong start, TagLib::ulong len)
 {
     if (start + len >= (TagLib::ulong)length ())
+#endif
     {
         truncate (start);
         return;
diff '--color=auto' -uNr a/src/tags/gio_wrapper.h b/src/tags/gio_wrapper.h
--- a/src/tags/gio_wrapper.h
+++ b/src/tags/gio_wrapper.h
@@ -33,10 +33,17 @@
     GIO_InputStream (GFile *file_);
     virtual ~GIO_InputStream ();
     virtual TagLib::FileName name () const;
+#if (TAGLIB_MAJOR_VERSION == 2)
+    virtual TagLib::ByteVector readBlock (ulong length);
+    virtual void writeBlock (TagLib::ByteVector const &data);
+    virtual void insert (TagLib::ByteVector const &data, TagLib::offset_t start = 0, size_t replace = 0);
+    virtual void removeBlock (TagLib::offset_t start = 0, size_t length = 0);
+#else
     virtual TagLib::ByteVector readBlock (TagLib::ulong length);
     virtual void writeBlock (TagLib::ByteVector const &data);
     virtual void insert (TagLib::ByteVector const &data, TagLib::ulong start = 0, TagLib::ulong replace = 0);
     virtual void removeBlock (TagLib::ulong start = 0, TagLib::ulong length = 0);
+#endif
     virtual bool readOnly () const;
     virtual bool isOpen () const;
     virtual void seek (long int offset, TagLib::IOStream::Position p = TagLib::IOStream::Beginning);
@@ -61,10 +68,17 @@
     GIO_IOStream (GFile *file_);
     virtual ~GIO_IOStream ();
     virtual TagLib::FileName name () const;
+#if (TAGLIB_MAJOR_VERSION == 2)
+    virtual TagLib::ByteVector readBlock (ulong length);
+    virtual void writeBlock (TagLib::ByteVector const &data);
+    virtual void insert (TagLib::ByteVector const &data, TagLib::offset_t start = 0, size_t replace = 0);
+    virtual void removeBlock (TagLib::offset_t start = 0, size_t len = 0);
+#else
     virtual TagLib::ByteVector readBlock (TagLib::ulong length);
     virtual void writeBlock (TagLib::ByteVector const &data);
     virtual void insert (TagLib::ByteVector const &data, TagLib::ulong start = 0, TagLib::ulong replace = 0);
     virtual void removeBlock (TagLib::ulong start = 0, TagLib::ulong len = 0);
+#endif
     virtual bool readOnly () const;
     virtual bool isOpen () const;
     virtual void seek (long int offset, TagLib::IOStream::Position p = TagLib::IOStream::Beginning);
diff '--color=auto' -uNr a/src/tags/mp4_header.cc b/src/tags/mp4_header.cc
--- a/src/tags/mp4_header.cc
+++ b/src/tags/mp4_header.cc
@@ -105,7 +105,7 @@
     ETFileInfo->bitrate = properties->bitrate ();
     ETFileInfo->samplerate = properties->sampleRate ();
     ETFileInfo->mode = properties->channels ();
-    ETFileInfo->duration = properties->length ();
+    ETFileInfo->duration = properties->lengthInSeconds ();
 
     return TRUE;
 }
diff '--color=auto' -uNr a/src/tags/mp4_tag.cc b/src/tags/mp4_tag.cc
--- a/src/tags/mp4_tag.cc
+++ b/src/tags/mp4_tag.cc
@@ -222,7 +222,7 @@
         FileTag->encoded_by = g_strdup (encodedbys.front ().toCString (true));
     }
 
-    const TagLib::MP4::ItemListMap &extra_items = tag->itemListMap ();
+    const TagLib::MP4::ItemMap &extra_items = tag->itemMap ();
 
     /* Album Artist */
 #if (TAGLIB_MAJOR_VERSION == 1) && (TAGLIB_MINOR_VERSION < 10)
@@ -437,25 +437,12 @@
         fields.insert ("ENCODEDBY", string);
     }
 
-    TagLib::MP4::ItemListMap &extra_items = tag->itemListMap ();
-
     /* Album artist. */
     if (!et_str_empty (FileTag->album_artist))
     {
         TagLib::String string (FileTag->album_artist, TagLib::String::UTF8);
-#if (TAGLIB_MAJOR_VERSION == 1) && (TAGLIB_MINOR_VERSION < 10)
-        /* No "ALBUMARTIST" support in TagLib until 1.10; use atom directly. */
-        extra_items.insert ("aART", TagLib::MP4::Item (string));
-#else
         fields.insert ("ALBUMARTIST", string);
-#endif
     }
-#if (TAGLIB_MAJOR_VERSION == 1) && (TAGLIB_MINOR_VERSION < 10)
-    else
-    {
-        extra_items.erase ("aART");
-    }
-#endif
 
     /***********
      * Picture *
@@ -491,12 +478,12 @@
         TagLib::MP4::CoverArt art (f, TagLib::ByteVector((char *)data,
                                                          data_size));
 
-        extra_items.insert ("covr",
+        tag->setItem("covr",
                             TagLib::MP4::Item (TagLib::MP4::CoverArtList ().append (art)));
     }
     else
     {
-        extra_items.erase ("covr");
+        tag->removeItem("covr");
     }
 
     tag->setProperties (fields);
