<big>BendyStraw</big>
<br /><br />

An app for managing <strong>NewPipe</strong> databases.
<br /><br />

<strong>BendyStraw</strong> imports <strong>NewPipeData-*.zip</strong> files and lets you:

<ul>
<li>Open multiple <strong>zip</strong>s at the same time, so you can combine data from several devices</li>
<li><strong>Delete</strong> <strong>Copy</strong> <strong>Move</strong> <strong>Rename</strong> your custom playlists</li>
<li><strong>Delete</strong> <strong>Copy</strong> <strong>Move</strong> streams from one playlist to another</li>
<li><strong>Delete</strong> <strong>Copy</strong> <strong>Move</strong> channel subscriptions between databases</li>
<li><strong>Delete</strong> <strong>Copy</strong> <strong>Move</strong> remote (bookmarked) playlists</li>
<li>Re-order playlists, sorting the streams by <strong>Title</strong>, <strong>Channel</strong> or <strong>Length</strong> (just tap the column headings in the tables)</li>
<li><strong>Shuffle</strong> or <strong>reverse</strong> playlists</li>
<li><strong>Create new playlists</strong></li>
<li><strong>Drag and drop tracks to re-order playlists</strong></li>
</ul>

<big>After editing simply export a new <strong>zip</strong> file, then import it back into <strong>NewPipe</strong>.</big>

<br /><br />
<br /><br />
<big>Import/export playlists:</big>
<br /><br />

<ul>
<li>Streams (audio/video) can be opened directly from
<strong>BendyStraw</strong>, as the URLs are clickable
  <ul>
  <li>If you set video links (in your Android settings) to open in <strong>NewPipe</strong> you can make a split-screen view and jump around your playlists</li>
  </ul>
 </li>
<li><strong>Export playlist as raw text</strong>, for example to be used with <a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></li>
<li><strong>Import playlists from JSON</strong> (the button to do this is hidden by default, go to the settings menu to show it)</li>
<li><strong>Open as a temporary YouTube playlist in your browser</strong>
  <ul>
  <li>Depending on your device settings YouTube might open in your browser or a web view or something else... to find out how to configure this do a web search for 'android set default apps'</li>
  </ul>
</li>
<li>Dark/light themes</li>
</ul>

<br /><br />
<br /><br />
<big>Search your watch history to build new playlists</big>
<br /><br />

<ul>
<li>Search through your watch history</li>
<li>Results are displayed in a special search playlist and can be copied into other playlists</li>
</ul>

<br /><br />
<br /><br />
<big>Note about Permissions On Android 13+</big>
<br /><br />

<strong>BendyStraw</strong> asks for the <em>manage external storage</em> permission, here's why:

<ul>
  <li>A typical use-case for this app is to open several <strong>zip</strong> files, concurrently, from multiple locations including <strong>Download</strong> directories (these files would be, for example, multiple <strong>NewPipe</strong> exports from multiple devices, which you want to combine).</li>
  <li>Each <strong>zip</strong> is extracted so that its contained <strong>newpipe.db</strong> SQLite database can be read/written while you are editing.</li>
  <li>After editing, the extracted files are written back to a new <strong>zip</strong>, and/or overwrite the original <strong>zip</strong>s.</li>
</ul>

<strong >I aim to minimise the permissions I request in everything I build</strong >. Android 13 introduced changes to make doing what I decribed above difficult. I explored alternative methods requiring fewer permissions and felt that it compromised the user experience for my (as the app's first user) typical usage, making it more complicated and annoying. I treat users as responsible human beings, so give you this info to allow you to make an informed choice. If you are not happy with this, you can:

<ul>
  <li>Choose not to grant the permission, and uninstall the app.</li>
  <li>Check the source code to see that I'm not doing anything nefarious, or ask somebody to check it for you (at time of writing, everything related to reading/writing files is in <strong>/lib/file_manager_widget.dart</strong>).</li>
  <li>Build the app yourself from the source using <strong>Flutter</strong>.</li>
</ul>
