Skip to main content

MovieDB - Releases

← App details

Nextcloud 35

MovieDB 1.5.4
Release Details
UpdatedSept. 21, 2026, 7:59 a.m.
Changelog

Fixed

  • Several UI strings (search placeholders, "Enter movie/TV show title...", "Importing episodes...", "Write your thoughts...") had their trailing ... normalized to a proper ellipsis character () in an earlier change, but the translation files still keyed on the old three-dot strings. Non-English users were seeing raw English fallbacks for these. All five locales (de, es, fr, it, nl) are now back in sync.
  • Added the missing translation for "Failed to leave library. Please try again." across all locales.
  • Fixed a typo in the Spanish translation of that message ("abandonador" → "abandonar").

Thanks to @ba3r for reporting and fixing the translation drift (#47).

Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignatureKoU6GVlNgvtWAC9hWlSkVvK1e4m0Y/0Hm54qQTDgucO86ZdlP3OkJu0TehQ5O0K5
xtVq3jNUvkeoU/rewdLnREnVclfkBsmjeE2WGBgEIp1oM9xivg1jun3kXdXp/FWy
H5vL5MZZkUOLLGztrUJ/wli+DNicZbeEYK636MSpG+WO9gFGMrJRgNFu/34/p+OA
CyTpmSRW/1o5JwamYxGW1eCXwrJcDng3nzvyaq9HcYanMLU4LJi5XF43ZZXyJEJS
iywTogu3BDPfS0cfZly9SG3n5aSROV3FGjYjgOi1abjXZthovKHBps/HCnqmeBB7
vvjsNT15+QgbHgMKJmBLa/2NSb2iRbHxWj7RemBnW5t0LYpaTM+GiubOoPEACDkR
U8ty8UhynqAK6SHT1mmYlc1tk6JCaNy+Dxr8EiqY7hBwt/FkgIh6d4a3ySxljpR9
ef3QFu1PKn/2gGoAxLJYqo29L8i/u1QMBSlnC4/+vFoIqJjZU+t8J7Xto50uGV5e
0UUdOlmfYRH2PfzRO0y/C/nLMIVNsdgthndN0E5qogcT5f7hYVnne1BN/tllc93C
2ypAmgn8NEaksRJPw+2CZF9HADe5s6hijyXScWZz90KDWdUu0eCC8KLSp/bTQuaz
hCfgEJ1r+VdIuKxcDvfRExeCcby8RelgGPIlHxA37Go=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.5.3
Release Details
UpdatedSept. 20, 2026, 8:51 p.m.
Changelog

Fixed

  • Fresh installs on Nextcloud 32 no longer fail during occ app:enable. Three boolean columns (episodes.watched, libraries.is_personal, library_members.permission_edit) were declared NOT NULL in a way NC 32's migration validator rejects, and the moviedb_library_members table name hit NC's identifier-length limit for an auto-generated primary key name. Existing installs (including upgrades) are unaffected.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignatureSM91S8OUY7ERDhmFmiIJXRNo6AZzurMLVq7lFZy0GYfMwT5arI2CYJa1XlO1tUxk
0hDrvIY570YgZ1z6wWak3fd+855YYvMEjvUjT4TEBmsa76ZWKogg3TLFSUuFlqaB
Ktw9gKw4VsGqce4jinvAiSi66ZmRcTFJZd6nltqUrFQmzhcSDlshJkYs2UCqmIQL
7j56ylMMxhLWx2/zfMn14InRqNyXZuHzamrgGLKY+65BW+y/mlHZvGS/Pf/ivOD7
8JOR9NbLhtk3rO/g/ymTJW6smRkl1XcXKzutRxjQMzwZBFc4GQhwmAHFDGWx8B3O
yTiyZGKhvO//UKIEDk/JPcYU8lNOLN7MAN9QJgPGStblMasS0Hvlj1AfryTQS+Uj
SWTLlfWd3FjPB8sPc7i+V3i/CohnKKCiEJ2XX+tviVErn5z2l3hVw1RzQHyHCKea
fOyfL6CpCZQOWgmJuRpFkdoeRiw2PeH03cMN+4FeBTnV5cktpL+qcMA3uDyfpxAD
ijRxYDvmSj81Ylb83Aa7HdO5W4NJPaimu+rzX2wagomBpLeab7VT3Z2lT76E/h7Q
89r/KbnnsjEZBzasOmTYZ8cSx8di785gJcdqoh7tlronUTRm1TJJDgPX1P3gBCkm
GUsmBDZmrZ75Ubl3Wz3LSKWz7DMNkncZaPMZNRAtH7k=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.5.2
Release Details
UpdatedSept. 20, 2026, 7:22 p.m.
Changelog

Fixed

  • "Watches by Year" on the Dashboard now groups by the year you actually watched a movie/show, not its release/air year. Matches the "year in review" convention used by Trakt/Letterboxd.
  • The "Watches by Year" chart no longer stretches to fill most of the screen when there are only a few bars (e.g. a small watch history).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
Signaturekai3DGfd2M037yLLMLcYqZWHi6lneYfEykTrNFtz+M4LA4eh0LS7NhfOCnOcf+Hn
otpQkbSb1+VtwlQba40wUBtoQn0CHrgZ+TfUsCX09I5NGSBDZiq+mtlCexIL8tWN
i9xD5jkfxocBn63s5Iw9tG6IXqBCEspaR9GIdJsRp+3tNV62uCederi+LWpfaErn
YYbNGMXMhlXyObkamiA0Y02bIGOg9r7iHURklVUdObG5NKMUnldG+b3iqfpU7Gz6
7otcc3I00Cq3KxSB+ZAypTml6DjrYpf54zp8JL0lMi63QfXBNjSY+dkwR00+ufqC
RGIwZN5v1azDVMOD0zHUQyS4Hk5425tpX2gzq4QneEQXc8pCKLPq4Nedf0ghEf9q
snHNMvJB3vgW5dsUlRMtvPEK2FzA9oQR7SASx6+DoO72/tba3adeAtpFfMKLjh97
WPkuR7JfKENrDSzONzZou13ylsWVmc6Qx/1WA2Y3mlxOZOndIbGZYVqXomKOgXGR
Cf1ECEBvQQrdNLaRVSl6/yma4UNVNOOHp8OoszZNV49NkIuprLbbDQruB5I6e+fN
lmzmIWOQOeaU8hcw6422L1E2e7/oPtwNVr1BDFWHIb5AhDvEgDijh//MgHXtyhtf
Sk0OYyQYmbrw5Nj8jqGrhV4Q3FXtLmvj5otumk0QDPM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.5.1
Release Details
UpdatedSept. 20, 2026, 6:30 p.m.
Changelog

Fixed

  • The v1.5.0 release tarball contained stray macOS AppleDouble (._*) files and extended-attribute metadata (from com.apple.provenance, newly applied to files by macOS 26/27), which broke the Nextcloud App Store installer's "exactly one top-level folder" check on some upgrades (Extracted app moviedb has more than 1 folder). This release is content-identical to 1.5.0, repackaged with COPYFILE_DISABLE=1 and explicit xattr/AppleDouble stripping.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignatureMNWzJHDY5k2lApRRKmevWNUpqhtY7kORwD4FBvXTTscE2boide8e2JzJMSw7qbW/
OddgepINDy5AHgUw6hLbSmREvG5r44+VAoj6GJFtcJiTL/k4RHfSEECbEzBUNIsE
+Qray3p5h2sZH5Cqykq96pcGL230tEj8+tz4G6XQNMoOeghb5SZrdVeUcwpQGeoj
5ojYPd5TkUY3B+biuJxe4LwolWJRrxhNrW4E5WIgoibzO5VDggwyHK5GUDsLIiTb
uot1f546sL0WxbcW07K8kXJ5nnKbA25eRDvEqtgHBxNs667wb2ArMCAcEdLwR822
oFungmHhkXN5qTouDg95dbdoCBddYOE7lrK/viiIsD5xYwJ45/pWGHd0NeMJiDcN
+2NHrLC4pPo1k3PQ3snp6SG0DSOF5Sc/90ygd0CdWR2QDEDvYLnxIaooB17VUzeZ
3CtIlNJLoPmgMNTu7/H9o6YpaL1Z4CHerTbsd1VdlXGMzmm4kZk5N4v7LQFrpb1K
eRh6/kNjomkns7u4yJErdTsYICC6mgrnbRKIAqEIn9bagmjyQl5nMH9Jpa7Jl+5O
hL7ZekiXjEzvWL4YvrRyupxUVKBZklGmxhNMGpoelHpT1/wm1GSXKCnkUA8TTjMe
NXTKWJrwNHe03RlOCEhPYtNcik/xF04KICtAMi74iII=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.5.0
Release Details
UpdatedSept. 20, 2026, 3:19 p.m.
Changelog

Added

  • Dashboard now includes "Watches by Year" and "Watches by Platform" charts, including TV show watches (previously excluded from these stats). Both charts share a new "Show" filter to view All / Movies / TV Shows only.
  • Watchlist pagination (page/limit params, matching Movie/Series), fixing the previously unbounded /api/watchlist response.

Changed

  • Visual polish pass: consistent card hover/shadow treatment across MovieCard/SeriesCard/Dashboard stat cards (shared radius/shadow/transition values), a subtle poster gradient scrim for badge legibility, per-stat accent colors on the Dashboard, and richer chart styling — gradient-filled bars with a grow-in animation on Watches by Year, gradient fills and a smoother track on Watches by Platform.

Fixed

  • Recently Watched and Top Rated cards on the Dashboard no longer collapse into unreadable narrow strips on mobile viewports.
  • The Dashboard chart filter control no longer overflows the screen on narrow viewports.
  • /api/watchlist, /api/movies, and /api/series no longer throw a division-by-zero error on limit=0, or accept a negative page/limit that produced a negative offset — all three now clamp to sane minimums. totalPages is now consistently returned as an integer.
  • The watchlist's media-type filter no longer silently returns zero results on an unrecognized mediaType value — invalid values are now treated as "no filter", matching the stats endpoints' existing behavior.
  • Changing sort order on the watchlist while on a later page no longer leaves the user on a now out-of-range page; sorting resets to page 1.
  • The Dashboard's media-type "Show" filter is now visibly grouped with both charts it affects (under one "Watch Statistics" section) instead of appearing to apply only to "Watches by Year".
  • Switching the active shared library no longer leaves stale watchlist pagination/filter state behind — a page number or type filter left over from a previous library (which may have far more or fewer items) could point past the end of the new library's results and show a false empty state. Movies/TV filters are reset the same way.
  • The sidebar's watchlist counter badge now always reflects the library's true total, not a search/media-type-filtered count — previously applying a filter on the Watchlist page made the badge appear to shrink until the filter was cleared.
  • Opening the Watchlist page no longer fires two competing API requests (one before the active library was known, one after) — the first could return data for the wrong library depending on response timing.
  • Rapidly switching the Dashboard's "Show" chart filter no longer risks displaying stale data if an earlier request resolves after a later one.

Changed

  • Extracted the duplicated mediaType query-param validation from StatsController/WatchlistController into a shared helper on AuthenticatedController.
  • Added a resetFilters() action to the watchlist store (mirroring Movies/Series) so sort/type-filter/pagination resets follow one consistent pattern across Watchlist.vue and the shared-library switcher.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
Signaturexlyj+iMssN5+P1t+mfcYmQON/vtzerlnfPfb8QSxeAxwBvZCluFiIJ0MO6YY2R1K
4mwFvG4Kd1wjQULGd4g4fN+VN7UwsS4Jdp4jolx+qKIc5Hm5YGtTjO0DgOe3AfmX
5NuQzUgbV2f8SEhb7mVKsMIC51HCez2r+AEq0AQOaNOVv6SETZ8FzsYofWHZwxUU
5YzsBD1fOGilOLQEx3oEwqxHLQaknCOnmrKR++jF7v0Qtz85zp8oC9cophzJD7ei
BayPpbB1q8oX73mt4t+yCfWbzgBZRGWrsxPuAuP4YUYAMm8v4ii8RSuE+zeGDwv1
yFwxbmvCqw3SvIvLo4XP/ep0RQcOjt1SKMS6lfilIKZKfx+2oA+JcC5tR9fUC9w7
8SfAxBcm8uunMGl3SCKMlFig9CRJU80q1S//vtTWi5zJOh8Jdvc5fLg4T2weamsE
MeqD0OYlniLRWuhVR05FNxUeFKLMnDtdYU2hHhgAn420sfpPxIIaax9rS+DgBMqu
m6l2oOxXe74Rj6BjyvoPquYEXg30DBGl3isNgxD7j+93CKrXFUgltL7wqE/mXFVb
pw2/ZzaRbnY2qwBpfYXmYRi0n1CYpKdKSJtMNCQw2rG7MGhAeeO4/UJvGhg/DRdb
O2URYsUTmQmu5gOP81hXZ0hsLYIunFdLqn8nSnTnO6M=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.4.1
Release Details
UpdatedSept. 13, 2026, 2:22 p.m.
Changelog

Fixed

  • Translation placeholders now render correctly in paginated movie lists.

Tests

  • Added regression coverage for translated placeholders and plural arguments.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignaturefW/4adHB/dpgcR8RMr/F6/964k5AHNAz9qD1DjFFnAh/tVFcjQpUrd7ZBR8+Sc1uSe9NE8oogHa/WZ6bGr81mR1tdzUPq2jAzS91oCz6EM5o0eH3zkx21JjMLdZWJGQ2aSlqa14s/EtjgYWtWUS1HOHRfIyCmPvbvJciWQIZPXyD0GUnr5EENxgzvOm2n4duZ510ATiozQ2g3+IvlY/Mnm7rdwzza44Uokre3SSnnwi5aCA/GBjZdq3Eyu7EWtPNqUCyiW3+8l32GF1IqInQC5X00eKrEKfao8A8Zyvt6+3omx92rw4MObORIZnr7VSvu5yd7S8mz5bR72dSbNVFz1omC2DkhZquLvTE1ETLE3sxHuqEAjD0DC7CmqMIUy+mnRcNBSDdkgnuae2TOklbJK14m2tXNovCBL6BtGqIt4kPHBNloxr+zeanzhjwR/8Qz/xPbGudy7P6rGGPrdVk8GzRm+tCbh6TvhtMmYSo+GDsaJN9zQ8Tocsul7Ja960NN1jVJjIQhtyWQtd5Ym+TlPZ5UjmIqEmWrbWyzRdwzXgfAT6J1IE6hXZvujWfxFZV3u0seVej2gowsJDGD69/iWjtC5WVliAAoGTNBcjgBewO11+TeIb4HMa2cQsg9VdDeYMF/Uegawce68Tc39qWFl7YFDnG/iYnT/61T8r4QtQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.4.0
Release Details
UpdatedSept. 1, 2026, 6:57 p.m.
Changelog

Added

  • Shared Libraries: create named libraries and share your movie/TV collection with other Nextcloud users — assign viewer or editor roles, manage members, and switch between libraries from a single account. Everything about a title (catalog, watchlist, episode progress, ratings, platform, review) is shared across all library members; user_id on catalog rows becomes legacy attribution only — library membership is the sole access gate
  • New DB tables moviedb_libraries and moviedb_library_members; all catalog tables gain a library_id NOT NULL column (Migrations V5 → V7)
  • V5 backfills every user's existing data into an auto-created personal library; V6 enforces the NOT NULL constraint; V7 heals any duplicate-membership edge cases left by a check-then-insert race in V5
  • Self-leave: members added to a shared library can leave it without needing the owner to remove them (Leave button + confirmation dialog in the Libraries view)
  • GET /api/libraries/sharees?search=... — user-search endpoint backed by OCP\Collaboration\Collaborators\ISearch, respecting Nextcloud's shareapi_restrict_user_enumeration and group-restriction admin settings
  • Viewer notice banners on Add Movie, Add TV Show, and Add to Watchlist pages when the active library is view-only

Changed

  • All catalog endpoints (/api/movies, /api/series, /api/watchlist, watches, stats) now accept an optional libraryId query/body param and scope reads/writes to that library; omitting it falls back to the user's personal library
  • LibraryService.resolveLibraryId (writes) throws on a denied explicit ID instead of silently falling back to personal, preventing cross-library write confusion
  • Member management restricted to owner only (editors can no longer add/remove members); viewers see the members list read-only
  • Library delete cascade wrapped in a DB transaction (episodes → watches → watchlist → series → movies → members → library)
  • Rename preserves the caller's owner role in the response (annotate() helper centralises role annotation for all library-returning endpoints)
  • GET /api/libraries/sharees requires at least 1 character to prevent zero-query full user enumeration
  • Dashboard "Recently Watched" now interleaves movies and TV shows sorted by watch date instead of showing movies-only followed by TV-only

Fixed

  • Library rename bug: editing the name field immediately after saving no longer reverts to the pre-save name due to a stale local binding

Tests

  • 121 PHP tests, 136 JS tests, 0 lint errors
  • New: LibraryServiceTest (21 PHP tests covering create, rename, member CRUD, self-leave, canAccess/canEdit, annotate)
  • New: libraries.spec.js (28 JS tests covering store state, getters, fetch, create/rename/remove, leaveLibrary, member actions)
  • All pre-existing tests updated for v1.4 API signatures (libraryId param added to MovieService, WatchlistService, SeriesService, MovieWatchService, StatsService)
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignatureW/fG+iP7aiQ4JEqCs4ZaUYIW5HEfc+0t5YrUipKM8MEUvnJZh0N48oTjVhHI17TU
BcpmMBoE9/0TsaLEsK/F2sPUij5qhbEbnHIebiDI579YJxlSfNqj4ITcVFfMYiHh
6q2uSLsxyb7fQgL66RHbzaqq3PFRfRhdc5OmoJtB3Hq+xpvBDrkz516zKjD8hy01
CrI2kLhzYvqf4V8uqBCvfEh+SP0vlCuIGyzjYpqwIAw3YX6Y/2/3Ll7WCoAGAOEA
h6jCiGRhPFXP4tgD+Hj2hqGyRA9LjgkZWLbEGDSw/TclEee43pCAcT/b3p/Pv2wH
PokcYxn+cAAeOxqWG/v/JOk0SoDItx4gH1z4dKAVbnXz3emvAO6GjX/O5M80NZAv
ZWTzNjDHi0ErKAMb+WRRR3/aEvFt1UqIUsNGq4lFYPUX/lYePMEF/bY/aw3joHse
XgwhP4y2qVERPW48FX7GphVFgy7FdAmYXuCz6TapWJGx24bQyn6R7laNNAubGazE
0kvBi8day7u5iGib80rm0IBoCP6c9FEXFJKa1jlrCqfWdb3z7z0zn5Os2bx/sQ6X
rj0e+c/c75NtU48RBx61oCDGZM2RW9VoMfnf8IYVEpn391aNLFKxedFG6sdJvto2
tx+j5B8B7BH2wSLBeGPV9BnIw6ZCeMgB5r2mxq9YIBM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.3.1
Release Details
UpdatedAug. 29, 2026, 7:33 a.m.
Changelog

Fixed

  • PlatformService::findAllForUser now checks hasDefaults() before calling createDefaults(), avoiding an unnecessary DB write on every PHP process start
  • SeriesServiceTest: test mocks corrected from non-existent findByTmdbId to findByTmdbIdAndSeries; static $defaultsSeeded flag reset between test cases so platform-seeding tests run in isolation

Changed

  • App Store description updated to reflect TV show tracking and rewatch support added in 1.2.0 and 1.3.0
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignatureMBqLzKCQipMCqtf0gq6QFUqrK631nyx3olhG568t71yV/TOlV8kNQkntE1dQqNay
t6HB0DDREGQqfvGa8cg5MBmfg1aq3+8i/DWxVOAmavSD5vU9of2XnwjZivDfvJNu
/yOvUz6DnmK/GMCQ/FufzVZKanTCLPQ6d365qdnyHSpJcjXVp4hir8d7YbwGxqWo
DNSq6+g13CvCxMLo+tCaQK6AO3YZYKscYlSoo7YTO5vOfMErupZdv8TRHz0zj8YN
+kndD8NarfyOIEid0k8KTcA7rXdAIN13V8CjtQnwbjV4uk831MEfA6weKQkdaxt3
mnUBWi4lvCLcd2pqDlriHe0c/jqFLll2GQJNoXchfGH7nYwE5Lfn3+5lq6gha7Ke
KU6rsN8DlhEdKXl80ZIWfHwOGgewUhrVx5spgvaQ90Sjsq4J+ilX1osXQW+4YMyH
w6uKZfDFbR9t/NI55iBjDuAQNGkE6pIIVDcwOu48y5KSqC0bKiO65jwrA2dr5WSn
7Z8IsFbWR6rszgI47bbuhbV8Vfk+BteeC91LfyBvWljDuxgFNeOXQBhTeedsyx6B
y45vDccx0I5KaHm6lTlZ8eMeEGmADQ3qVaB1Vv/zmgt2cGJljO1EpbIBBJQsqn2S
eRw1V0S8qgctZTtCIdXc9jyIusM/cK+dHdR/hYKpvCU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.3.0
Release Details
UpdatedAug. 29, 2026, 6:50 a.m.
Changelog

Added

  • Episode-level TV show support (#15): track series, seasons, and individual episodes. Series get their own /tv section, list view, and detail page separate from movies
  • New moviedb_series and moviedb_episodes tables; series metadata and every episode (including specials) are imported from TMDB on add, one API call per season
  • Derived progress: season and series completion are computed from each episode's watched flag — never stored as a season/series-level percentage. Unaired episodes (air date in the future or unknown) are excluded from the denominator; specials (season 0) are stored and shown but excluded from progress
  • "Up next" card surfaces the first aired, unwatched episode
  • Mark whole season / whole series watched fan-out — idempotent, so re-clicking never re-flips; only aired, non-special episodes are affected
  • Series-owned watch metadata: a TV show carries its own rating, platform, language watched, and watch date — set on the Add TV Show and Edit TV Show forms, exactly like a movie — stored as a single series-level row in moviedb_movie_watches (nullable series_id/episode_id). Individual episodes are a plain watched/unwatched checkbox with no per-episode metadata
  • TMDB Movies/TV toggle in the search UI; localized TV genre list
  • Watchlist now supports TV shows as well as movies: a unified watchlist with a Movies/TV type toggle when adding, a Movie/TV badge on each entry, and an All/Movies/TV Shows type filter. Marking a show as watched imports the whole series (all seasons/episodes) and routes to its /tv detail page; marking a movie behaves as before
  • Dashboard tiles for TV shows watched and episodes watched; total runtime now includes episode runtime
  • Translations for all new strings (de, es, fr, it, nl)

Changed

  • Migration Version000003Date20260828 adds the series/episode tables (including a watched boolean on moviedb_episodes), relaxes moviedb_movie_watches.movie_id to nullable, and adds a media_type column to moviedb_watchlist (default movie; existing rows backfill to movie) — all add-only or NOT-NULL relaxation, safe for the SQLite fresh-install batch; no columns dropped
  • media_type is now populated on movies (default movie) for forward-compatibility
  • Year and platform charts remain movies-only in this release
  • Dashboard Avg Rating and Top Rated now include TV shows alongside movies — a show's rating lives on its single series-level watch row, so it counts toward the average and can appear in the Top Rated row. Movie and series cards now carry a small Movie/TV type badge

Fixed

  • Default streaming platforms are now seeded lazily on first read (PlatformService::findAllForUser) instead of relying solely on the migration's postSchemaChange hook, which Nextcloud does not reliably fire during occ app:enable. Fresh installs no longer show an empty platform picker; the seed is idempotent so it never duplicates existing defaults
  • Recently watched TV shows now appear on the dashboard alongside movies (the recent stats endpoint returns series with at least one watched episode, most-recently-watched first)
  • Episode watched state is stored as a boolean watched column on moviedb_episodes (toggled by the per-episode checkbox and the season/series "mark all watched" actions), and total runtime counts each watched episode's runtime. This replaces the earlier per-episode "log watch" dialog: episodes no longer carry their own date/platform/language/rating — that metadata belongs to the show as a whole (see Added)
  • Series import no longer fails when a show has a specials season: moviedb_episodes.season_number/episode_number now carry a DB default of 0 so episodes in season 0 (which match the entity's default and are thus omitted from the QBMapper INSERT) persist instead of hitting a NOT NULL constraint. Affected both direct series add and "mark watched" on a series watchlist item
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
Signatureo53wujykdigXdIMMC7OwGc4U1s5G5LWDUGFrsnyTbMe4zh9zLM/pb4KwuGJNbSWZ
lNAnrJg86s3Uj+tNdHMnEVzYkeAAqZ92TSdVN6UCbL+LMU+LbdJJOijXhEQho0xF
NF0x1U2+AzuW6fVDOC7eYmtIuCBAB/4xiGra/bqGVPGTpttmdYpkg6TEmF4NkhKs
TH0sNeoqbOKH0bvWU6q4d27Icqc8klNA+Eo61AGq4OOg4zY5I2CTdZHrGQW1uarV
esawGTxZpEf0B0+eg3dvMOXRq4f7ULLDGxvgbSZ8ulevAem0zHuO0ldeov1YJScb
5ko5nINoVV/AKJLqSgqkMX2XSduc12llo4uYD2aiSS4GqoIX60JwO2fFR59YfphM
1i4E5hVxGYWfXEOX9h38sOt2ea9yUS8/CUYLaXppP5Xr7gC1/gShFennJ4HEms8+
LAJXGgYaUwVR1OZzQ1IoydswGSeeHV++5Qs2cjD0no/Hy5FG1EFUPBJUuKmcwQSG
Q8YmI8/gxs+5M1O4vxCXWl4NaOnWbEkDoKKotQA5aOJVZfk0zIFUSjb0ZW87Q5NU
tBDZNi6ccg2DWNOxWdYgvpBwGDoLySpS5Z3csCKLkEmET6YGocEVTk3QdDW/XsYV
AXyD3J/SF1omJfWKZMJhLGxmdkDEdWg0/XSlbKgaUS4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32

Nextcloud 34

MovieDB 1.5.4
Release Details
UpdatedSept. 21, 2026, 7:59 a.m.
Changelog

Fixed

  • Several UI strings (search placeholders, "Enter movie/TV show title...", "Importing episodes...", "Write your thoughts...") had their trailing ... normalized to a proper ellipsis character () in an earlier change, but the translation files still keyed on the old three-dot strings. Non-English users were seeing raw English fallbacks for these. All five locales (de, es, fr, it, nl) are now back in sync.
  • Added the missing translation for "Failed to leave library. Please try again." across all locales.
  • Fixed a typo in the Spanish translation of that message ("abandonador" → "abandonar").

Thanks to @ba3r for reporting and fixing the translation drift (#47).

Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignatureKoU6GVlNgvtWAC9hWlSkVvK1e4m0Y/0Hm54qQTDgucO86ZdlP3OkJu0TehQ5O0K5
xtVq3jNUvkeoU/rewdLnREnVclfkBsmjeE2WGBgEIp1oM9xivg1jun3kXdXp/FWy
H5vL5MZZkUOLLGztrUJ/wli+DNicZbeEYK636MSpG+WO9gFGMrJRgNFu/34/p+OA
CyTpmSRW/1o5JwamYxGW1eCXwrJcDng3nzvyaq9HcYanMLU4LJi5XF43ZZXyJEJS
iywTogu3BDPfS0cfZly9SG3n5aSROV3FGjYjgOi1abjXZthovKHBps/HCnqmeBB7
vvjsNT15+QgbHgMKJmBLa/2NSb2iRbHxWj7RemBnW5t0LYpaTM+GiubOoPEACDkR
U8ty8UhynqAK6SHT1mmYlc1tk6JCaNy+Dxr8EiqY7hBwt/FkgIh6d4a3ySxljpR9
ef3QFu1PKn/2gGoAxLJYqo29L8i/u1QMBSlnC4/+vFoIqJjZU+t8J7Xto50uGV5e
0UUdOlmfYRH2PfzRO0y/C/nLMIVNsdgthndN0E5qogcT5f7hYVnne1BN/tllc93C
2ypAmgn8NEaksRJPw+2CZF9HADe5s6hijyXScWZz90KDWdUu0eCC8KLSp/bTQuaz
hCfgEJ1r+VdIuKxcDvfRExeCcby8RelgGPIlHxA37Go=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.5.3
Release Details
UpdatedSept. 20, 2026, 8:51 p.m.
Changelog

Fixed

  • Fresh installs on Nextcloud 32 no longer fail during occ app:enable. Three boolean columns (episodes.watched, libraries.is_personal, library_members.permission_edit) were declared NOT NULL in a way NC 32's migration validator rejects, and the moviedb_library_members table name hit NC's identifier-length limit for an auto-generated primary key name. Existing installs (including upgrades) are unaffected.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignatureSM91S8OUY7ERDhmFmiIJXRNo6AZzurMLVq7lFZy0GYfMwT5arI2CYJa1XlO1tUxk
0hDrvIY570YgZ1z6wWak3fd+855YYvMEjvUjT4TEBmsa76ZWKogg3TLFSUuFlqaB
Ktw9gKw4VsGqce4jinvAiSi66ZmRcTFJZd6nltqUrFQmzhcSDlshJkYs2UCqmIQL
7j56ylMMxhLWx2/zfMn14InRqNyXZuHzamrgGLKY+65BW+y/mlHZvGS/Pf/ivOD7
8JOR9NbLhtk3rO/g/ymTJW6smRkl1XcXKzutRxjQMzwZBFc4GQhwmAHFDGWx8B3O
yTiyZGKhvO//UKIEDk/JPcYU8lNOLN7MAN9QJgPGStblMasS0Hvlj1AfryTQS+Uj
SWTLlfWd3FjPB8sPc7i+V3i/CohnKKCiEJ2XX+tviVErn5z2l3hVw1RzQHyHCKea
fOyfL6CpCZQOWgmJuRpFkdoeRiw2PeH03cMN+4FeBTnV5cktpL+qcMA3uDyfpxAD
ijRxYDvmSj81Ylb83Aa7HdO5W4NJPaimu+rzX2wagomBpLeab7VT3Z2lT76E/h7Q
89r/KbnnsjEZBzasOmTYZ8cSx8di785gJcdqoh7tlronUTRm1TJJDgPX1P3gBCkm
GUsmBDZmrZ75Ubl3Wz3LSKWz7DMNkncZaPMZNRAtH7k=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.5.2
Release Details
UpdatedSept. 20, 2026, 7:22 p.m.
Changelog

Fixed

  • "Watches by Year" on the Dashboard now groups by the year you actually watched a movie/show, not its release/air year. Matches the "year in review" convention used by Trakt/Letterboxd.
  • The "Watches by Year" chart no longer stretches to fill most of the screen when there are only a few bars (e.g. a small watch history).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
Signaturekai3DGfd2M037yLLMLcYqZWHi6lneYfEykTrNFtz+M4LA4eh0LS7NhfOCnOcf+Hn
otpQkbSb1+VtwlQba40wUBtoQn0CHrgZ+TfUsCX09I5NGSBDZiq+mtlCexIL8tWN
i9xD5jkfxocBn63s5Iw9tG6IXqBCEspaR9GIdJsRp+3tNV62uCederi+LWpfaErn
YYbNGMXMhlXyObkamiA0Y02bIGOg9r7iHURklVUdObG5NKMUnldG+b3iqfpU7Gz6
7otcc3I00Cq3KxSB+ZAypTml6DjrYpf54zp8JL0lMi63QfXBNjSY+dkwR00+ufqC
RGIwZN5v1azDVMOD0zHUQyS4Hk5425tpX2gzq4QneEQXc8pCKLPq4Nedf0ghEf9q
snHNMvJB3vgW5dsUlRMtvPEK2FzA9oQR7SASx6+DoO72/tba3adeAtpFfMKLjh97
WPkuR7JfKENrDSzONzZou13ylsWVmc6Qx/1WA2Y3mlxOZOndIbGZYVqXomKOgXGR
Cf1ECEBvQQrdNLaRVSl6/yma4UNVNOOHp8OoszZNV49NkIuprLbbDQruB5I6e+fN
lmzmIWOQOeaU8hcw6422L1E2e7/oPtwNVr1BDFWHIb5AhDvEgDijh//MgHXtyhtf
Sk0OYyQYmbrw5Nj8jqGrhV4Q3FXtLmvj5otumk0QDPM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.5.1
Release Details
UpdatedSept. 20, 2026, 6:30 p.m.
Changelog

Fixed

  • The v1.5.0 release tarball contained stray macOS AppleDouble (._*) files and extended-attribute metadata (from com.apple.provenance, newly applied to files by macOS 26/27), which broke the Nextcloud App Store installer's "exactly one top-level folder" check on some upgrades (Extracted app moviedb has more than 1 folder). This release is content-identical to 1.5.0, repackaged with COPYFILE_DISABLE=1 and explicit xattr/AppleDouble stripping.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignatureMNWzJHDY5k2lApRRKmevWNUpqhtY7kORwD4FBvXTTscE2boide8e2JzJMSw7qbW/
OddgepINDy5AHgUw6hLbSmREvG5r44+VAoj6GJFtcJiTL/k4RHfSEECbEzBUNIsE
+Qray3p5h2sZH5Cqykq96pcGL230tEj8+tz4G6XQNMoOeghb5SZrdVeUcwpQGeoj
5ojYPd5TkUY3B+biuJxe4LwolWJRrxhNrW4E5WIgoibzO5VDggwyHK5GUDsLIiTb
uot1f546sL0WxbcW07K8kXJ5nnKbA25eRDvEqtgHBxNs667wb2ArMCAcEdLwR822
oFungmHhkXN5qTouDg95dbdoCBddYOE7lrK/viiIsD5xYwJ45/pWGHd0NeMJiDcN
+2NHrLC4pPo1k3PQ3snp6SG0DSOF5Sc/90ygd0CdWR2QDEDvYLnxIaooB17VUzeZ
3CtIlNJLoPmgMNTu7/H9o6YpaL1Z4CHerTbsd1VdlXGMzmm4kZk5N4v7LQFrpb1K
eRh6/kNjomkns7u4yJErdTsYICC6mgrnbRKIAqEIn9bagmjyQl5nMH9Jpa7Jl+5O
hL7ZekiXjEzvWL4YvrRyupxUVKBZklGmxhNMGpoelHpT1/wm1GSXKCnkUA8TTjMe
NXTKWJrwNHe03RlOCEhPYtNcik/xF04KICtAMi74iII=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.5.0
Release Details
UpdatedSept. 20, 2026, 3:19 p.m.
Changelog

Added

  • Dashboard now includes "Watches by Year" and "Watches by Platform" charts, including TV show watches (previously excluded from these stats). Both charts share a new "Show" filter to view All / Movies / TV Shows only.
  • Watchlist pagination (page/limit params, matching Movie/Series), fixing the previously unbounded /api/watchlist response.

Changed

  • Visual polish pass: consistent card hover/shadow treatment across MovieCard/SeriesCard/Dashboard stat cards (shared radius/shadow/transition values), a subtle poster gradient scrim for badge legibility, per-stat accent colors on the Dashboard, and richer chart styling — gradient-filled bars with a grow-in animation on Watches by Year, gradient fills and a smoother track on Watches by Platform.

Fixed

  • Recently Watched and Top Rated cards on the Dashboard no longer collapse into unreadable narrow strips on mobile viewports.
  • The Dashboard chart filter control no longer overflows the screen on narrow viewports.
  • /api/watchlist, /api/movies, and /api/series no longer throw a division-by-zero error on limit=0, or accept a negative page/limit that produced a negative offset — all three now clamp to sane minimums. totalPages is now consistently returned as an integer.
  • The watchlist's media-type filter no longer silently returns zero results on an unrecognized mediaType value — invalid values are now treated as "no filter", matching the stats endpoints' existing behavior.
  • Changing sort order on the watchlist while on a later page no longer leaves the user on a now out-of-range page; sorting resets to page 1.
  • The Dashboard's media-type "Show" filter is now visibly grouped with both charts it affects (under one "Watch Statistics" section) instead of appearing to apply only to "Watches by Year".
  • Switching the active shared library no longer leaves stale watchlist pagination/filter state behind — a page number or type filter left over from a previous library (which may have far more or fewer items) could point past the end of the new library's results and show a false empty state. Movies/TV filters are reset the same way.
  • The sidebar's watchlist counter badge now always reflects the library's true total, not a search/media-type-filtered count — previously applying a filter on the Watchlist page made the badge appear to shrink until the filter was cleared.
  • Opening the Watchlist page no longer fires two competing API requests (one before the active library was known, one after) — the first could return data for the wrong library depending on response timing.
  • Rapidly switching the Dashboard's "Show" chart filter no longer risks displaying stale data if an earlier request resolves after a later one.

Changed

  • Extracted the duplicated mediaType query-param validation from StatsController/WatchlistController into a shared helper on AuthenticatedController.
  • Added a resetFilters() action to the watchlist store (mirroring Movies/Series) so sort/type-filter/pagination resets follow one consistent pattern across Watchlist.vue and the shared-library switcher.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
Signaturexlyj+iMssN5+P1t+mfcYmQON/vtzerlnfPfb8QSxeAxwBvZCluFiIJ0MO6YY2R1K
4mwFvG4Kd1wjQULGd4g4fN+VN7UwsS4Jdp4jolx+qKIc5Hm5YGtTjO0DgOe3AfmX
5NuQzUgbV2f8SEhb7mVKsMIC51HCez2r+AEq0AQOaNOVv6SETZ8FzsYofWHZwxUU
5YzsBD1fOGilOLQEx3oEwqxHLQaknCOnmrKR++jF7v0Qtz85zp8oC9cophzJD7ei
BayPpbB1q8oX73mt4t+yCfWbzgBZRGWrsxPuAuP4YUYAMm8v4ii8RSuE+zeGDwv1
yFwxbmvCqw3SvIvLo4XP/ep0RQcOjt1SKMS6lfilIKZKfx+2oA+JcC5tR9fUC9w7
8SfAxBcm8uunMGl3SCKMlFig9CRJU80q1S//vtTWi5zJOh8Jdvc5fLg4T2weamsE
MeqD0OYlniLRWuhVR05FNxUeFKLMnDtdYU2hHhgAn420sfpPxIIaax9rS+DgBMqu
m6l2oOxXe74Rj6BjyvoPquYEXg30DBGl3isNgxD7j+93CKrXFUgltL7wqE/mXFVb
pw2/ZzaRbnY2qwBpfYXmYRi0n1CYpKdKSJtMNCQw2rG7MGhAeeO4/UJvGhg/DRdb
O2URYsUTmQmu5gOP81hXZ0hsLYIunFdLqn8nSnTnO6M=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.4.1
Release Details
UpdatedSept. 13, 2026, 2:22 p.m.
Changelog

Fixed

  • Translation placeholders now render correctly in paginated movie lists.

Tests

  • Added regression coverage for translated placeholders and plural arguments.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignaturefW/4adHB/dpgcR8RMr/F6/964k5AHNAz9qD1DjFFnAh/tVFcjQpUrd7ZBR8+Sc1uSe9NE8oogHa/WZ6bGr81mR1tdzUPq2jAzS91oCz6EM5o0eH3zkx21JjMLdZWJGQ2aSlqa14s/EtjgYWtWUS1HOHRfIyCmPvbvJciWQIZPXyD0GUnr5EENxgzvOm2n4duZ510ATiozQ2g3+IvlY/Mnm7rdwzza44Uokre3SSnnwi5aCA/GBjZdq3Eyu7EWtPNqUCyiW3+8l32GF1IqInQC5X00eKrEKfao8A8Zyvt6+3omx92rw4MObORIZnr7VSvu5yd7S8mz5bR72dSbNVFz1omC2DkhZquLvTE1ETLE3sxHuqEAjD0DC7CmqMIUy+mnRcNBSDdkgnuae2TOklbJK14m2tXNovCBL6BtGqIt4kPHBNloxr+zeanzhjwR/8Qz/xPbGudy7P6rGGPrdVk8GzRm+tCbh6TvhtMmYSo+GDsaJN9zQ8Tocsul7Ja960NN1jVJjIQhtyWQtd5Ym+TlPZ5UjmIqEmWrbWyzRdwzXgfAT6J1IE6hXZvujWfxFZV3u0seVej2gowsJDGD69/iWjtC5WVliAAoGTNBcjgBewO11+TeIb4HMa2cQsg9VdDeYMF/Uegawce68Tc39qWFl7YFDnG/iYnT/61T8r4QtQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.4.0
Release Details
UpdatedSept. 1, 2026, 6:57 p.m.
Changelog

Added

  • Shared Libraries: create named libraries and share your movie/TV collection with other Nextcloud users — assign viewer or editor roles, manage members, and switch between libraries from a single account. Everything about a title (catalog, watchlist, episode progress, ratings, platform, review) is shared across all library members; user_id on catalog rows becomes legacy attribution only — library membership is the sole access gate
  • New DB tables moviedb_libraries and moviedb_library_members; all catalog tables gain a library_id NOT NULL column (Migrations V5 → V7)
  • V5 backfills every user's existing data into an auto-created personal library; V6 enforces the NOT NULL constraint; V7 heals any duplicate-membership edge cases left by a check-then-insert race in V5
  • Self-leave: members added to a shared library can leave it without needing the owner to remove them (Leave button + confirmation dialog in the Libraries view)
  • GET /api/libraries/sharees?search=... — user-search endpoint backed by OCP\Collaboration\Collaborators\ISearch, respecting Nextcloud's shareapi_restrict_user_enumeration and group-restriction admin settings
  • Viewer notice banners on Add Movie, Add TV Show, and Add to Watchlist pages when the active library is view-only

Changed

  • All catalog endpoints (/api/movies, /api/series, /api/watchlist, watches, stats) now accept an optional libraryId query/body param and scope reads/writes to that library; omitting it falls back to the user's personal library
  • LibraryService.resolveLibraryId (writes) throws on a denied explicit ID instead of silently falling back to personal, preventing cross-library write confusion
  • Member management restricted to owner only (editors can no longer add/remove members); viewers see the members list read-only
  • Library delete cascade wrapped in a DB transaction (episodes → watches → watchlist → series → movies → members → library)
  • Rename preserves the caller's owner role in the response (annotate() helper centralises role annotation for all library-returning endpoints)
  • GET /api/libraries/sharees requires at least 1 character to prevent zero-query full user enumeration
  • Dashboard "Recently Watched" now interleaves movies and TV shows sorted by watch date instead of showing movies-only followed by TV-only

Fixed

  • Library rename bug: editing the name field immediately after saving no longer reverts to the pre-save name due to a stale local binding

Tests

  • 121 PHP tests, 136 JS tests, 0 lint errors
  • New: LibraryServiceTest (21 PHP tests covering create, rename, member CRUD, self-leave, canAccess/canEdit, annotate)
  • New: libraries.spec.js (28 JS tests covering store state, getters, fetch, create/rename/remove, leaveLibrary, member actions)
  • All pre-existing tests updated for v1.4 API signatures (libraryId param added to MovieService, WatchlistService, SeriesService, MovieWatchService, StatsService)
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignatureW/fG+iP7aiQ4JEqCs4ZaUYIW5HEfc+0t5YrUipKM8MEUvnJZh0N48oTjVhHI17TU
BcpmMBoE9/0TsaLEsK/F2sPUij5qhbEbnHIebiDI579YJxlSfNqj4ITcVFfMYiHh
6q2uSLsxyb7fQgL66RHbzaqq3PFRfRhdc5OmoJtB3Hq+xpvBDrkz516zKjD8hy01
CrI2kLhzYvqf4V8uqBCvfEh+SP0vlCuIGyzjYpqwIAw3YX6Y/2/3Ll7WCoAGAOEA
h6jCiGRhPFXP4tgD+Hj2hqGyRA9LjgkZWLbEGDSw/TclEee43pCAcT/b3p/Pv2wH
PokcYxn+cAAeOxqWG/v/JOk0SoDItx4gH1z4dKAVbnXz3emvAO6GjX/O5M80NZAv
ZWTzNjDHi0ErKAMb+WRRR3/aEvFt1UqIUsNGq4lFYPUX/lYePMEF/bY/aw3joHse
XgwhP4y2qVERPW48FX7GphVFgy7FdAmYXuCz6TapWJGx24bQyn6R7laNNAubGazE
0kvBi8day7u5iGib80rm0IBoCP6c9FEXFJKa1jlrCqfWdb3z7z0zn5Os2bx/sQ6X
rj0e+c/c75NtU48RBx61oCDGZM2RW9VoMfnf8IYVEpn391aNLFKxedFG6sdJvto2
tx+j5B8B7BH2wSLBeGPV9BnIw6ZCeMgB5r2mxq9YIBM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.3.1
Release Details
UpdatedAug. 29, 2026, 7:33 a.m.
Changelog

Fixed

  • PlatformService::findAllForUser now checks hasDefaults() before calling createDefaults(), avoiding an unnecessary DB write on every PHP process start
  • SeriesServiceTest: test mocks corrected from non-existent findByTmdbId to findByTmdbIdAndSeries; static $defaultsSeeded flag reset between test cases so platform-seeding tests run in isolation

Changed

  • App Store description updated to reflect TV show tracking and rewatch support added in 1.2.0 and 1.3.0
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignatureMBqLzKCQipMCqtf0gq6QFUqrK631nyx3olhG568t71yV/TOlV8kNQkntE1dQqNay
t6HB0DDREGQqfvGa8cg5MBmfg1aq3+8i/DWxVOAmavSD5vU9of2XnwjZivDfvJNu
/yOvUz6DnmK/GMCQ/FufzVZKanTCLPQ6d365qdnyHSpJcjXVp4hir8d7YbwGxqWo
DNSq6+g13CvCxMLo+tCaQK6AO3YZYKscYlSoo7YTO5vOfMErupZdv8TRHz0zj8YN
+kndD8NarfyOIEid0k8KTcA7rXdAIN13V8CjtQnwbjV4uk831MEfA6weKQkdaxt3
mnUBWi4lvCLcd2pqDlriHe0c/jqFLll2GQJNoXchfGH7nYwE5Lfn3+5lq6gha7Ke
KU6rsN8DlhEdKXl80ZIWfHwOGgewUhrVx5spgvaQ90Sjsq4J+ilX1osXQW+4YMyH
w6uKZfDFbR9t/NI55iBjDuAQNGkE6pIIVDcwOu48y5KSqC0bKiO65jwrA2dr5WSn
7Z8IsFbWR6rszgI47bbuhbV8Vfk+BteeC91LfyBvWljDuxgFNeOXQBhTeedsyx6B
y45vDccx0I5KaHm6lTlZ8eMeEGmADQ3qVaB1Vv/zmgt2cGJljO1EpbIBBJQsqn2S
eRw1V0S8qgctZTtCIdXc9jyIusM/cK+dHdR/hYKpvCU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.3.0
Release Details
UpdatedAug. 29, 2026, 6:50 a.m.
Changelog

Added

  • Episode-level TV show support (#15): track series, seasons, and individual episodes. Series get their own /tv section, list view, and detail page separate from movies
  • New moviedb_series and moviedb_episodes tables; series metadata and every episode (including specials) are imported from TMDB on add, one API call per season
  • Derived progress: season and series completion are computed from each episode's watched flag — never stored as a season/series-level percentage. Unaired episodes (air date in the future or unknown) are excluded from the denominator; specials (season 0) are stored and shown but excluded from progress
  • "Up next" card surfaces the first aired, unwatched episode
  • Mark whole season / whole series watched fan-out — idempotent, so re-clicking never re-flips; only aired, non-special episodes are affected
  • Series-owned watch metadata: a TV show carries its own rating, platform, language watched, and watch date — set on the Add TV Show and Edit TV Show forms, exactly like a movie — stored as a single series-level row in moviedb_movie_watches (nullable series_id/episode_id). Individual episodes are a plain watched/unwatched checkbox with no per-episode metadata
  • TMDB Movies/TV toggle in the search UI; localized TV genre list
  • Watchlist now supports TV shows as well as movies: a unified watchlist with a Movies/TV type toggle when adding, a Movie/TV badge on each entry, and an All/Movies/TV Shows type filter. Marking a show as watched imports the whole series (all seasons/episodes) and routes to its /tv detail page; marking a movie behaves as before
  • Dashboard tiles for TV shows watched and episodes watched; total runtime now includes episode runtime
  • Translations for all new strings (de, es, fr, it, nl)

Changed

  • Migration Version000003Date20260828 adds the series/episode tables (including a watched boolean on moviedb_episodes), relaxes moviedb_movie_watches.movie_id to nullable, and adds a media_type column to moviedb_watchlist (default movie; existing rows backfill to movie) — all add-only or NOT-NULL relaxation, safe for the SQLite fresh-install batch; no columns dropped
  • media_type is now populated on movies (default movie) for forward-compatibility
  • Year and platform charts remain movies-only in this release
  • Dashboard Avg Rating and Top Rated now include TV shows alongside movies — a show's rating lives on its single series-level watch row, so it counts toward the average and can appear in the Top Rated row. Movie and series cards now carry a small Movie/TV type badge

Fixed

  • Default streaming platforms are now seeded lazily on first read (PlatformService::findAllForUser) instead of relying solely on the migration's postSchemaChange hook, which Nextcloud does not reliably fire during occ app:enable. Fresh installs no longer show an empty platform picker; the seed is idempotent so it never duplicates existing defaults
  • Recently watched TV shows now appear on the dashboard alongside movies (the recent stats endpoint returns series with at least one watched episode, most-recently-watched first)
  • Episode watched state is stored as a boolean watched column on moviedb_episodes (toggled by the per-episode checkbox and the season/series "mark all watched" actions), and total runtime counts each watched episode's runtime. This replaces the earlier per-episode "log watch" dialog: episodes no longer carry their own date/platform/language/rating — that metadata belongs to the show as a whole (see Added)
  • Series import no longer fails when a show has a specials season: moviedb_episodes.season_number/episode_number now carry a DB default of 0 so episodes in season 0 (which match the entity's default and are thus omitted from the QBMapper INSERT) persist instead of hitting a NOT NULL constraint. Affected both direct series add and "mark watched" on a series watchlist item
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
Signatureo53wujykdigXdIMMC7OwGc4U1s5G5LWDUGFrsnyTbMe4zh9zLM/pb4KwuGJNbSWZ
lNAnrJg86s3Uj+tNdHMnEVzYkeAAqZ92TSdVN6UCbL+LMU+LbdJJOijXhEQho0xF
NF0x1U2+AzuW6fVDOC7eYmtIuCBAB/4xiGra/bqGVPGTpttmdYpkg6TEmF4NkhKs
TH0sNeoqbOKH0bvWU6q4d27Icqc8klNA+Eo61AGq4OOg4zY5I2CTdZHrGQW1uarV
esawGTxZpEf0B0+eg3dvMOXRq4f7ULLDGxvgbSZ8ulevAem0zHuO0ldeov1YJScb
5ko5nINoVV/AKJLqSgqkMX2XSduc12llo4uYD2aiSS4GqoIX60JwO2fFR59YfphM
1i4E5hVxGYWfXEOX9h38sOt2ea9yUS8/CUYLaXppP5Xr7gC1/gShFennJ4HEms8+
LAJXGgYaUwVR1OZzQ1IoydswGSeeHV++5Qs2cjD0no/Hy5FG1EFUPBJUuKmcwQSG
Q8YmI8/gxs+5M1O4vxCXWl4NaOnWbEkDoKKotQA5aOJVZfk0zIFUSjb0ZW87Q5NU
tBDZNi6ccg2DWNOxWdYgvpBwGDoLySpS5Z3csCKLkEmET6YGocEVTk3QdDW/XsYV
AXyD3J/SF1omJfWKZMJhLGxmdkDEdWg0/XSlbKgaUS4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.2.0
Release Details
UpdatedAug. 25, 2026, 6:53 p.m.
Changelog

Added

  • Rewatch support: new moviedb_movie_watches table stores one row per viewing (date, rating, review, platform, language). Each movie can now have a full watch history (#19)
  • Log again button on the movie detail page with a star-rating selector for quick rewatch logging
  • Watch history section on movie detail listing all watches with per-entry delete (hidden when only one entry exists)
  • Watchlist "mark as watched" on an already-watched movie now appends a new watch entry instead of creating a duplicate movie record

Changed

  • Migration Version000002Date20260824 backfills all existing per-movie watch data into the new watches table with a verify-before-drop guard; legacy columns are retained in 1.2.0 for safe downgrade and will be dropped in a future release
  • Star-rating selector replaces free-text number input in the log-watch dialog
  • Removed redundant date/language summary box from the movie detail header

Fixed

  • Edit form: rating/review/date changes now persist correctly even for movies without a prior watch row (previously silently dropped)

Tests

  • 73 JS tests, 69 PHP tests, 0 lint errors
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignaturezhR5gYHFnW4DQvbjaabhFfJoVCbw2xCpGDCzNmSHHNauQYQqsDweLrZpfHvADAHPuAvzv4OPDCXxngxRRvDTviwUnx+jmuvNpzSDazRNbQ18yZdGqrKF/T/ccCTMjpxtDqTnOJJIcPpAAASc4WWG6Vu44w3L2bzH7/4yC2AkXuAFoC9P+yAXnDNUvgpfHHGRj7CeYjBlqOZNwvOTfYacvw+kyJ0ozzWteH0sy5Y1+I4BNL0wtK3T7V7RD1BzALT889qCGyUtIph8D7XT57+uiVAntBZQQpTqoN3yGNu9fTPVzyC5b8frY45XOGX6pSQ/q0uQ7++BU4sKp8DuKiEZ9mwbHNp2Y4CnoY3rSE+IWi6CZpRAi+UY6UeL9dwcJ98Ts/1SHh9HYn/URPi02mAI1xmXkTfkQyfU+lLvASs5LfYrx69Cdi9O43tbYijo3SrtTANvy2TgicMj9maiMPP4eCtJ2fyN5T2vvYxJv3GYvKOmc4ZhBOG4OPhlOZtb1HnGbXFF+Vm/9oPpNax5KrbX3Ne7kSZs791ibk0hiXNPfHehdDZxBnXVTVhXvBknF8VyAQ09lXKlQ3GT9R9PKcZDVKXN4m/do4Lcs7XgeSQOEzmXS8LUY7ihwjHv7AIWK1e6To3MKLd5mT0RpJSbnTv6OFwhgv1psHfjOkkVQzVRkGs=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
MovieDB 1.1.2
Release Details
UpdatedAug. 24, 2026, 6:27 p.m.
Changelog

Fixed

  • Prevent adding the same movie twice: POST /api/movies now returns 409 Conflict with the existing movie's id when a duplicate tmdbId is submitted, matching the existing watchlist behavior (#17)
  • Watchlist store now shows a specific "already in your watchlist" message on 409 instead of the generic "failed to add" toast

Added

  • Friendly duplicate-movie dialog in the Add Movie view offering "View existing entry" (routes to the existing movie's detail page) or "Cancel", instead of a plain error toast
  • New i18n strings for the duplicate-movie dialog in all 5 locales (de, es, fr, it, nl)
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
Signature3svKAWeA1wnMKWjv6gguqWhW0hzWaovMs/B5VSy/vgo3j6zWKdUSnhPh18kL1STC4zCJ32lrpiMZzzeqMLUzDbVobV/8vY+fNpy02JV8doFOd+3UCf2kpxjY6Mt6AnfgSpoS7RDgykSZYmnX0qcVvH3GMJEfoZ1qCwSPZ5o2OPVQqv58e1jTYo+NVyOV6lkGZSoBt/qFxbupa4SZpSHp8Nx3h/fSeQdmRKewWjzHTJXhKXgpbMWUu0iCYx9wF/+uJO60OAGD4NFtVIPQmS7TEJ2CdYtQl+2DGquEPAx41RlxCWsjskwKpq5/BSq/uogwbM6Gz9pp3+G8viW6PDWC+nLlGdReXETOdVLCCMIGSGPfW5adYl2ZZb+gUcwb7ndKZ5Mm7vuoRh/HA5KNwxbSPwEXKCBY8WgkzcRRA/Ijc014G9run2px7yLA7E/j1Ym8ENkvOh3Kpk5V79lPjOya5ul4KcJw3idLmGSUFUDS2e4htJCmOyE3u3p+8t78ZU+PVvXOhxL43Aet9Bg3I+jW+WDqtdiRDv/9O4eiGCi1DiJBclroeKIYamOHcco5a3ZTEeqEe9LTS/iF1078BI7JTDhT/iAh1P+Fxpiarvr3gEh/tR6ae0OrwTH1/VWKQike1fkEzubcd81ArfoudJrylOxv+O/2W27j28DGpAI3DB4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
MovieDB 1.1.1
Release Details
UpdatedJuly 31, 2026, 10:10 a.m.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignatureoBoTuKwkslFX+XV2GPd7IYGCm/NvKhzIAawUt8qG9Gy4GCmIDGmPAtoiQa3ze9+2
MttRv3DMyuODHW1/Idr386cNa+L3witDP8hyiNv6uWLlJzQeh3Qo/etyKfhtdHGf
R4YAq/sIIQF02s9jtlsKaQ5dDLd+EpbP/1JD2/uWPu0vbQerL2HJTLIrPGn78kI4
nyK2nSUJCH0MtV4Elq4dG87Sg2jZCQvqkxZgle208FN9jx19EogjZSy1Dfyq49CI
NzdoKYX6+/EGcF1Vizl0ibtR+A+k+8E9c40qnUrs+XfbLNe+G+VBZ/Eo0AvEO79I
hiJWWaqorAwIUkt27vjik4Re6gsSjP0qo2b9btnsYn2Dj5s+dfza93QmygS6ExKL
ScGvTxSr/tANM6gAWIZqmzSu0plvp6uSA+1dRplhPkLGMk4KcJS0y1YvGdXEpbK+
caBHHdfkG6EAv9Y65+frFxCPxQdh9UloV4bYcVV8XTbhISC9J/rKPd2qlcmkaM2d
SsaC4+3F4Vbcw26CDEYi7mUl9SGW9BnBVqUmiEjZhbIAmuJssuwaVQQpn0nkUcxb
GE+k8b5+5W5J+EdMZISrZtChQz/uS7Ori+XSkxYuL7msRhlmUAWibZUl9LY66OxY
LEXNNteTYhC0n6PSBpIcsPNkFYGW5SLVsv21gyxc/Dg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32

Nextcloud 33

MovieDB 1.5.4
Release Details
UpdatedSept. 21, 2026, 7:59 a.m.
Changelog

Fixed

  • Several UI strings (search placeholders, "Enter movie/TV show title...", "Importing episodes...", "Write your thoughts...") had their trailing ... normalized to a proper ellipsis character () in an earlier change, but the translation files still keyed on the old three-dot strings. Non-English users were seeing raw English fallbacks for these. All five locales (de, es, fr, it, nl) are now back in sync.
  • Added the missing translation for "Failed to leave library. Please try again." across all locales.
  • Fixed a typo in the Spanish translation of that message ("abandonador" → "abandonar").

Thanks to @ba3r for reporting and fixing the translation drift (#47).

Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignatureKoU6GVlNgvtWAC9hWlSkVvK1e4m0Y/0Hm54qQTDgucO86ZdlP3OkJu0TehQ5O0K5
xtVq3jNUvkeoU/rewdLnREnVclfkBsmjeE2WGBgEIp1oM9xivg1jun3kXdXp/FWy
H5vL5MZZkUOLLGztrUJ/wli+DNicZbeEYK636MSpG+WO9gFGMrJRgNFu/34/p+OA
CyTpmSRW/1o5JwamYxGW1eCXwrJcDng3nzvyaq9HcYanMLU4LJi5XF43ZZXyJEJS
iywTogu3BDPfS0cfZly9SG3n5aSROV3FGjYjgOi1abjXZthovKHBps/HCnqmeBB7
vvjsNT15+QgbHgMKJmBLa/2NSb2iRbHxWj7RemBnW5t0LYpaTM+GiubOoPEACDkR
U8ty8UhynqAK6SHT1mmYlc1tk6JCaNy+Dxr8EiqY7hBwt/FkgIh6d4a3ySxljpR9
ef3QFu1PKn/2gGoAxLJYqo29L8i/u1QMBSlnC4/+vFoIqJjZU+t8J7Xto50uGV5e
0UUdOlmfYRH2PfzRO0y/C/nLMIVNsdgthndN0E5qogcT5f7hYVnne1BN/tllc93C
2ypAmgn8NEaksRJPw+2CZF9HADe5s6hijyXScWZz90KDWdUu0eCC8KLSp/bTQuaz
hCfgEJ1r+VdIuKxcDvfRExeCcby8RelgGPIlHxA37Go=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.5.3
Release Details
UpdatedSept. 20, 2026, 8:51 p.m.
Changelog

Fixed

  • Fresh installs on Nextcloud 32 no longer fail during occ app:enable. Three boolean columns (episodes.watched, libraries.is_personal, library_members.permission_edit) were declared NOT NULL in a way NC 32's migration validator rejects, and the moviedb_library_members table name hit NC's identifier-length limit for an auto-generated primary key name. Existing installs (including upgrades) are unaffected.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignatureSM91S8OUY7ERDhmFmiIJXRNo6AZzurMLVq7lFZy0GYfMwT5arI2CYJa1XlO1tUxk
0hDrvIY570YgZ1z6wWak3fd+855YYvMEjvUjT4TEBmsa76ZWKogg3TLFSUuFlqaB
Ktw9gKw4VsGqce4jinvAiSi66ZmRcTFJZd6nltqUrFQmzhcSDlshJkYs2UCqmIQL
7j56ylMMxhLWx2/zfMn14InRqNyXZuHzamrgGLKY+65BW+y/mlHZvGS/Pf/ivOD7
8JOR9NbLhtk3rO/g/ymTJW6smRkl1XcXKzutRxjQMzwZBFc4GQhwmAHFDGWx8B3O
yTiyZGKhvO//UKIEDk/JPcYU8lNOLN7MAN9QJgPGStblMasS0Hvlj1AfryTQS+Uj
SWTLlfWd3FjPB8sPc7i+V3i/CohnKKCiEJ2XX+tviVErn5z2l3hVw1RzQHyHCKea
fOyfL6CpCZQOWgmJuRpFkdoeRiw2PeH03cMN+4FeBTnV5cktpL+qcMA3uDyfpxAD
ijRxYDvmSj81Ylb83Aa7HdO5W4NJPaimu+rzX2wagomBpLeab7VT3Z2lT76E/h7Q
89r/KbnnsjEZBzasOmTYZ8cSx8di785gJcdqoh7tlronUTRm1TJJDgPX1P3gBCkm
GUsmBDZmrZ75Ubl3Wz3LSKWz7DMNkncZaPMZNRAtH7k=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.5.2
Release Details
UpdatedSept. 20, 2026, 7:22 p.m.
Changelog

Fixed

  • "Watches by Year" on the Dashboard now groups by the year you actually watched a movie/show, not its release/air year. Matches the "year in review" convention used by Trakt/Letterboxd.
  • The "Watches by Year" chart no longer stretches to fill most of the screen when there are only a few bars (e.g. a small watch history).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
Signaturekai3DGfd2M037yLLMLcYqZWHi6lneYfEykTrNFtz+M4LA4eh0LS7NhfOCnOcf+Hn
otpQkbSb1+VtwlQba40wUBtoQn0CHrgZ+TfUsCX09I5NGSBDZiq+mtlCexIL8tWN
i9xD5jkfxocBn63s5Iw9tG6IXqBCEspaR9GIdJsRp+3tNV62uCederi+LWpfaErn
YYbNGMXMhlXyObkamiA0Y02bIGOg9r7iHURklVUdObG5NKMUnldG+b3iqfpU7Gz6
7otcc3I00Cq3KxSB+ZAypTml6DjrYpf54zp8JL0lMi63QfXBNjSY+dkwR00+ufqC
RGIwZN5v1azDVMOD0zHUQyS4Hk5425tpX2gzq4QneEQXc8pCKLPq4Nedf0ghEf9q
snHNMvJB3vgW5dsUlRMtvPEK2FzA9oQR7SASx6+DoO72/tba3adeAtpFfMKLjh97
WPkuR7JfKENrDSzONzZou13ylsWVmc6Qx/1WA2Y3mlxOZOndIbGZYVqXomKOgXGR
Cf1ECEBvQQrdNLaRVSl6/yma4UNVNOOHp8OoszZNV49NkIuprLbbDQruB5I6e+fN
lmzmIWOQOeaU8hcw6422L1E2e7/oPtwNVr1BDFWHIb5AhDvEgDijh//MgHXtyhtf
Sk0OYyQYmbrw5Nj8jqGrhV4Q3FXtLmvj5otumk0QDPM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.5.1
Release Details
UpdatedSept. 20, 2026, 6:30 p.m.
Changelog

Fixed

  • The v1.5.0 release tarball contained stray macOS AppleDouble (._*) files and extended-attribute metadata (from com.apple.provenance, newly applied to files by macOS 26/27), which broke the Nextcloud App Store installer's "exactly one top-level folder" check on some upgrades (Extracted app moviedb has more than 1 folder). This release is content-identical to 1.5.0, repackaged with COPYFILE_DISABLE=1 and explicit xattr/AppleDouble stripping.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignatureMNWzJHDY5k2lApRRKmevWNUpqhtY7kORwD4FBvXTTscE2boide8e2JzJMSw7qbW/
OddgepINDy5AHgUw6hLbSmREvG5r44+VAoj6GJFtcJiTL/k4RHfSEECbEzBUNIsE
+Qray3p5h2sZH5Cqykq96pcGL230tEj8+tz4G6XQNMoOeghb5SZrdVeUcwpQGeoj
5ojYPd5TkUY3B+biuJxe4LwolWJRrxhNrW4E5WIgoibzO5VDggwyHK5GUDsLIiTb
uot1f546sL0WxbcW07K8kXJ5nnKbA25eRDvEqtgHBxNs667wb2ArMCAcEdLwR822
oFungmHhkXN5qTouDg95dbdoCBddYOE7lrK/viiIsD5xYwJ45/pWGHd0NeMJiDcN
+2NHrLC4pPo1k3PQ3snp6SG0DSOF5Sc/90ygd0CdWR2QDEDvYLnxIaooB17VUzeZ
3CtIlNJLoPmgMNTu7/H9o6YpaL1Z4CHerTbsd1VdlXGMzmm4kZk5N4v7LQFrpb1K
eRh6/kNjomkns7u4yJErdTsYICC6mgrnbRKIAqEIn9bagmjyQl5nMH9Jpa7Jl+5O
hL7ZekiXjEzvWL4YvrRyupxUVKBZklGmxhNMGpoelHpT1/wm1GSXKCnkUA8TTjMe
NXTKWJrwNHe03RlOCEhPYtNcik/xF04KICtAMi74iII=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.5.0
Release Details
UpdatedSept. 20, 2026, 3:19 p.m.
Changelog

Added

  • Dashboard now includes "Watches by Year" and "Watches by Platform" charts, including TV show watches (previously excluded from these stats). Both charts share a new "Show" filter to view All / Movies / TV Shows only.
  • Watchlist pagination (page/limit params, matching Movie/Series), fixing the previously unbounded /api/watchlist response.

Changed

  • Visual polish pass: consistent card hover/shadow treatment across MovieCard/SeriesCard/Dashboard stat cards (shared radius/shadow/transition values), a subtle poster gradient scrim for badge legibility, per-stat accent colors on the Dashboard, and richer chart styling — gradient-filled bars with a grow-in animation on Watches by Year, gradient fills and a smoother track on Watches by Platform.

Fixed

  • Recently Watched and Top Rated cards on the Dashboard no longer collapse into unreadable narrow strips on mobile viewports.
  • The Dashboard chart filter control no longer overflows the screen on narrow viewports.
  • /api/watchlist, /api/movies, and /api/series no longer throw a division-by-zero error on limit=0, or accept a negative page/limit that produced a negative offset — all three now clamp to sane minimums. totalPages is now consistently returned as an integer.
  • The watchlist's media-type filter no longer silently returns zero results on an unrecognized mediaType value — invalid values are now treated as "no filter", matching the stats endpoints' existing behavior.
  • Changing sort order on the watchlist while on a later page no longer leaves the user on a now out-of-range page; sorting resets to page 1.
  • The Dashboard's media-type "Show" filter is now visibly grouped with both charts it affects (under one "Watch Statistics" section) instead of appearing to apply only to "Watches by Year".
  • Switching the active shared library no longer leaves stale watchlist pagination/filter state behind — a page number or type filter left over from a previous library (which may have far more or fewer items) could point past the end of the new library's results and show a false empty state. Movies/TV filters are reset the same way.
  • The sidebar's watchlist counter badge now always reflects the library's true total, not a search/media-type-filtered count — previously applying a filter on the Watchlist page made the badge appear to shrink until the filter was cleared.
  • Opening the Watchlist page no longer fires two competing API requests (one before the active library was known, one after) — the first could return data for the wrong library depending on response timing.
  • Rapidly switching the Dashboard's "Show" chart filter no longer risks displaying stale data if an earlier request resolves after a later one.

Changed

  • Extracted the duplicated mediaType query-param validation from StatsController/WatchlistController into a shared helper on AuthenticatedController.
  • Added a resetFilters() action to the watchlist store (mirroring Movies/Series) so sort/type-filter/pagination resets follow one consistent pattern across Watchlist.vue and the shared-library switcher.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
Signaturexlyj+iMssN5+P1t+mfcYmQON/vtzerlnfPfb8QSxeAxwBvZCluFiIJ0MO6YY2R1K
4mwFvG4Kd1wjQULGd4g4fN+VN7UwsS4Jdp4jolx+qKIc5Hm5YGtTjO0DgOe3AfmX
5NuQzUgbV2f8SEhb7mVKsMIC51HCez2r+AEq0AQOaNOVv6SETZ8FzsYofWHZwxUU
5YzsBD1fOGilOLQEx3oEwqxHLQaknCOnmrKR++jF7v0Qtz85zp8oC9cophzJD7ei
BayPpbB1q8oX73mt4t+yCfWbzgBZRGWrsxPuAuP4YUYAMm8v4ii8RSuE+zeGDwv1
yFwxbmvCqw3SvIvLo4XP/ep0RQcOjt1SKMS6lfilIKZKfx+2oA+JcC5tR9fUC9w7
8SfAxBcm8uunMGl3SCKMlFig9CRJU80q1S//vtTWi5zJOh8Jdvc5fLg4T2weamsE
MeqD0OYlniLRWuhVR05FNxUeFKLMnDtdYU2hHhgAn420sfpPxIIaax9rS+DgBMqu
m6l2oOxXe74Rj6BjyvoPquYEXg30DBGl3isNgxD7j+93CKrXFUgltL7wqE/mXFVb
pw2/ZzaRbnY2qwBpfYXmYRi0n1CYpKdKSJtMNCQw2rG7MGhAeeO4/UJvGhg/DRdb
O2URYsUTmQmu5gOP81hXZ0hsLYIunFdLqn8nSnTnO6M=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.4.1
Release Details
UpdatedSept. 13, 2026, 2:22 p.m.
Changelog

Fixed

  • Translation placeholders now render correctly in paginated movie lists.

Tests

  • Added regression coverage for translated placeholders and plural arguments.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignaturefW/4adHB/dpgcR8RMr/F6/964k5AHNAz9qD1DjFFnAh/tVFcjQpUrd7ZBR8+Sc1uSe9NE8oogHa/WZ6bGr81mR1tdzUPq2jAzS91oCz6EM5o0eH3zkx21JjMLdZWJGQ2aSlqa14s/EtjgYWtWUS1HOHRfIyCmPvbvJciWQIZPXyD0GUnr5EENxgzvOm2n4duZ510ATiozQ2g3+IvlY/Mnm7rdwzza44Uokre3SSnnwi5aCA/GBjZdq3Eyu7EWtPNqUCyiW3+8l32GF1IqInQC5X00eKrEKfao8A8Zyvt6+3omx92rw4MObORIZnr7VSvu5yd7S8mz5bR72dSbNVFz1omC2DkhZquLvTE1ETLE3sxHuqEAjD0DC7CmqMIUy+mnRcNBSDdkgnuae2TOklbJK14m2tXNovCBL6BtGqIt4kPHBNloxr+zeanzhjwR/8Qz/xPbGudy7P6rGGPrdVk8GzRm+tCbh6TvhtMmYSo+GDsaJN9zQ8Tocsul7Ja960NN1jVJjIQhtyWQtd5Ym+TlPZ5UjmIqEmWrbWyzRdwzXgfAT6J1IE6hXZvujWfxFZV3u0seVej2gowsJDGD69/iWjtC5WVliAAoGTNBcjgBewO11+TeIb4HMa2cQsg9VdDeYMF/Uegawce68Tc39qWFl7YFDnG/iYnT/61T8r4QtQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.4.0
Release Details
UpdatedSept. 1, 2026, 6:57 p.m.
Changelog

Added

  • Shared Libraries: create named libraries and share your movie/TV collection with other Nextcloud users — assign viewer or editor roles, manage members, and switch between libraries from a single account. Everything about a title (catalog, watchlist, episode progress, ratings, platform, review) is shared across all library members; user_id on catalog rows becomes legacy attribution only — library membership is the sole access gate
  • New DB tables moviedb_libraries and moviedb_library_members; all catalog tables gain a library_id NOT NULL column (Migrations V5 → V7)
  • V5 backfills every user's existing data into an auto-created personal library; V6 enforces the NOT NULL constraint; V7 heals any duplicate-membership edge cases left by a check-then-insert race in V5
  • Self-leave: members added to a shared library can leave it without needing the owner to remove them (Leave button + confirmation dialog in the Libraries view)
  • GET /api/libraries/sharees?search=... — user-search endpoint backed by OCP\Collaboration\Collaborators\ISearch, respecting Nextcloud's shareapi_restrict_user_enumeration and group-restriction admin settings
  • Viewer notice banners on Add Movie, Add TV Show, and Add to Watchlist pages when the active library is view-only

Changed

  • All catalog endpoints (/api/movies, /api/series, /api/watchlist, watches, stats) now accept an optional libraryId query/body param and scope reads/writes to that library; omitting it falls back to the user's personal library
  • LibraryService.resolveLibraryId (writes) throws on a denied explicit ID instead of silently falling back to personal, preventing cross-library write confusion
  • Member management restricted to owner only (editors can no longer add/remove members); viewers see the members list read-only
  • Library delete cascade wrapped in a DB transaction (episodes → watches → watchlist → series → movies → members → library)
  • Rename preserves the caller's owner role in the response (annotate() helper centralises role annotation for all library-returning endpoints)
  • GET /api/libraries/sharees requires at least 1 character to prevent zero-query full user enumeration
  • Dashboard "Recently Watched" now interleaves movies and TV shows sorted by watch date instead of showing movies-only followed by TV-only

Fixed

  • Library rename bug: editing the name field immediately after saving no longer reverts to the pre-save name due to a stale local binding

Tests

  • 121 PHP tests, 136 JS tests, 0 lint errors
  • New: LibraryServiceTest (21 PHP tests covering create, rename, member CRUD, self-leave, canAccess/canEdit, annotate)
  • New: libraries.spec.js (28 JS tests covering store state, getters, fetch, create/rename/remove, leaveLibrary, member actions)
  • All pre-existing tests updated for v1.4 API signatures (libraryId param added to MovieService, WatchlistService, SeriesService, MovieWatchService, StatsService)
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignatureW/fG+iP7aiQ4JEqCs4ZaUYIW5HEfc+0t5YrUipKM8MEUvnJZh0N48oTjVhHI17TU
BcpmMBoE9/0TsaLEsK/F2sPUij5qhbEbnHIebiDI579YJxlSfNqj4ITcVFfMYiHh
6q2uSLsxyb7fQgL66RHbzaqq3PFRfRhdc5OmoJtB3Hq+xpvBDrkz516zKjD8hy01
CrI2kLhzYvqf4V8uqBCvfEh+SP0vlCuIGyzjYpqwIAw3YX6Y/2/3Ll7WCoAGAOEA
h6jCiGRhPFXP4tgD+Hj2hqGyRA9LjgkZWLbEGDSw/TclEee43pCAcT/b3p/Pv2wH
PokcYxn+cAAeOxqWG/v/JOk0SoDItx4gH1z4dKAVbnXz3emvAO6GjX/O5M80NZAv
ZWTzNjDHi0ErKAMb+WRRR3/aEvFt1UqIUsNGq4lFYPUX/lYePMEF/bY/aw3joHse
XgwhP4y2qVERPW48FX7GphVFgy7FdAmYXuCz6TapWJGx24bQyn6R7laNNAubGazE
0kvBi8day7u5iGib80rm0IBoCP6c9FEXFJKa1jlrCqfWdb3z7z0zn5Os2bx/sQ6X
rj0e+c/c75NtU48RBx61oCDGZM2RW9VoMfnf8IYVEpn391aNLFKxedFG6sdJvto2
tx+j5B8B7BH2wSLBeGPV9BnIw6ZCeMgB5r2mxq9YIBM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.3.1
Release Details
UpdatedAug. 29, 2026, 7:33 a.m.
Changelog

Fixed

  • PlatformService::findAllForUser now checks hasDefaults() before calling createDefaults(), avoiding an unnecessary DB write on every PHP process start
  • SeriesServiceTest: test mocks corrected from non-existent findByTmdbId to findByTmdbIdAndSeries; static $defaultsSeeded flag reset between test cases so platform-seeding tests run in isolation

Changed

  • App Store description updated to reflect TV show tracking and rewatch support added in 1.2.0 and 1.3.0
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignatureMBqLzKCQipMCqtf0gq6QFUqrK631nyx3olhG568t71yV/TOlV8kNQkntE1dQqNay
t6HB0DDREGQqfvGa8cg5MBmfg1aq3+8i/DWxVOAmavSD5vU9of2XnwjZivDfvJNu
/yOvUz6DnmK/GMCQ/FufzVZKanTCLPQ6d365qdnyHSpJcjXVp4hir8d7YbwGxqWo
DNSq6+g13CvCxMLo+tCaQK6AO3YZYKscYlSoo7YTO5vOfMErupZdv8TRHz0zj8YN
+kndD8NarfyOIEid0k8KTcA7rXdAIN13V8CjtQnwbjV4uk831MEfA6weKQkdaxt3
mnUBWi4lvCLcd2pqDlriHe0c/jqFLll2GQJNoXchfGH7nYwE5Lfn3+5lq6gha7Ke
KU6rsN8DlhEdKXl80ZIWfHwOGgewUhrVx5spgvaQ90Sjsq4J+ilX1osXQW+4YMyH
w6uKZfDFbR9t/NI55iBjDuAQNGkE6pIIVDcwOu48y5KSqC0bKiO65jwrA2dr5WSn
7Z8IsFbWR6rszgI47bbuhbV8Vfk+BteeC91LfyBvWljDuxgFNeOXQBhTeedsyx6B
y45vDccx0I5KaHm6lTlZ8eMeEGmADQ3qVaB1Vv/zmgt2cGJljO1EpbIBBJQsqn2S
eRw1V0S8qgctZTtCIdXc9jyIusM/cK+dHdR/hYKpvCU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.3.0
Release Details
UpdatedAug. 29, 2026, 6:50 a.m.
Changelog

Added

  • Episode-level TV show support (#15): track series, seasons, and individual episodes. Series get their own /tv section, list view, and detail page separate from movies
  • New moviedb_series and moviedb_episodes tables; series metadata and every episode (including specials) are imported from TMDB on add, one API call per season
  • Derived progress: season and series completion are computed from each episode's watched flag — never stored as a season/series-level percentage. Unaired episodes (air date in the future or unknown) are excluded from the denominator; specials (season 0) are stored and shown but excluded from progress
  • "Up next" card surfaces the first aired, unwatched episode
  • Mark whole season / whole series watched fan-out — idempotent, so re-clicking never re-flips; only aired, non-special episodes are affected
  • Series-owned watch metadata: a TV show carries its own rating, platform, language watched, and watch date — set on the Add TV Show and Edit TV Show forms, exactly like a movie — stored as a single series-level row in moviedb_movie_watches (nullable series_id/episode_id). Individual episodes are a plain watched/unwatched checkbox with no per-episode metadata
  • TMDB Movies/TV toggle in the search UI; localized TV genre list
  • Watchlist now supports TV shows as well as movies: a unified watchlist with a Movies/TV type toggle when adding, a Movie/TV badge on each entry, and an All/Movies/TV Shows type filter. Marking a show as watched imports the whole series (all seasons/episodes) and routes to its /tv detail page; marking a movie behaves as before
  • Dashboard tiles for TV shows watched and episodes watched; total runtime now includes episode runtime
  • Translations for all new strings (de, es, fr, it, nl)

Changed

  • Migration Version000003Date20260828 adds the series/episode tables (including a watched boolean on moviedb_episodes), relaxes moviedb_movie_watches.movie_id to nullable, and adds a media_type column to moviedb_watchlist (default movie; existing rows backfill to movie) — all add-only or NOT-NULL relaxation, safe for the SQLite fresh-install batch; no columns dropped
  • media_type is now populated on movies (default movie) for forward-compatibility
  • Year and platform charts remain movies-only in this release
  • Dashboard Avg Rating and Top Rated now include TV shows alongside movies — a show's rating lives on its single series-level watch row, so it counts toward the average and can appear in the Top Rated row. Movie and series cards now carry a small Movie/TV type badge

Fixed

  • Default streaming platforms are now seeded lazily on first read (PlatformService::findAllForUser) instead of relying solely on the migration's postSchemaChange hook, which Nextcloud does not reliably fire during occ app:enable. Fresh installs no longer show an empty platform picker; the seed is idempotent so it never duplicates existing defaults
  • Recently watched TV shows now appear on the dashboard alongside movies (the recent stats endpoint returns series with at least one watched episode, most-recently-watched first)
  • Episode watched state is stored as a boolean watched column on moviedb_episodes (toggled by the per-episode checkbox and the season/series "mark all watched" actions), and total runtime counts each watched episode's runtime. This replaces the earlier per-episode "log watch" dialog: episodes no longer carry their own date/platform/language/rating — that metadata belongs to the show as a whole (see Added)
  • Series import no longer fails when a show has a specials season: moviedb_episodes.season_number/episode_number now carry a DB default of 0 so episodes in season 0 (which match the entity's default and are thus omitted from the QBMapper INSERT) persist instead of hitting a NOT NULL constraint. Affected both direct series add and "mark watched" on a series watchlist item
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
Signatureo53wujykdigXdIMMC7OwGc4U1s5G5LWDUGFrsnyTbMe4zh9zLM/pb4KwuGJNbSWZ
lNAnrJg86s3Uj+tNdHMnEVzYkeAAqZ92TSdVN6UCbL+LMU+LbdJJOijXhEQho0xF
NF0x1U2+AzuW6fVDOC7eYmtIuCBAB/4xiGra/bqGVPGTpttmdYpkg6TEmF4NkhKs
TH0sNeoqbOKH0bvWU6q4d27Icqc8klNA+Eo61AGq4OOg4zY5I2CTdZHrGQW1uarV
esawGTxZpEf0B0+eg3dvMOXRq4f7ULLDGxvgbSZ8ulevAem0zHuO0ldeov1YJScb
5ko5nINoVV/AKJLqSgqkMX2XSduc12llo4uYD2aiSS4GqoIX60JwO2fFR59YfphM
1i4E5hVxGYWfXEOX9h38sOt2ea9yUS8/CUYLaXppP5Xr7gC1/gShFennJ4HEms8+
LAJXGgYaUwVR1OZzQ1IoydswGSeeHV++5Qs2cjD0no/Hy5FG1EFUPBJUuKmcwQSG
Q8YmI8/gxs+5M1O4vxCXWl4NaOnWbEkDoKKotQA5aOJVZfk0zIFUSjb0ZW87Q5NU
tBDZNi6ccg2DWNOxWdYgvpBwGDoLySpS5Z3csCKLkEmET6YGocEVTk3QdDW/XsYV
AXyD3J/SF1omJfWKZMJhLGxmdkDEdWg0/XSlbKgaUS4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.2.0
Release Details
UpdatedAug. 25, 2026, 6:53 p.m.
Changelog

Added

  • Rewatch support: new moviedb_movie_watches table stores one row per viewing (date, rating, review, platform, language). Each movie can now have a full watch history (#19)
  • Log again button on the movie detail page with a star-rating selector for quick rewatch logging
  • Watch history section on movie detail listing all watches with per-entry delete (hidden when only one entry exists)
  • Watchlist "mark as watched" on an already-watched movie now appends a new watch entry instead of creating a duplicate movie record

Changed

  • Migration Version000002Date20260824 backfills all existing per-movie watch data into the new watches table with a verify-before-drop guard; legacy columns are retained in 1.2.0 for safe downgrade and will be dropped in a future release
  • Star-rating selector replaces free-text number input in the log-watch dialog
  • Removed redundant date/language summary box from the movie detail header

Fixed

  • Edit form: rating/review/date changes now persist correctly even for movies without a prior watch row (previously silently dropped)

Tests

  • 73 JS tests, 69 PHP tests, 0 lint errors
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignaturezhR5gYHFnW4DQvbjaabhFfJoVCbw2xCpGDCzNmSHHNauQYQqsDweLrZpfHvADAHPuAvzv4OPDCXxngxRRvDTviwUnx+jmuvNpzSDazRNbQ18yZdGqrKF/T/ccCTMjpxtDqTnOJJIcPpAAASc4WWG6Vu44w3L2bzH7/4yC2AkXuAFoC9P+yAXnDNUvgpfHHGRj7CeYjBlqOZNwvOTfYacvw+kyJ0ozzWteH0sy5Y1+I4BNL0wtK3T7V7RD1BzALT889qCGyUtIph8D7XT57+uiVAntBZQQpTqoN3yGNu9fTPVzyC5b8frY45XOGX6pSQ/q0uQ7++BU4sKp8DuKiEZ9mwbHNp2Y4CnoY3rSE+IWi6CZpRAi+UY6UeL9dwcJ98Ts/1SHh9HYn/URPi02mAI1xmXkTfkQyfU+lLvASs5LfYrx69Cdi9O43tbYijo3SrtTANvy2TgicMj9maiMPP4eCtJ2fyN5T2vvYxJv3GYvKOmc4ZhBOG4OPhlOZtb1HnGbXFF+Vm/9oPpNax5KrbX3Ne7kSZs791ibk0hiXNPfHehdDZxBnXVTVhXvBknF8VyAQ09lXKlQ3GT9R9PKcZDVKXN4m/do4Lcs7XgeSQOEzmXS8LUY7ihwjHv7AIWK1e6To3MKLd5mT0RpJSbnTv6OFwhgv1psHfjOkkVQzVRkGs=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
MovieDB 1.1.2
Release Details
UpdatedAug. 24, 2026, 6:27 p.m.
Changelog

Fixed

  • Prevent adding the same movie twice: POST /api/movies now returns 409 Conflict with the existing movie's id when a duplicate tmdbId is submitted, matching the existing watchlist behavior (#17)
  • Watchlist store now shows a specific "already in your watchlist" message on 409 instead of the generic "failed to add" toast

Added

  • Friendly duplicate-movie dialog in the Add Movie view offering "View existing entry" (routes to the existing movie's detail page) or "Cancel", instead of a plain error toast
  • New i18n strings for the duplicate-movie dialog in all 5 locales (de, es, fr, it, nl)
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
Signature3svKAWeA1wnMKWjv6gguqWhW0hzWaovMs/B5VSy/vgo3j6zWKdUSnhPh18kL1STC4zCJ32lrpiMZzzeqMLUzDbVobV/8vY+fNpy02JV8doFOd+3UCf2kpxjY6Mt6AnfgSpoS7RDgykSZYmnX0qcVvH3GMJEfoZ1qCwSPZ5o2OPVQqv58e1jTYo+NVyOV6lkGZSoBt/qFxbupa4SZpSHp8Nx3h/fSeQdmRKewWjzHTJXhKXgpbMWUu0iCYx9wF/+uJO60OAGD4NFtVIPQmS7TEJ2CdYtQl+2DGquEPAx41RlxCWsjskwKpq5/BSq/uogwbM6Gz9pp3+G8viW6PDWC+nLlGdReXETOdVLCCMIGSGPfW5adYl2ZZb+gUcwb7ndKZ5Mm7vuoRh/HA5KNwxbSPwEXKCBY8WgkzcRRA/Ijc014G9run2px7yLA7E/j1Ym8ENkvOh3Kpk5V79lPjOya5ul4KcJw3idLmGSUFUDS2e4htJCmOyE3u3p+8t78ZU+PVvXOhxL43Aet9Bg3I+jW+WDqtdiRDv/9O4eiGCi1DiJBclroeKIYamOHcco5a3ZTEeqEe9LTS/iF1078BI7JTDhT/iAh1P+Fxpiarvr3gEh/tR6ae0OrwTH1/VWKQike1fkEzubcd81ArfoudJrylOxv+O/2W27j28DGpAI3DB4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
MovieDB 1.1.1
Release Details
UpdatedJuly 31, 2026, 10:10 a.m.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignatureoBoTuKwkslFX+XV2GPd7IYGCm/NvKhzIAawUt8qG9Gy4GCmIDGmPAtoiQa3ze9+2
MttRv3DMyuODHW1/Idr386cNa+L3witDP8hyiNv6uWLlJzQeh3Qo/etyKfhtdHGf
R4YAq/sIIQF02s9jtlsKaQ5dDLd+EpbP/1JD2/uWPu0vbQerL2HJTLIrPGn78kI4
nyK2nSUJCH0MtV4Elq4dG87Sg2jZCQvqkxZgle208FN9jx19EogjZSy1Dfyq49CI
NzdoKYX6+/EGcF1Vizl0ibtR+A+k+8E9c40qnUrs+XfbLNe+G+VBZ/Eo0AvEO79I
hiJWWaqorAwIUkt27vjik4Re6gsSjP0qo2b9btnsYn2Dj5s+dfza93QmygS6ExKL
ScGvTxSr/tANM6gAWIZqmzSu0plvp6uSA+1dRplhPkLGMk4KcJS0y1YvGdXEpbK+
caBHHdfkG6EAv9Y65+frFxCPxQdh9UloV4bYcVV8XTbhISC9J/rKPd2qlcmkaM2d
SsaC4+3F4Vbcw26CDEYi7mUl9SGW9BnBVqUmiEjZhbIAmuJssuwaVQQpn0nkUcxb
GE+k8b5+5W5J+EdMZISrZtChQz/uS7Ori+XSkxYuL7msRhlmUAWibZUl9LY66OxY
LEXNNteTYhC0n6PSBpIcsPNkFYGW5SLVsv21gyxc/Dg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32

Nextcloud 32

MovieDB 1.5.4
Release Details
UpdatedSept. 21, 2026, 7:59 a.m.
Changelog

Fixed

  • Several UI strings (search placeholders, "Enter movie/TV show title...", "Importing episodes...", "Write your thoughts...") had their trailing ... normalized to a proper ellipsis character () in an earlier change, but the translation files still keyed on the old three-dot strings. Non-English users were seeing raw English fallbacks for these. All five locales (de, es, fr, it, nl) are now back in sync.
  • Added the missing translation for "Failed to leave library. Please try again." across all locales.
  • Fixed a typo in the Spanish translation of that message ("abandonador" → "abandonar").

Thanks to @ba3r for reporting and fixing the translation drift (#47).

Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignatureKoU6GVlNgvtWAC9hWlSkVvK1e4m0Y/0Hm54qQTDgucO86ZdlP3OkJu0TehQ5O0K5
xtVq3jNUvkeoU/rewdLnREnVclfkBsmjeE2WGBgEIp1oM9xivg1jun3kXdXp/FWy
H5vL5MZZkUOLLGztrUJ/wli+DNicZbeEYK636MSpG+WO9gFGMrJRgNFu/34/p+OA
CyTpmSRW/1o5JwamYxGW1eCXwrJcDng3nzvyaq9HcYanMLU4LJi5XF43ZZXyJEJS
iywTogu3BDPfS0cfZly9SG3n5aSROV3FGjYjgOi1abjXZthovKHBps/HCnqmeBB7
vvjsNT15+QgbHgMKJmBLa/2NSb2iRbHxWj7RemBnW5t0LYpaTM+GiubOoPEACDkR
U8ty8UhynqAK6SHT1mmYlc1tk6JCaNy+Dxr8EiqY7hBwt/FkgIh6d4a3ySxljpR9
ef3QFu1PKn/2gGoAxLJYqo29L8i/u1QMBSlnC4/+vFoIqJjZU+t8J7Xto50uGV5e
0UUdOlmfYRH2PfzRO0y/C/nLMIVNsdgthndN0E5qogcT5f7hYVnne1BN/tllc93C
2ypAmgn8NEaksRJPw+2CZF9HADe5s6hijyXScWZz90KDWdUu0eCC8KLSp/bTQuaz
hCfgEJ1r+VdIuKxcDvfRExeCcby8RelgGPIlHxA37Go=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.5.3
Release Details
UpdatedSept. 20, 2026, 8:51 p.m.
Changelog

Fixed

  • Fresh installs on Nextcloud 32 no longer fail during occ app:enable. Three boolean columns (episodes.watched, libraries.is_personal, library_members.permission_edit) were declared NOT NULL in a way NC 32's migration validator rejects, and the moviedb_library_members table name hit NC's identifier-length limit for an auto-generated primary key name. Existing installs (including upgrades) are unaffected.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignatureSM91S8OUY7ERDhmFmiIJXRNo6AZzurMLVq7lFZy0GYfMwT5arI2CYJa1XlO1tUxk
0hDrvIY570YgZ1z6wWak3fd+855YYvMEjvUjT4TEBmsa76ZWKogg3TLFSUuFlqaB
Ktw9gKw4VsGqce4jinvAiSi66ZmRcTFJZd6nltqUrFQmzhcSDlshJkYs2UCqmIQL
7j56ylMMxhLWx2/zfMn14InRqNyXZuHzamrgGLKY+65BW+y/mlHZvGS/Pf/ivOD7
8JOR9NbLhtk3rO/g/ymTJW6smRkl1XcXKzutRxjQMzwZBFc4GQhwmAHFDGWx8B3O
yTiyZGKhvO//UKIEDk/JPcYU8lNOLN7MAN9QJgPGStblMasS0Hvlj1AfryTQS+Uj
SWTLlfWd3FjPB8sPc7i+V3i/CohnKKCiEJ2XX+tviVErn5z2l3hVw1RzQHyHCKea
fOyfL6CpCZQOWgmJuRpFkdoeRiw2PeH03cMN+4FeBTnV5cktpL+qcMA3uDyfpxAD
ijRxYDvmSj81Ylb83Aa7HdO5W4NJPaimu+rzX2wagomBpLeab7VT3Z2lT76E/h7Q
89r/KbnnsjEZBzasOmTYZ8cSx8di785gJcdqoh7tlronUTRm1TJJDgPX1P3gBCkm
GUsmBDZmrZ75Ubl3Wz3LSKWz7DMNkncZaPMZNRAtH7k=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.5.2
Release Details
UpdatedSept. 20, 2026, 7:22 p.m.
Changelog

Fixed

  • "Watches by Year" on the Dashboard now groups by the year you actually watched a movie/show, not its release/air year. Matches the "year in review" convention used by Trakt/Letterboxd.
  • The "Watches by Year" chart no longer stretches to fill most of the screen when there are only a few bars (e.g. a small watch history).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
Signaturekai3DGfd2M037yLLMLcYqZWHi6lneYfEykTrNFtz+M4LA4eh0LS7NhfOCnOcf+Hn
otpQkbSb1+VtwlQba40wUBtoQn0CHrgZ+TfUsCX09I5NGSBDZiq+mtlCexIL8tWN
i9xD5jkfxocBn63s5Iw9tG6IXqBCEspaR9GIdJsRp+3tNV62uCederi+LWpfaErn
YYbNGMXMhlXyObkamiA0Y02bIGOg9r7iHURklVUdObG5NKMUnldG+b3iqfpU7Gz6
7otcc3I00Cq3KxSB+ZAypTml6DjrYpf54zp8JL0lMi63QfXBNjSY+dkwR00+ufqC
RGIwZN5v1azDVMOD0zHUQyS4Hk5425tpX2gzq4QneEQXc8pCKLPq4Nedf0ghEf9q
snHNMvJB3vgW5dsUlRMtvPEK2FzA9oQR7SASx6+DoO72/tba3adeAtpFfMKLjh97
WPkuR7JfKENrDSzONzZou13ylsWVmc6Qx/1WA2Y3mlxOZOndIbGZYVqXomKOgXGR
Cf1ECEBvQQrdNLaRVSl6/yma4UNVNOOHp8OoszZNV49NkIuprLbbDQruB5I6e+fN
lmzmIWOQOeaU8hcw6422L1E2e7/oPtwNVr1BDFWHIb5AhDvEgDijh//MgHXtyhtf
Sk0OYyQYmbrw5Nj8jqGrhV4Q3FXtLmvj5otumk0QDPM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.5.1
Release Details
UpdatedSept. 20, 2026, 6:30 p.m.
Changelog

Fixed

  • The v1.5.0 release tarball contained stray macOS AppleDouble (._*) files and extended-attribute metadata (from com.apple.provenance, newly applied to files by macOS 26/27), which broke the Nextcloud App Store installer's "exactly one top-level folder" check on some upgrades (Extracted app moviedb has more than 1 folder). This release is content-identical to 1.5.0, repackaged with COPYFILE_DISABLE=1 and explicit xattr/AppleDouble stripping.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignatureMNWzJHDY5k2lApRRKmevWNUpqhtY7kORwD4FBvXTTscE2boide8e2JzJMSw7qbW/
OddgepINDy5AHgUw6hLbSmREvG5r44+VAoj6GJFtcJiTL/k4RHfSEECbEzBUNIsE
+Qray3p5h2sZH5Cqykq96pcGL230tEj8+tz4G6XQNMoOeghb5SZrdVeUcwpQGeoj
5ojYPd5TkUY3B+biuJxe4LwolWJRrxhNrW4E5WIgoibzO5VDggwyHK5GUDsLIiTb
uot1f546sL0WxbcW07K8kXJ5nnKbA25eRDvEqtgHBxNs667wb2ArMCAcEdLwR822
oFungmHhkXN5qTouDg95dbdoCBddYOE7lrK/viiIsD5xYwJ45/pWGHd0NeMJiDcN
+2NHrLC4pPo1k3PQ3snp6SG0DSOF5Sc/90ygd0CdWR2QDEDvYLnxIaooB17VUzeZ
3CtIlNJLoPmgMNTu7/H9o6YpaL1Z4CHerTbsd1VdlXGMzmm4kZk5N4v7LQFrpb1K
eRh6/kNjomkns7u4yJErdTsYICC6mgrnbRKIAqEIn9bagmjyQl5nMH9Jpa7Jl+5O
hL7ZekiXjEzvWL4YvrRyupxUVKBZklGmxhNMGpoelHpT1/wm1GSXKCnkUA8TTjMe
NXTKWJrwNHe03RlOCEhPYtNcik/xF04KICtAMi74iII=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.5.0
Release Details
UpdatedSept. 20, 2026, 3:19 p.m.
Changelog

Added

  • Dashboard now includes "Watches by Year" and "Watches by Platform" charts, including TV show watches (previously excluded from these stats). Both charts share a new "Show" filter to view All / Movies / TV Shows only.
  • Watchlist pagination (page/limit params, matching Movie/Series), fixing the previously unbounded /api/watchlist response.

Changed

  • Visual polish pass: consistent card hover/shadow treatment across MovieCard/SeriesCard/Dashboard stat cards (shared radius/shadow/transition values), a subtle poster gradient scrim for badge legibility, per-stat accent colors on the Dashboard, and richer chart styling — gradient-filled bars with a grow-in animation on Watches by Year, gradient fills and a smoother track on Watches by Platform.

Fixed

  • Recently Watched and Top Rated cards on the Dashboard no longer collapse into unreadable narrow strips on mobile viewports.
  • The Dashboard chart filter control no longer overflows the screen on narrow viewports.
  • /api/watchlist, /api/movies, and /api/series no longer throw a division-by-zero error on limit=0, or accept a negative page/limit that produced a negative offset — all three now clamp to sane minimums. totalPages is now consistently returned as an integer.
  • The watchlist's media-type filter no longer silently returns zero results on an unrecognized mediaType value — invalid values are now treated as "no filter", matching the stats endpoints' existing behavior.
  • Changing sort order on the watchlist while on a later page no longer leaves the user on a now out-of-range page; sorting resets to page 1.
  • The Dashboard's media-type "Show" filter is now visibly grouped with both charts it affects (under one "Watch Statistics" section) instead of appearing to apply only to "Watches by Year".
  • Switching the active shared library no longer leaves stale watchlist pagination/filter state behind — a page number or type filter left over from a previous library (which may have far more or fewer items) could point past the end of the new library's results and show a false empty state. Movies/TV filters are reset the same way.
  • The sidebar's watchlist counter badge now always reflects the library's true total, not a search/media-type-filtered count — previously applying a filter on the Watchlist page made the badge appear to shrink until the filter was cleared.
  • Opening the Watchlist page no longer fires two competing API requests (one before the active library was known, one after) — the first could return data for the wrong library depending on response timing.
  • Rapidly switching the Dashboard's "Show" chart filter no longer risks displaying stale data if an earlier request resolves after a later one.

Changed

  • Extracted the duplicated mediaType query-param validation from StatsController/WatchlistController into a shared helper on AuthenticatedController.
  • Added a resetFilters() action to the watchlist store (mirroring Movies/Series) so sort/type-filter/pagination resets follow one consistent pattern across Watchlist.vue and the shared-library switcher.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
Signaturexlyj+iMssN5+P1t+mfcYmQON/vtzerlnfPfb8QSxeAxwBvZCluFiIJ0MO6YY2R1K
4mwFvG4Kd1wjQULGd4g4fN+VN7UwsS4Jdp4jolx+qKIc5Hm5YGtTjO0DgOe3AfmX
5NuQzUgbV2f8SEhb7mVKsMIC51HCez2r+AEq0AQOaNOVv6SETZ8FzsYofWHZwxUU
5YzsBD1fOGilOLQEx3oEwqxHLQaknCOnmrKR++jF7v0Qtz85zp8oC9cophzJD7ei
BayPpbB1q8oX73mt4t+yCfWbzgBZRGWrsxPuAuP4YUYAMm8v4ii8RSuE+zeGDwv1
yFwxbmvCqw3SvIvLo4XP/ep0RQcOjt1SKMS6lfilIKZKfx+2oA+JcC5tR9fUC9w7
8SfAxBcm8uunMGl3SCKMlFig9CRJU80q1S//vtTWi5zJOh8Jdvc5fLg4T2weamsE
MeqD0OYlniLRWuhVR05FNxUeFKLMnDtdYU2hHhgAn420sfpPxIIaax9rS+DgBMqu
m6l2oOxXe74Rj6BjyvoPquYEXg30DBGl3isNgxD7j+93CKrXFUgltL7wqE/mXFVb
pw2/ZzaRbnY2qwBpfYXmYRi0n1CYpKdKSJtMNCQw2rG7MGhAeeO4/UJvGhg/DRdb
O2URYsUTmQmu5gOP81hXZ0hsLYIunFdLqn8nSnTnO6M=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.4.1
Release Details
UpdatedSept. 13, 2026, 2:22 p.m.
Changelog

Fixed

  • Translation placeholders now render correctly in paginated movie lists.

Tests

  • Added regression coverage for translated placeholders and plural arguments.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignaturefW/4adHB/dpgcR8RMr/F6/964k5AHNAz9qD1DjFFnAh/tVFcjQpUrd7ZBR8+Sc1uSe9NE8oogHa/WZ6bGr81mR1tdzUPq2jAzS91oCz6EM5o0eH3zkx21JjMLdZWJGQ2aSlqa14s/EtjgYWtWUS1HOHRfIyCmPvbvJciWQIZPXyD0GUnr5EENxgzvOm2n4duZ510ATiozQ2g3+IvlY/Mnm7rdwzza44Uokre3SSnnwi5aCA/GBjZdq3Eyu7EWtPNqUCyiW3+8l32GF1IqInQC5X00eKrEKfao8A8Zyvt6+3omx92rw4MObORIZnr7VSvu5yd7S8mz5bR72dSbNVFz1omC2DkhZquLvTE1ETLE3sxHuqEAjD0DC7CmqMIUy+mnRcNBSDdkgnuae2TOklbJK14m2tXNovCBL6BtGqIt4kPHBNloxr+zeanzhjwR/8Qz/xPbGudy7P6rGGPrdVk8GzRm+tCbh6TvhtMmYSo+GDsaJN9zQ8Tocsul7Ja960NN1jVJjIQhtyWQtd5Ym+TlPZ5UjmIqEmWrbWyzRdwzXgfAT6J1IE6hXZvujWfxFZV3u0seVej2gowsJDGD69/iWjtC5WVliAAoGTNBcjgBewO11+TeIb4HMa2cQsg9VdDeYMF/Uegawce68Tc39qWFl7YFDnG/iYnT/61T8r4QtQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.4.0
Release Details
UpdatedSept. 1, 2026, 6:57 p.m.
Changelog

Added

  • Shared Libraries: create named libraries and share your movie/TV collection with other Nextcloud users — assign viewer or editor roles, manage members, and switch between libraries from a single account. Everything about a title (catalog, watchlist, episode progress, ratings, platform, review) is shared across all library members; user_id on catalog rows becomes legacy attribution only — library membership is the sole access gate
  • New DB tables moviedb_libraries and moviedb_library_members; all catalog tables gain a library_id NOT NULL column (Migrations V5 → V7)
  • V5 backfills every user's existing data into an auto-created personal library; V6 enforces the NOT NULL constraint; V7 heals any duplicate-membership edge cases left by a check-then-insert race in V5
  • Self-leave: members added to a shared library can leave it without needing the owner to remove them (Leave button + confirmation dialog in the Libraries view)
  • GET /api/libraries/sharees?search=... — user-search endpoint backed by OCP\Collaboration\Collaborators\ISearch, respecting Nextcloud's shareapi_restrict_user_enumeration and group-restriction admin settings
  • Viewer notice banners on Add Movie, Add TV Show, and Add to Watchlist pages when the active library is view-only

Changed

  • All catalog endpoints (/api/movies, /api/series, /api/watchlist, watches, stats) now accept an optional libraryId query/body param and scope reads/writes to that library; omitting it falls back to the user's personal library
  • LibraryService.resolveLibraryId (writes) throws on a denied explicit ID instead of silently falling back to personal, preventing cross-library write confusion
  • Member management restricted to owner only (editors can no longer add/remove members); viewers see the members list read-only
  • Library delete cascade wrapped in a DB transaction (episodes → watches → watchlist → series → movies → members → library)
  • Rename preserves the caller's owner role in the response (annotate() helper centralises role annotation for all library-returning endpoints)
  • GET /api/libraries/sharees requires at least 1 character to prevent zero-query full user enumeration
  • Dashboard "Recently Watched" now interleaves movies and TV shows sorted by watch date instead of showing movies-only followed by TV-only

Fixed

  • Library rename bug: editing the name field immediately after saving no longer reverts to the pre-save name due to a stale local binding

Tests

  • 121 PHP tests, 136 JS tests, 0 lint errors
  • New: LibraryServiceTest (21 PHP tests covering create, rename, member CRUD, self-leave, canAccess/canEdit, annotate)
  • New: libraries.spec.js (28 JS tests covering store state, getters, fetch, create/rename/remove, leaveLibrary, member actions)
  • All pre-existing tests updated for v1.4 API signatures (libraryId param added to MovieService, WatchlistService, SeriesService, MovieWatchService, StatsService)
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignatureW/fG+iP7aiQ4JEqCs4ZaUYIW5HEfc+0t5YrUipKM8MEUvnJZh0N48oTjVhHI17TU
BcpmMBoE9/0TsaLEsK/F2sPUij5qhbEbnHIebiDI579YJxlSfNqj4ITcVFfMYiHh
6q2uSLsxyb7fQgL66RHbzaqq3PFRfRhdc5OmoJtB3Hq+xpvBDrkz516zKjD8hy01
CrI2kLhzYvqf4V8uqBCvfEh+SP0vlCuIGyzjYpqwIAw3YX6Y/2/3Ll7WCoAGAOEA
h6jCiGRhPFXP4tgD+Hj2hqGyRA9LjgkZWLbEGDSw/TclEee43pCAcT/b3p/Pv2wH
PokcYxn+cAAeOxqWG/v/JOk0SoDItx4gH1z4dKAVbnXz3emvAO6GjX/O5M80NZAv
ZWTzNjDHi0ErKAMb+WRRR3/aEvFt1UqIUsNGq4lFYPUX/lYePMEF/bY/aw3joHse
XgwhP4y2qVERPW48FX7GphVFgy7FdAmYXuCz6TapWJGx24bQyn6R7laNNAubGazE
0kvBi8day7u5iGib80rm0IBoCP6c9FEXFJKa1jlrCqfWdb3z7z0zn5Os2bx/sQ6X
rj0e+c/c75NtU48RBx61oCDGZM2RW9VoMfnf8IYVEpn391aNLFKxedFG6sdJvto2
tx+j5B8B7BH2wSLBeGPV9BnIw6ZCeMgB5r2mxq9YIBM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.3.1
Release Details
UpdatedAug. 29, 2026, 7:33 a.m.
Changelog

Fixed

  • PlatformService::findAllForUser now checks hasDefaults() before calling createDefaults(), avoiding an unnecessary DB write on every PHP process start
  • SeriesServiceTest: test mocks corrected from non-existent findByTmdbId to findByTmdbIdAndSeries; static $defaultsSeeded flag reset between test cases so platform-seeding tests run in isolation

Changed

  • App Store description updated to reflect TV show tracking and rewatch support added in 1.2.0 and 1.3.0
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignatureMBqLzKCQipMCqtf0gq6QFUqrK631nyx3olhG568t71yV/TOlV8kNQkntE1dQqNay
t6HB0DDREGQqfvGa8cg5MBmfg1aq3+8i/DWxVOAmavSD5vU9of2XnwjZivDfvJNu
/yOvUz6DnmK/GMCQ/FufzVZKanTCLPQ6d365qdnyHSpJcjXVp4hir8d7YbwGxqWo
DNSq6+g13CvCxMLo+tCaQK6AO3YZYKscYlSoo7YTO5vOfMErupZdv8TRHz0zj8YN
+kndD8NarfyOIEid0k8KTcA7rXdAIN13V8CjtQnwbjV4uk831MEfA6weKQkdaxt3
mnUBWi4lvCLcd2pqDlriHe0c/jqFLll2GQJNoXchfGH7nYwE5Lfn3+5lq6gha7Ke
KU6rsN8DlhEdKXl80ZIWfHwOGgewUhrVx5spgvaQ90Sjsq4J+ilX1osXQW+4YMyH
w6uKZfDFbR9t/NI55iBjDuAQNGkE6pIIVDcwOu48y5KSqC0bKiO65jwrA2dr5WSn
7Z8IsFbWR6rszgI47bbuhbV8Vfk+BteeC91LfyBvWljDuxgFNeOXQBhTeedsyx6B
y45vDccx0I5KaHm6lTlZ8eMeEGmADQ3qVaB1Vv/zmgt2cGJljO1EpbIBBJQsqn2S
eRw1V0S8qgctZTtCIdXc9jyIusM/cK+dHdR/hYKpvCU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.3.0
Release Details
UpdatedAug. 29, 2026, 6:50 a.m.
Changelog

Added

  • Episode-level TV show support (#15): track series, seasons, and individual episodes. Series get their own /tv section, list view, and detail page separate from movies
  • New moviedb_series and moviedb_episodes tables; series metadata and every episode (including specials) are imported from TMDB on add, one API call per season
  • Derived progress: season and series completion are computed from each episode's watched flag — never stored as a season/series-level percentage. Unaired episodes (air date in the future or unknown) are excluded from the denominator; specials (season 0) are stored and shown but excluded from progress
  • "Up next" card surfaces the first aired, unwatched episode
  • Mark whole season / whole series watched fan-out — idempotent, so re-clicking never re-flips; only aired, non-special episodes are affected
  • Series-owned watch metadata: a TV show carries its own rating, platform, language watched, and watch date — set on the Add TV Show and Edit TV Show forms, exactly like a movie — stored as a single series-level row in moviedb_movie_watches (nullable series_id/episode_id). Individual episodes are a plain watched/unwatched checkbox with no per-episode metadata
  • TMDB Movies/TV toggle in the search UI; localized TV genre list
  • Watchlist now supports TV shows as well as movies: a unified watchlist with a Movies/TV type toggle when adding, a Movie/TV badge on each entry, and an All/Movies/TV Shows type filter. Marking a show as watched imports the whole series (all seasons/episodes) and routes to its /tv detail page; marking a movie behaves as before
  • Dashboard tiles for TV shows watched and episodes watched; total runtime now includes episode runtime
  • Translations for all new strings (de, es, fr, it, nl)

Changed

  • Migration Version000003Date20260828 adds the series/episode tables (including a watched boolean on moviedb_episodes), relaxes moviedb_movie_watches.movie_id to nullable, and adds a media_type column to moviedb_watchlist (default movie; existing rows backfill to movie) — all add-only or NOT-NULL relaxation, safe for the SQLite fresh-install batch; no columns dropped
  • media_type is now populated on movies (default movie) for forward-compatibility
  • Year and platform charts remain movies-only in this release
  • Dashboard Avg Rating and Top Rated now include TV shows alongside movies — a show's rating lives on its single series-level watch row, so it counts toward the average and can appear in the Top Rated row. Movie and series cards now carry a small Movie/TV type badge

Fixed

  • Default streaming platforms are now seeded lazily on first read (PlatformService::findAllForUser) instead of relying solely on the migration's postSchemaChange hook, which Nextcloud does not reliably fire during occ app:enable. Fresh installs no longer show an empty platform picker; the seed is idempotent so it never duplicates existing defaults
  • Recently watched TV shows now appear on the dashboard alongside movies (the recent stats endpoint returns series with at least one watched episode, most-recently-watched first)
  • Episode watched state is stored as a boolean watched column on moviedb_episodes (toggled by the per-episode checkbox and the season/series "mark all watched" actions), and total runtime counts each watched episode's runtime. This replaces the earlier per-episode "log watch" dialog: episodes no longer carry their own date/platform/language/rating — that metadata belongs to the show as a whole (see Added)
  • Series import no longer fails when a show has a specials season: moviedb_episodes.season_number/episode_number now carry a DB default of 0 so episodes in season 0 (which match the entity's default and are thus omitted from the QBMapper INSERT) persist instead of hitting a NOT NULL constraint. Affected both direct series add and "mark watched" on a series watchlist item
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
Signatureo53wujykdigXdIMMC7OwGc4U1s5G5LWDUGFrsnyTbMe4zh9zLM/pb4KwuGJNbSWZ
lNAnrJg86s3Uj+tNdHMnEVzYkeAAqZ92TSdVN6UCbL+LMU+LbdJJOijXhEQho0xF
NF0x1U2+AzuW6fVDOC7eYmtIuCBAB/4xiGra/bqGVPGTpttmdYpkg6TEmF4NkhKs
TH0sNeoqbOKH0bvWU6q4d27Icqc8klNA+Eo61AGq4OOg4zY5I2CTdZHrGQW1uarV
esawGTxZpEf0B0+eg3dvMOXRq4f7ULLDGxvgbSZ8ulevAem0zHuO0ldeov1YJScb
5ko5nINoVV/AKJLqSgqkMX2XSduc12llo4uYD2aiSS4GqoIX60JwO2fFR59YfphM
1i4E5hVxGYWfXEOX9h38sOt2ea9yUS8/CUYLaXppP5Xr7gC1/gShFennJ4HEms8+
LAJXGgYaUwVR1OZzQ1IoydswGSeeHV++5Qs2cjD0no/Hy5FG1EFUPBJUuKmcwQSG
Q8YmI8/gxs+5M1O4vxCXWl4NaOnWbEkDoKKotQA5aOJVZfk0zIFUSjb0ZW87Q5NU
tBDZNi6ccg2DWNOxWdYgvpBwGDoLySpS5Z3csCKLkEmET6YGocEVTk3QdDW/XsYV
AXyD3J/SF1omJfWKZMJhLGxmdkDEdWg0/XSlbKgaUS4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
MovieDB 1.2.0
Release Details
UpdatedAug. 25, 2026, 6:53 p.m.
Changelog

Added

  • Rewatch support: new moviedb_movie_watches table stores one row per viewing (date, rating, review, platform, language). Each movie can now have a full watch history (#19)
  • Log again button on the movie detail page with a star-rating selector for quick rewatch logging
  • Watch history section on movie detail listing all watches with per-entry delete (hidden when only one entry exists)
  • Watchlist "mark as watched" on an already-watched movie now appends a new watch entry instead of creating a duplicate movie record

Changed

  • Migration Version000002Date20260824 backfills all existing per-movie watch data into the new watches table with a verify-before-drop guard; legacy columns are retained in 1.2.0 for safe downgrade and will be dropped in a future release
  • Star-rating selector replaces free-text number input in the log-watch dialog
  • Removed redundant date/language summary box from the movie detail header

Fixed

  • Edit form: rating/review/date changes now persist correctly even for movies without a prior watch row (previously silently dropped)

Tests

  • 73 JS tests, 69 PHP tests, 0 lint errors
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignaturezhR5gYHFnW4DQvbjaabhFfJoVCbw2xCpGDCzNmSHHNauQYQqsDweLrZpfHvADAHPuAvzv4OPDCXxngxRRvDTviwUnx+jmuvNpzSDazRNbQ18yZdGqrKF/T/ccCTMjpxtDqTnOJJIcPpAAASc4WWG6Vu44w3L2bzH7/4yC2AkXuAFoC9P+yAXnDNUvgpfHHGRj7CeYjBlqOZNwvOTfYacvw+kyJ0ozzWteH0sy5Y1+I4BNL0wtK3T7V7RD1BzALT889qCGyUtIph8D7XT57+uiVAntBZQQpTqoN3yGNu9fTPVzyC5b8frY45XOGX6pSQ/q0uQ7++BU4sKp8DuKiEZ9mwbHNp2Y4CnoY3rSE+IWi6CZpRAi+UY6UeL9dwcJ98Ts/1SHh9HYn/URPi02mAI1xmXkTfkQyfU+lLvASs5LfYrx69Cdi9O43tbYijo3SrtTANvy2TgicMj9maiMPP4eCtJ2fyN5T2vvYxJv3GYvKOmc4ZhBOG4OPhlOZtb1HnGbXFF+Vm/9oPpNax5KrbX3Ne7kSZs791ibk0hiXNPfHehdDZxBnXVTVhXvBknF8VyAQ09lXKlQ3GT9R9PKcZDVKXN4m/do4Lcs7XgeSQOEzmXS8LUY7ihwjHv7AIWK1e6To3MKLd5mT0RpJSbnTv6OFwhgv1psHfjOkkVQzVRkGs=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
MovieDB 1.1.2
Release Details
UpdatedAug. 24, 2026, 6:27 p.m.
Changelog

Fixed

  • Prevent adding the same movie twice: POST /api/movies now returns 409 Conflict with the existing movie's id when a duplicate tmdbId is submitted, matching the existing watchlist behavior (#17)
  • Watchlist store now shows a specific "already in your watchlist" message on 409 instead of the generic "failed to add" toast

Added

  • Friendly duplicate-movie dialog in the Add Movie view offering "View existing entry" (routes to the existing movie's detail page) or "Cancel", instead of a plain error toast
  • New i18n strings for the duplicate-movie dialog in all 5 locales (de, es, fr, it, nl)
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
Signature3svKAWeA1wnMKWjv6gguqWhW0hzWaovMs/B5VSy/vgo3j6zWKdUSnhPh18kL1STC4zCJ32lrpiMZzzeqMLUzDbVobV/8vY+fNpy02JV8doFOd+3UCf2kpxjY6Mt6AnfgSpoS7RDgykSZYmnX0qcVvH3GMJEfoZ1qCwSPZ5o2OPVQqv58e1jTYo+NVyOV6lkGZSoBt/qFxbupa4SZpSHp8Nx3h/fSeQdmRKewWjzHTJXhKXgpbMWUu0iCYx9wF/+uJO60OAGD4NFtVIPQmS7TEJ2CdYtQl+2DGquEPAx41RlxCWsjskwKpq5/BSq/uogwbM6Gz9pp3+G8viW6PDWC+nLlGdReXETOdVLCCMIGSGPfW5adYl2ZZb+gUcwb7ndKZ5Mm7vuoRh/HA5KNwxbSPwEXKCBY8WgkzcRRA/Ijc014G9run2px7yLA7E/j1Ym8ENkvOh3Kpk5V79lPjOya5ul4KcJw3idLmGSUFUDS2e4htJCmOyE3u3p+8t78ZU+PVvXOhxL43Aet9Bg3I+jW+WDqtdiRDv/9O4eiGCi1DiJBclroeKIYamOHcco5a3ZTEeqEe9LTS/iF1078BI7JTDhT/iAh1P+Fxpiarvr3gEh/tR6ae0OrwTH1/VWKQike1fkEzubcd81ArfoudJrylOxv+O/2W27j28DGpAI3DB4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
MovieDB 1.1.1
Release Details
UpdatedJuly 31, 2026, 10:10 a.m.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhMUMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzE3MTMyMTI5WhcNMzYwNjIyMTMyMTI5WjASMRAwDgYD
VQQDDAdtb3ZpZWRiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6t01
0BBouRw8rCA2eTQU1HdZfNE4scCAg9UwsujvnjDJwMslqUV+Lue3+g8/pZOubxNA
GDDiaKku3iYbRSnVzQsmsSUa6oUZ7d49+RTJpWl0IkpJEz8i+J+aPkNj3eB7lXR8
db1Ke/b59ATZIUAhkq8skx4kMUqjfHnH6e3IkWxbvYbmqFGV+cnReiwODgPSA0Sf
Y+L3S2XnPg/O8xtPmvEpA6gvhYZnYsytlrqh/vkt1TaeSLrroOeXKtG6hEtffVXT
UNklss/84vbjOKwkQtQA4LpaT827y5MyrCi8nIcT6kcYeaNMlOMM/587WYg3HU75
suTKz7DGoOeIWrHuaz1ic8f0O5qZGNCNOku2vz4/GU0ZzQsefIXnrix+4jcj8EX3
3hRb3xsIV/bpP2yPobMGu2MRYHccMNqfnT11O6LNvSXzjOITh39WJdf43pb/mddj
8an3cS+wNmcYU09RzB6dGyk++fVwnZvZ7rFCaRiIRYNOZ69J1BtcAxhb6UenuK7b
bFcknbRQEZOxr0qy4IdRBPr2h27COv2vROEDbSMZF9YtO8KL1k/JleCyJgj7uFoY
jo+mgfyJsr/ytco0TZrEskgoZvUffRnzedqbbTyzTDLiX7CYMKT6Ks9aCDgHUb8k
iSe6+Uqr1rLqJlPg5cgiPY1+sd7WeQNom47qUhkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEANsVS7rTvACg3I3Ncfo9d9VMGHnRsgXlEmGYg+KiAQ2OMoVxmpG/0rftp
wNDZV5Gyq8d6E5BO6YgmR+nCWnY7qwXt9t2r2wV0MZ3hVc1s6Hhrk/ZcXuCM3QE0
SGYSi4Th/IyNXN2JvY668aVigglsoD2Mq+cp/XZdMG/6UOyDZKdo/GEQYTv9+eHi
j/Ol1ayXhIK9JruEy2Y6NyB5qs3Y5CRzKne343UiSd8rPWX1GrRuBQ59diRTCL/v
F40EqVxaT7j/BFHmLr86J2+ycXNOPyd9tqzjn3ZSoSK/46zAethu31e2B95BcHCe
d9kofYWAJaLP98he/XqKJvQMGa4g9A==
-----END CERTIFICATE-----
SignatureoBoTuKwkslFX+XV2GPd7IYGCm/NvKhzIAawUt8qG9Gy4GCmIDGmPAtoiQa3ze9+2
MttRv3DMyuODHW1/Idr386cNa+L3witDP8hyiNv6uWLlJzQeh3Qo/etyKfhtdHGf
R4YAq/sIIQF02s9jtlsKaQ5dDLd+EpbP/1JD2/uWPu0vbQerL2HJTLIrPGn78kI4
nyK2nSUJCH0MtV4Elq4dG87Sg2jZCQvqkxZgle208FN9jx19EogjZSy1Dfyq49CI
NzdoKYX6+/EGcF1Vizl0ibtR+A+k+8E9c40qnUrs+XfbLNe+G+VBZ/Eo0AvEO79I
hiJWWaqorAwIUkt27vjik4Re6gsSjP0qo2b9btnsYn2Dj5s+dfza93QmygS6ExKL
ScGvTxSr/tANM6gAWIZqmzSu0plvp6uSA+1dRplhPkLGMk4KcJS0y1YvGdXEpbK+
caBHHdfkG6EAv9Y65+frFxCPxQdh9UloV4bYcVV8XTbhISC9J/rKPd2qlcmkaM2d
SsaC4+3F4Vbcw26CDEYi7mUl9SGW9BnBVqUmiEjZhbIAmuJssuwaVQQpn0nkUcxb
GE+k8b5+5W5J+EdMZISrZtChQz/uS7Ori+XSkxYuL7msRhlmUAWibZUl9LY66OxY
LEXNNteTYhC0n6PSBpIcsPNkFYGW5SLVsv21gyxc/Dg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32