A minimalist file manager for those who want to use Linux mobile devices.

Overview

Portfolio CI

A minimalist file manager for those who want to use Linux mobile devices.

Usage

Tap to activate and press to select, to browse, open, copy, move, delete, or edit your files.

Get it

Build it yourself

$ git clone https://github.com/tchx84/Portfolio.git
$ cd Portfolio
$ flatpak-builder --force-clean --repo=repo build dev.tchx84.Portfolio.json
$ flatpak build-bundle repo portfolio.flatpak dev.tchx84.Portfolio
$ flatpak install portfolio.flatpak

This app is powered by Builder and Glade.

Contribute

If you are interested in contributing to this project just send a pull request to this repo.

Disclaimer

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

Comments
  • External devices (MicroSD and drives) not shown without mouting the device first.

    External devices (MicroSD and drives) not shown without mouting the device first.

    When using the application using Arch Linux ARM (ALARM) on the PinePhone 3GB model I'm not seeing the card even if I have it formatted and it shows up in lsblk.

    opened by ahoneybun 21
  • properly handle already unlocked luks volumes

    properly handle already unlocked luks volumes

    Running portfolio on my device, there's an entry for the luks partition that has my rootfs. Tapping on it prompts me for the passphrase to unlock it... but it's already unlocked. Perhaps portfolio should hide an encrypted volume if it's already unlocked and mounted to / ?

    I'm not quite sure how it should be handled to be honest. This problem is mostly cosmetic, since I don't think I'd be able to actually unlock it through portfolio (since it's already unlocked, I think cryptsetup will complain), and it's unlikely that the 'eject' button would work too (I didn't try it... for obvious reasons... heh)

    opened by craftyguy 18
  • Fall back to gettext module on systems that don't use glibc

    Fall back to gettext module on systems that don't use glibc

    Python built without gettext support (from glibc) fail here, so this falls back to importing the gettext python implementation (https://github.com/hannosch/python-gettext), which might be available.

    opened by craftyguy 18
  • Librem 5 Gnome version support.

    Librem 5 Gnome version support.

    I have a Librem 5 evergreen, then i want to install Portfolio but librem 5 still has a old gnome version 3.30. I am looking how install Portfolio on gnome 3.30

    opened by carlosgonz0 12
  • Package for Debian

    Package for Debian

    Putting this issue here as this is a very good candidate for a Mobian file manager, and would be good as a .deb. I will try to figure out how to do packaging however I am very new to it, otherwise I'm sure others will see this issue and want to hop in

    opened by joshbowyer 11
  • Designer review

    Designer review

    Hey @bertob , I am sure you are busy but, if you happen to have the time to try this app I made for my phone, I would appreciate your feedback.

    TLDR; I didn't like the UX of existing file managers available for phones, so I started this a weekend project. Here's a very short summary of all it can do:

    opened by tchx84 9
  • devices: Ignore system devices

    devices: Ignore system devices

    See http://storaged.org/doc/udisks2-api/latest/gdbus-org.freedesktop.UDisks2.Block.html#gdbus-property-org-freedesktop-UDisks2-Block.HintSystem

    Closes #245

    opened by tchx84 7
  • crash on startup due to null reference

    crash on startup due to null reference

    Traceback (most recent call last):
      File "/usr/bin/dev.tchx84.Portfolio", line 40, in <module>
        from portfolio import main
      File "/usr/lib/python3.9/site-packages/portfolio/main.py", line 28, in <module>
        from .window import PortfolioWindow
      File "/usr/lib/python3.9/site-packages/portfolio/window.py", line 29, in <module>
        from .worker import PortfolioCutWorker
      File "/usr/lib/python3.9/site-packages/portfolio/worker.py", line 30, in <module>
        from .trash import default_trash
      File "/usr/lib/python3.9/site-packages/portfolio/trash.py", line 177, in <module>
        default_trash = PortfolioTrash()
      File "/usr/lib/python3.9/site-packages/portfolio/trash.py", line 41, in __init__
        self.setup()
      File "/usr/lib/python3.9/site-packages/portfolio/trash.py", line 53, in setup
        mounts = self.get_devices_trash() + [self.get_home_trash()]
      File "/usr/lib/python3.9/site-packages/portfolio/trash.py", line 91, in get_devices_trash
        path = os.path.join(mount_point, f".Trash-{os.getuid()}")
      File "/usr/lib/python3.9/posixpath.py", line 76, in join
        a = os.fspath(a)
    TypeError: expected str, bytes or os.PathLike object, not NoneType
    

    I humbly recommend using MyPy, because based on my experience with dynamically typed languages, there is no way that a human can remember to check for null every time. These trivial errors don't slip through into releases if you use a type checker.

    opened by raingloom 7
  • places: handle cases where XDG_ dirs couldn't be resolved

    places: handle cases where XDG_ dirs couldn't be resolved

    get_user_special_dirs can return None if the logical id could not be resolved, so this change handles this case by skipping over the call to _add_place.

    Without this check, the application will crash with a TypeError when it ultimately calls os.fspath(None).

    opened by craftyguy 7
  • 0.9.11 pre-release testing

    0.9.11 pre-release testing

    @henry-nicolas @craftyguy If is not much asking, do you mind running the latest Portfolio master on your systems? I have been testing only the Flatpak version on Fedora and Arch, but I am out of bandwidth for more than that.

    You can see what's new here which you can use to guide your tests a bit (so is not totally random).

    Thanks!

    opened by tchx84 5
  • Permission issue with the new trash folder feature

    Permission issue with the new trash folder feature

    Hi,

    First of all, thanks a lot for this wonderful app, fully mobile-compatible linux apps are hard to come by!

    With the latest Portfolio 0.9.11, it seems there is a permission issue with the new trash folder feature.

    When I run the app from the app drawer, it fails silently. When I run it from the terminal, the stacktrace is the following:

    Traceback (most recent call last):
      File "/usr/bin/dev.tchx84.Portfolio", line 40, in <module>
        from portfolio import main
      File "/usr/lib/python3.9/site-packages/portfolio/main.py", line 28, in <module>
        from .window import PortfolioWindow
      File "/usr/lib/python3.9/site-packages/portfolio/window.py", line 29, in <module>
        from .worker import PortfolioCutWorker
      File "/usr/lib/python3.9/site-packages/portfolio/worker.py", line 30, in <module>
        from .trash import default_trash
      File "/usr/lib/python3.9/site-packages/portfolio/trash.py", line 177, in <module>
        default_trash = PortfolioTrash()
      File "/usr/lib/python3.9/site-packages/portfolio/trash.py", line 41, in __init__
        self.setup()
      File "/usr/lib/python3.9/site-packages/portfolio/trash.py", line 55, in setup
        self._setup_trash_dir(trash_dir)
      File "/usr/lib/python3.9/site-packages/portfolio/trash.py", line 44, in _setup_trash_dir
        os.makedirs(os.path.join(trash_dir, "info"), exist_ok=True)
      File "/usr/lib/python3.9/os.py", line 215, in makedirs
        makedirs(head, exist_ok=exist_ok)
      File "/usr/lib/python3.9/os.py", line 225, in makedirs
        mkdir(name, mode)
    PermissionError: [Errno 13] Permission non accordée: '/.Trash-1000'
    

    Portfolio is trying to create a Trash folder in my root directory, hence the permission issue.

    The issue is resolved if I manually create the Trash folders in the root directory:

    sudo mkdir -p /.Trash-1000/files
    sudo mkdir -p /.Trash-1000/info
    

    It might come from my configuration, I'm using archlinux ARM with the phosh desktop environment and this storage configuration:

    # df -h
    Sys. de fichiers      Taille Utilisé Dispo Uti% Monté sur
    dev                     1,4G       0  1,4G   0% /dev
    run                     1,5G    1,6M  1,5G   1% /run
    /dev/mapper/cryptroot    29G    6,2G   21G  23% /
    tmpfs                   1,5G    568K  1,5G   1% /dev/shm
    tmpfs                   1,5G    8,0K  1,5G   1% /tmp
    /dev/mmcblk0p1          115G     85G   24G  79% /home/alarm/SD
    /dev/mmcblk2p1          243M    107M  137M  44% /boot
    tmpfs                   300M     72K  300M   1% /run/user/1000
    

    The workaround works for me but it's not really a good practice to have that kind of folder in the root directory, that's why I'm still reporting it.

    opened by dbeley 4
  • window: follow GNOME dark style preference changes

    window: follow GNOME dark style preference changes

    Use libhandy's StyleManager to follow the dark mode variant used by libadwaita and GTK4 apps through gsettings org.gnome.desktop.interface.color-scheme key. This allows the app to change its style based on a standard and documented property that can be changed through, e.g: GNOME Settings toggle in Appearance panel. Current behavior is to follow the gtk-application-prefer-dark-theme key in ~/.config/gtk-3.0/settings.ini file, which is deprecated and as far as I am aware, undocumented.

    Related https://gitlab.gnome.org/GNOME/Initiatives/-/issues/32

    opened by pabloyoyoista 1
  • Make improvements to file property content and view

    Make improvements to file property content and view

    Portfolio: 0.9.14, L5 Mobile, 720x1440, phosh 0.17.0-1pureos1.

    The following changes to file/folder settings view would make that screen more useful to the user.

    1. add file or folder permissions, these arent shown,
    2. wrap, expand, or allow panning or scrolling for the location string so these long paths can be shown (or maybe default wrap with 2lines in portrait view).
    3. allow copy by long pressing on location string, or popup a copy menue clicking on it

    Screenshot from 2022-04-16 07-55-37

    opened by CaptainMorgan12 0
  • Consider a Grid View (with file previews)

    Consider a Grid View (with file previews)

    I really like the file browser, but as I've been using it, I keep thinking it'd be nice to switch to a grid view. It feels like it would be an intuitive option for a mobile interface since the touch targets would be larger. Also, if file previews were added for common file formats (jpeg, png, pdf, etc.), it would go a long ways towards being able to browse files effectively without needing to know the name of the file you're opening.

    opened by Lacplesis 0
  • Add

    Add "open with" option for selected file(s)

    Currently there seems to be no way to open a file via Portfolio with a non-default application. Could a button/capability for this be added to the selected-file context-specific actions?

    Using Portfolio 0.9.12 non-Flatpak on a PinePhone.

    opened by smithfred 0
  • Icons

    Icons

    I've been playing around with the icons a bit and I think it is a bit better to use non-sysmbolic icons and use the theme ones. In my opinion it looks nicer and is easier on the eyes.

    help wanted Design 
    opened by junocomp 7
Owner
Martin Abente Lahaye
Martin Abente Lahaye
Bot simply search for the files from provided channel according to given query and gives link to those files as buttons!

Auto Filter Bot ㅤㅤㅤㅤㅤㅤㅤ ㅤㅤㅤㅤㅤㅤㅤ You can call this as an Auto Filter Bot if you like :D Bot simply search for the files from provided channel according

TroJanzHEX 89 Nov 23, 2022
twtxt is a decentralised, minimalist microblogging service for hackers.

twtxt twtxt is a decentralised, minimalist microblogging service for hackers. So you want to get some thoughts out on the internet in a convenient and

buckket 1.8k Jan 9, 2023
ESOLinuxAddonManager - Very simple addon manager for Elder Scrolls Online running on Linux.

ESOLinuxAddonManager Very simple addon manager for Elder Scrolls Online running on Linux. Well, more a downloader for now. Currently it's quite ugly b

Akseli 25 Aug 28, 2022
Automation for grabbing keys from a Linux host. Useful during red team exercises to quickly help assess what access to a Linux host can lead to.

keygrabber Automation for grabbing keys from a Linux host. This can be helpful during red team exercises when you gain access to a Linux host and want

Cedric Owens 14 Sep 27, 2022
Morpy Bot Linux - Morpy Bot Linux With Python

Morpy_Bot_Linux Guide to using the robot : ?? Lsmod => to identify admins and st

null 2 Jan 20, 2022
Want to get your driver's license? Can't get a appointment because of COVID? Well I got a solution for you.

NJDMV-appoitment-alert Want to get your driver's license? Can't get a appointment because of COVID? Well I got a solution for you. We'll get you one i

Harris Spahic 3 Feb 4, 2022
Want to play What Would Rather on your Server? Invite the bot now!😏

What is this Bot? ?? What You Would Rather? is a Guessing game where you guess one thing. Long Description short Take this example: You typed r!rather

丂ㄚ么乙ツ 2 Nov 17, 2021
An Amazon Price Tracker app helps you to buy which product you want within sale price by sending an E-Mail.

Amazon Price Tracker An Amazon Price Tracker app helps you to buy which product you want within sale price by sending an E-Mail. Installing Download t

Aytaç Kaşoğlu 2 Feb 10, 2022
Algofi Python SDK is useful for developers who want to programatically interact with the Algofi lending protocol

algofi-py-sdk Algofi Python SDK Documentation https://algofi-py-sdk.readthedocs.

Algofi 41 Dec 15, 2022
Send SMS text messages via email with as many accounts as you want :)

