{ "info": { "author": "Felix C. Stegerman", "author_email": "flx@obfusk.net", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Multimedia :: Video", "Topic :: Utilities" ], "description": "::\n\n File : README.md\n Maintainer : Felix C. Stegerman \n Date : 2018-09-16\n\n Copyright : Copyright (C) 2018 Felix C. Stegerman\n Version : v0.4.2\n License : GPLv3+\n\n`PyPI Version `__ `Build\nStatus `__\n`GPLv3+ `__\n\nDescription\n-----------\n\nm - minimalistic media manager\n\nm keeps track of which files you\u2019ve played (or are still playing) and\nthus allows you to easily continue playing the next file (using vlc or\nmpv).\n\n- Supports importing existing playing/watched data from Kodi.\n- Stores its data in JSON files (one per directory) in ``~/.obfusk-m``;\n you can put this directory in git if you want a changelog :)\n\nNB: extracting the timestamp from the vlc config and mpv output is a\nlittle hacky :(\n\nNB: m uses ``$PWD`` to make sure it sees the current path the same as\nthe shell it is run from (i.e.\u00a0it does not resolve the path by following\nsymlinks, allowing the link targets to be relocated); unfortunately,\nthis means that it *does not* see two directories as identical if they\nare accessed using different paths, even if the resolved path is the\nsame. So you may want to avoid using different paths to the same\ndirectory (and ``--dir``).\n\nExamples\n--------\n\n.. code:: bash\n\n $ cd /some/media/dir\n $ m ls # list files ([*] = skip, [x] = done, [>] = playing, [ ] = new)\n [x] Something - 01.mkv\n [x] Something - 02.mkv\n [x] Something - 03.mkv\n [x] Something - 04.mkv\n [x] Something - 05.mkv\n [x] Something - 06.mkv\n [>] Something - 07.mkv 0:04:04\n [ ] Something - 08.mkv\n [ ] Something - 09.mkv\n $ m next # plays current/next episode (i.e. #7) w/ vlc\n\n.. code:: bash\n\n $ m ld # list dirs (shows #playing, #new for indexed subdirectories)\n ( 2!) Dir A\n ( ) Dir B\n (1> 0!) Dir C\n ( 0!) Dir D\n\nCommands include: ``list``/``ls``, ``list-dirs``/``ld``,\n``list-all``/``la``, ``next``, ``play FILE``, ``mark FILE``,\n``unmark FILE``, ``skip FILE``, ``index``, ``playing``, ``watched``,\n``skipped``, ``todo``.\n\nSee also the tests in the source code (also available as ``m examples``)\nfor more examples.\n\nCommand-line\n~~~~~~~~~~~~\n\nm is designed to work well with other command-line tools:\n\n.. code:: bash\n\n $ m --colour ld | column\n $ m --colour ls | tail\n $ cat \"$( m db-file )\" | jq .dir\n\nGUI\n---\n\nIn situations where you prefer simple keybindings to typing on the\ncommand-line, you can use the\n`m-gui `__ wrapper.\n\nHelp\n----\n\n.. code:: bash\n\n $ m --help # global options & subcommands\n $ m ls --help # subcommand (ls in this case) options & argument(s)\n $ m examples # show some examples (from the tests)\n\nRequirements\n------------\n\nPython >= 3.5.\n\nInstalling\n----------\n\nYou can just put ``m.py`` somewhere on your ``$PATH`` (in e.g.\n``~/bin``; I suggest calling it ``m``, but you\u2019re free to choose another\nname).\n\nYou may want to clone the repository instead of just downloading\n``m.py`` to be able to get new versions easily.\n\nAlternatively, you can install m using pip (the Python package manager)\nor build and install a Debian package.\n\nNB: the pip and Debian packages are called ``mmm`` instead of ``m``.\n\nUsing git\n~~~~~~~~~\n\n.. code:: bash\n\n $ cd /some/convenient/dir\n $ git clone https://github.com/obfusk/m.git obfusk-m\n $ cd ~/bin # or some other dir on your $PATH\n $ ln -s /some/convenient/dir/obfusk-m/m.py m\n\nUpdating:\n\n.. code:: bash\n\n $ cd /some/convenient/dir/obfusk-m\n $ git pull\n\nUsing pip\n~~~~~~~~~\n\n.. code:: bash\n\n $ pip3 install --user mmm # for Debian; on other OS's you may need\n # pip instead of pip3 and/or no --user\n\nBuilding a Debian package\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code:: bash\n\n $ sudo apt install debhelper dh-python pandoc # install build dependencies\n $ cd /some/convenient/dir\n $ git clone https://github.com/obfusk/m.git obfusk-m\n $ cd obfusk-m\n $ dpkg-buildpackage\n $ sudo dpkg -i ../mmm_*_all.deb\n\nConfiguration File\n------------------\n\nYou can set/override some defaults in ``~/.obfusk-m/config.json``; for\nexample:\n\n.. code:: json\n\n {\n \"add_exts\": [\".mp3\", \".ogg\"],\n \"colour\": true,\n \"exts\": [\".avi\", \".m4v\", \".mkv\", \".mp4\", \".ogv\", \".webm\"],\n \"ignorecase\": true,\n \"numbers\": true,\n \"numeric_sort\": true,\n \"only_indexed\": true,\n \"player\": \"mpv\",\n \"show_hidden\": true\n }\n\nTODO\n----\n\n- update README + version (4x + dch) + package (deb + pip)!\n- ``ack TODO``\n- debian Tag:?\n\n- use markdown for README now that pypi supports it\n\n - as soon as I have wheel >= 0.31.0 in Debian\n - no need to build ``README.rst``\n - ``setup.py``: ``with_name(\"README.md\")``,\n ``long_description_content_type = \"text/markdown\"``\n\n- more file extensions!\n- document ``safe()`` vs ``--zero``\n- ``_pty_run``: also minimize output if not a tty?\n- fix ``m _test`` when run via wrapper (``m.MError`` vs ``MError``)?\n\nMaybe\n~~~~~\n\n- ``m --virtual foo/bar {ls,...}`` +\n ``m virt [--update] [--title]* [--url]* [--url-template] [--episodes] [--browser]``\n + ``VIRTUAL:/foo/bar`` + ``virt__*.json`` +\n ``m {watching,...} --include-virtual``?\n\n- test edge cases/failures?\n- ``--config-dir``?\n- test ``END_SECS``?\n- note usage of dyn vars?\n\n- bash completion?\n- ``m mv``?\n- ``--tree`` for ``playing`` etc.?\n- ``--json``?\n- kodi db export/sync?\n- sign pypi package?\n- fix ``.exist()`` race conditions?\n- use ``locale.strcoll`` vs ``--ignorecase``?\n\nCAVEATS\n-------\n\nBecause the ``alias`` command uses symlinks internally, you should\nprobably not create symlinks named ``dir__*.json`` in ``~/.obfusk-m``\nunless you know what you are doing.\n\nLicense\n-------\n\n`GPLv3+ `__\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/obfusk/m", "keywords": "media video vlc mpv", "license": "GPLv3+", "maintainer": "", "maintainer_email": "", "name": "mmm", "package_url": "https://pypi.org/project/mmm/", "platform": "", "project_url": "https://pypi.org/project/mmm/", "project_urls": { "Homepage": "https://github.com/obfusk/m" }, "release_url": "https://pypi.org/project/mmm/0.4.2/", "requires_dist": [ "coverage; extra == 'test'" ], "requires_python": ">=3.5", "summary": "minimalistic media manager", "version": "0.4.2" }, "last_serial": 4276902, "releases": { "0.0.2": [ { "comment_text": "", "digests": { "md5": "630ef317615d448ee33b8a59eb44a375", "sha256": "687615354359ace0bc94673ba3de66633fa52be8625a2d2a27c614ae2aa5e6cd" }, "downloads": -1, "filename": "mmm-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "630ef317615d448ee33b8a59eb44a375", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 6667, "upload_time": "2017-12-08T19:09:41", "url": "https://files.pythonhosted.org/packages/50/56/715a9be0a17e1c72582e942010fd3b3bf73b4b0a43d80f49c9ea380edcf7/mmm-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "028a3322a975bd7525199b395e4f687d", "sha256": "e553a0f9894168a0490b17a604faa5c3c412d26dc384d1daf60df8eb0cc97060" }, "downloads": -1, "filename": "mmm-0.0.2.tar.gz", "has_sig": false, "md5_digest": "028a3322a975bd7525199b395e4f687d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 18222, "upload_time": "2017-12-08T19:09:43", "url": "https://files.pythonhosted.org/packages/bf/cc/a49bb01a3a91d9daf5318ddb7b2f230810902f7657624ff30926029a677a/mmm-0.0.2.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "0971fe57652cd14a7415f561a7f9e40a", "sha256": "d140e12069b5fd48d069211be97828904b16e28683ee0e77644d6aa6e6cdeeee" }, "downloads": -1, "filename": "mmm-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "0971fe57652cd14a7415f561a7f9e40a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 6686, "upload_time": "2017-12-08T19:36:46", "url": "https://files.pythonhosted.org/packages/be/bc/1d3c39605028411059a1a6b5e1bb27f1f88d02b0a9688dcc850fb0423024/mmm-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0eb4eca5c3cefbcaa616e69d552df5e4", "sha256": "eab2c1d2284e3704b279baf3c98ddeb57e3800d382906c96c39d92eccd3d1529" }, "downloads": -1, "filename": "mmm-0.1.0.tar.gz", "has_sig": false, "md5_digest": "0eb4eca5c3cefbcaa616e69d552df5e4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 18253, "upload_time": "2017-12-08T19:36:48", "url": "https://files.pythonhosted.org/packages/fe/21/2f7902af945e53f89ed38ddeb0a63c3b47c90b350078d927e92f8b778169/mmm-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "9cc64d48f568f582815006c4d76267ed", "sha256": "706aa92599e850ef93f4170daaaa250ea5bd2f323388f07404ebcf853a69cc56" }, "downloads": -1, "filename": "mmm-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "9cc64d48f568f582815006c4d76267ed", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 7062, "upload_time": "2017-12-09T00:47:44", "url": "https://files.pythonhosted.org/packages/2c/03/a08a2db6f08ed9bfd2208ac4cc5bf7362a8b3b55a59ece6e277dee1a63c4/mmm-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6d282b0d42aa37dd2d47cef0e964e22d", "sha256": "33e9d5eb90713bf5da8f9001d78d7798c27922e2a1db332c9c649e8105c2702d" }, "downloads": -1, "filename": "mmm-0.1.1.tar.gz", "has_sig": false, "md5_digest": "6d282b0d42aa37dd2d47cef0e964e22d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 18753, "upload_time": "2017-12-09T00:47:47", "url": "https://files.pythonhosted.org/packages/b2/62/4dd94cfa1cf0f149b01d580dbe963f3ebebe220946a9b2bf73ce37b1831e/mmm-0.1.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "9932e5ec57361920f0af96ccb1b67951", "sha256": "0d58c21007ed6161bab3850b1b8347cc44b9841c1fc323f1c3abcebda3f24f0f" }, "downloads": -1, "filename": "mmm-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "9932e5ec57361920f0af96ccb1b67951", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 11960, "upload_time": "2017-12-10T08:25:10", "url": "https://files.pythonhosted.org/packages/29/f2/f4e34347b483c09df51da5967762ef2db281e9909ff2dca674c8d14d3529/mmm-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "832af631e5a5474045aef9e69aa2a8ad", "sha256": "4fc1d984d2dfdcfa44d53a7fc7136ddd47a65941f66faa794d25b5a7b65b03da" }, "downloads": -1, "filename": "mmm-0.2.0.tar.gz", "has_sig": false, "md5_digest": "832af631e5a5474045aef9e69aa2a8ad", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 22408, "upload_time": "2017-12-10T08:25:12", "url": "https://files.pythonhosted.org/packages/19/e9/889a485f09e58f6c738d3b03ff7b60cf3a76b4fcd044570f7e27854568a9/mmm-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "352208d426ef81172b373ece4a0217a0", "sha256": "ab68549bf42402c7b6b16f76edf2f4a980ef2d77e8bad894c017dcae288705bc" }, "downloads": -1, "filename": "mmm-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "352208d426ef81172b373ece4a0217a0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 11830, "upload_time": "2017-12-10T10:01:11", "url": "https://files.pythonhosted.org/packages/7d/d3/aea69ffa4b03966dc6d5d64e5acc1dd424e65e1cc93c55800ecdbbb36787/mmm-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "832062dee94e7dfa77214030a7b7d8eb", "sha256": "71c7e97fa490744fb9c7d8be4ed7ce4a3a71cbc1135ff6b269ecc840cd02ca8a" }, "downloads": -1, "filename": "mmm-0.2.1.tar.gz", "has_sig": false, "md5_digest": "832062dee94e7dfa77214030a7b7d8eb", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 22401, "upload_time": "2017-12-10T10:01:14", "url": "https://files.pythonhosted.org/packages/8e/83/58572f227d0968bffe3ce2b8e0ec52fd7b60e0d40afe7908434519fcf2cd/mmm-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "459e9014ab1227b2672b1d6c755222a0", "sha256": "ffd75ed3c7083fb81af99d3bc1360337b9325b83655041f279b2d38a94b6ed28" }, "downloads": -1, "filename": "mmm-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "459e9014ab1227b2672b1d6c755222a0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 21000, "upload_time": "2017-12-26T11:44:59", "url": "https://files.pythonhosted.org/packages/0d/69/c663f2f78f1eec2f8f263365fda4e8b2b4767fe16019c4a0d3b2c6324d79/mmm-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "38fde531b0721125346d12732e130942", "sha256": "06500c213ee67badc240e4f1892ec4fbd39011ac4fa3239c93ef2d38bee47313" }, "downloads": -1, "filename": "mmm-0.3.0.tar.gz", "has_sig": false, "md5_digest": "38fde531b0721125346d12732e130942", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 31426, "upload_time": "2017-12-26T11:45:01", "url": "https://files.pythonhosted.org/packages/42/47/0e6253a136dfb252be3d7d850a43993a5c57ea7ddf713c2578628464a924/mmm-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "751f7d7d3346d4b51584274ca849299d", "sha256": "27b5ebb50ab3112e29bce1cfc65752eddbf0a6c84e0ba97906309fd0307606a7" }, "downloads": -1, "filename": "mmm-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "751f7d7d3346d4b51584274ca849299d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 22688, "upload_time": "2018-08-30T21:54:08", "url": "https://files.pythonhosted.org/packages/17/23/bb37e7d24b20dd0d904cce536715e7e8fb5d636c475543b93a9846c9ee99/mmm-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "40963f37e31a6eeb9e8b745de8f28ed4", "sha256": "203a3762df45f0097bcfbcdf510aea4eb06ee1c208c770f95540bc0a6f8434a0" }, "downloads": -1, "filename": "mmm-0.4.0.tar.gz", "has_sig": false, "md5_digest": "40963f37e31a6eeb9e8b745de8f28ed4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 33353, "upload_time": "2018-08-30T21:54:09", "url": "https://files.pythonhosted.org/packages/c8/33/112813123a7fcad78f1f315b4dac75e768f1571da8bcdc6c4f146a26acfa/mmm-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "5cb7b089d7ca3a47d43fc05af764af6d", "sha256": "4e7e434d1b246e6f56aa255440f1869e9cc1062c3be5bdbc4de3d86a4bacd5f7" }, "downloads": -1, "filename": "mmm-0.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "5cb7b089d7ca3a47d43fc05af764af6d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 22781, "upload_time": "2018-08-31T16:53:56", "url": "https://files.pythonhosted.org/packages/fc/b1/2642aeb852599f35e35c744c070df32b08f80d6e1be80e0da2c4cacbb82a/mmm-0.4.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "37b2e5bb27f42ca19d7bbc6d94dbfe22", "sha256": "23b9f1fedcd277bd5ca6e692691f9a7f6c8e456ef768359552ebe24772478c0f" }, "downloads": -1, "filename": "mmm-0.4.1.tar.gz", "has_sig": false, "md5_digest": "37b2e5bb27f42ca19d7bbc6d94dbfe22", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 33447, "upload_time": "2018-08-31T16:53:57", "url": "https://files.pythonhosted.org/packages/0b/9b/fc661862a364279e93748649c8d477d839999a1dc8ff62a6cbd1ac82aaff/mmm-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "ec82ea46ae252c9b621f46e049c80a40", "sha256": "670fb7f33356a0f9651b22a4c46e6e69b584c85da731069228fbc19317d5d815" }, "downloads": -1, "filename": "mmm-0.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "ec82ea46ae252c9b621f46e049c80a40", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 24147, "upload_time": "2018-09-16T15:57:01", "url": "https://files.pythonhosted.org/packages/ef/2c/dd0cedc470aaa685c5b3173dbf34282b30ae9c9341cb7038750fb7425963/mmm-0.4.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a481f0c90c707e1e11eca4f74175f662", "sha256": "c65ede6e78c8aa056c24ff01009c6ff7e984481c5dfcc9e87f28c06fbf448499" }, "downloads": -1, "filename": "mmm-0.4.2.tar.gz", "has_sig": false, "md5_digest": "a481f0c90c707e1e11eca4f74175f662", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 34863, "upload_time": "2018-09-16T15:57:03", "url": "https://files.pythonhosted.org/packages/8c/67/c2052d4c6d4923acc6cd4949597913b955fd4a262683e5508fa09e66d53a/mmm-0.4.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ec82ea46ae252c9b621f46e049c80a40", "sha256": "670fb7f33356a0f9651b22a4c46e6e69b584c85da731069228fbc19317d5d815" }, "downloads": -1, "filename": "mmm-0.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "ec82ea46ae252c9b621f46e049c80a40", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 24147, "upload_time": "2018-09-16T15:57:01", "url": "https://files.pythonhosted.org/packages/ef/2c/dd0cedc470aaa685c5b3173dbf34282b30ae9c9341cb7038750fb7425963/mmm-0.4.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a481f0c90c707e1e11eca4f74175f662", "sha256": "c65ede6e78c8aa056c24ff01009c6ff7e984481c5dfcc9e87f28c06fbf448499" }, "downloads": -1, "filename": "mmm-0.4.2.tar.gz", "has_sig": false, "md5_digest": "a481f0c90c707e1e11eca4f74175f662", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 34863, "upload_time": "2018-09-16T15:57:03", "url": "https://files.pythonhosted.org/packages/8c/67/c2052d4c6d4923acc6cd4949597913b955fd4a262683e5508fa09e66d53a/mmm-0.4.2.tar.gz" } ] }