Add audio bulk-download
authorRadek Czajka <rczajka@rczajka.pl>
Tue, 16 Jun 2026 12:45:10 +0000 (14:45 +0200)
committerRadek Czajka <rczajka@rczajka.pl>
Tue, 16 Jun 2026 12:45:10 +0000 (14:45 +0200)
src/catalogue/templates/catalogue/book_detail.html
src/catalogue/views.py

index 7074a81..69f8186 100644 (file)
                       </button>
                     </div>
                   </div>
-                  {% if book.has_mp3_file %}
+                  {% if book.has_audio %}
                     <div class="c-media__popup" data-popup="audiobook">
                       <div class="c-media__popup__box">
                         <div class="c-media__popup__box__lead">
                               <a href="{% url 'download_zip_mp3' book.slug %}" class="l-button l-button--media l-button--media--full">.mp3</a>
                             </div>
                           </div>
-                          {% if book.has_ogg_file %}
-                            <div class="c-media__popup__box__item">
-                              <div>
-                                <h3>OggVorbis</h3>
-                                <p>{% trans "Otwarty format plików audio, oferujący wysokiej jakości nagranie." %}</p>
-                              </div>
-                              <div>
-                                <a href="{% url 'download_zip_ogg' book.slug %}" class="l-button l-button--media l-button--media--full">.ogg</a>
-                              </div>
+                          <div class="c-media__popup__box__item">
+                            <div>
+                              <h3>OggVorbis</h3>
+                              <p>{% trans "Otwarty format plików audio, oferujący wysokiej jakości nagranie." %}</p>
                             </div>
-                          {% endif %}
+                            <div>
+                              <a href="{% url 'download_zip_ogg' book.slug %}" class="l-button l-button--media l-button--media--full">.ogg</a>
+                            </div>
+                          </div>
                           {% if book.has_daisy_file %}
                             <div class="c-media__popup__box__item">
                               <div>
index 8bb86c2..8d32e64 100644 (file)
@@ -534,12 +534,19 @@ def stream_zip(request, media_format=None, slug=None):
 
     zs = ZipStream()
 
+    audiobook_list = list(iterate_audiobooks(book, ()))
+    
     licenses = set()
-    for i, (file_path, lic, names) in enumerate(iterate_audiobooks(book, ())):
+    for i, (file_path, lic, names) in enumerate(audiobook_list):
         index = i + 1
         part_name = '_'.join(names)
+        if part_name:
+            part_name = '_' + part_name
         ext = file_path.rsplit('.', 1)[-1]
-        zip_name = f'{book.slug}_{index:03d}_{part_name}'[:240] + '.' + ext
+        if len(audiobook_list) > 1:
+            zip_name = f'{book.slug}_{index:03d}{part_name}'[:240] + '.' + ext
+        else:
+            zip_name = book.slug[:240] + '.' + ext
         zs.add_path(file_path, zip_name)
 
         lic_name = constants.LICENSES.get(lic, {}).get('locative')