SMS-Spammer Send SMS text messages via email with as many accounts as you want :) Example Set Up Guide! To start log into the gmail account you would

Riceblades11 10 Oct 25, 2022
This Server Cloner can clone the server you want with all the perms of roles in every particular channel.

Server-Cloner-with-perms ?? This Server Cloner can clone the server you want with all the perms of roles in every particular channel. Features Clone C

Gripz 0 Feb 17, 2022
A Discord bot for viewing any currency you want comfortably.

Dost Dost is a Discord bot for viewing currencies. Getting Started These instructions will get you a copy of the project up and running on your local

Baran Gökalp 2 Jan 18, 2022
Tracker to check the covid shot slot availability in India and send mobile alerts via Twilio Messaging Service.

Cowin-Slot-Tracker Tracker to check the covid vaccine slot availability in India and send mobile notifications through Twilio Messaging Service. Requi

invalid username 27 Nov 12, 2022
Python package for agilex robotics mobile base platform

This is Python API for Agilex Robotics Mobile base This is a python API for Can communication with Agilex Robotics Mobile base and controlling it. Sup

null 7 Sep 6, 2022
Faster Twitch Alerts is a highly customizable, lightning-fast alternative to Twitch's slow mobile notification system

Faster Twitch Alerts What is "Faster Twitch Alerts"? Faster Twitch Alerts is a highly customizable, lightning-fast alternative to Twitch's slow mobile

null 6 Dec 22, 2022
Parse discord tokens from any file, even if there is other shit in the file with them.

Discord-Token-Parser Parse discord tokens from any file, even if there is other shit in the file with them. Any. File. I glued together all html from

null 4 May 7, 2022
This bot is created by AJTimePyro and It accepts direct downloading url & then return file as telegram file.

URL Uploader Bot This is the source code of URL Uploader Bot. And the developer of this bot is AJTimePyro, His Telegram Channel & Group. You can use t

Abhijeet 23 Nov 13, 2022