Download all Moodle files with one click. This is a Chrome extension built to save time and effort from downloading files manually one by one!

Overview

Moodle Downloader Extension

build

Moodle downloader extension for Chrome. The extension is tested with both the TUM moodle and the official moodle demo.

Notice: This repository is under active development. Please submit an issue if you found any bugs or have feature requests.

If you like the tool, please star this repository and share it with your friends. :)

Installation

Install from the Chrome Extension Store

Visit the Moodle Downloader Extension in the Chrome Extension Store.

Install from the zip file

  1. Download the extension on the latest release page.
  2. Unzip the zip file to a folder.
  3. Open Chrome and go to chrome://extensions/.
  4. Click on Load unpacked and select the folder from step 2.
  5. Done. You can now find the extension in the list.

Usage

  1. Navigate to one of the following pages:
    1. Course view: https://.../course/view.php?id=...
      • Download all the resources of a course.
    2. Resource view: https://.../course/resources.php?id=...
      • Download all the resources of a course.
    3. Folder view: https://.../mod/folder/view.php?id=...
      • Download all the resources in a folder.
    4. Pluginfile: https://.../pluginfile.php/.../mod_resource/content/.../...
      • Download the opened file.
  2. Click on the extension.
  3. Click on Download button and wait for the download to complete. It may take a while depending on the network condition. You can close the extension or view other tabs. The file will be saved once the download has been completed.

Development

This monorepo is managed using turborepo. It contains two packages @moodle-dl-ext/popup and @moodle-dl-ext/content-script.

@moodle-dl-ext/popup

This package is built for the popup page using React and typescript. The manifest.json and other static resources can be found in packages/popup/public.

@moodle-dl-ext/content-script

This package is built for the content script and packaged using Webpack and typescript.

How to build

  1. Clone or download the repository.
  2. Install yarn.
    1. Run npm install -g yarn to install yarn.
    2. Run yarn set version berry to enable the modern yarn.
  3. Run yarn install to install dependencies.
  4. Generate the extension using yarn package.
  5. Import the extension using the generated folder output.

License

GPL-3.0

Comments
  • All course folders are nested. File structure is different

    All course folders are nested. File structure is different

    First of all thanks for the extension. It can take all the files from a certain course and that's awesome. The problem here is that the folders at the course root end up to be nested to each other instead of being in the same directory. And also, some files of respective folders are placed inside wrong folder.

    Here a screenshot: image

    bug 
    opened by JohnnyLAmpAz 12
  • Skip next and previous links in folder view

    Skip next and previous links in folder view

    To prevent unwanted crawling from folder view, which I discussed in #17 , I came up with this simple fix that works in my situation. That is to just skip those URLs if the id matches prev-activity-link or next-activity-link.

    I don't think that this may cause problems with other institutions' Moodle layout, because if there is no link identified as such nothing changes. Furthermore I think this might be found in some older versions of Moodle, because if it was something custom made from my university I would expect to find some id values in Italian language :laughing: .

    Here my situation:

    screen2

    opened by JohnnyLAmpAz 8
  • Let the user choose to download folders as zip

    Let the user choose to download folders as zip

    The idea is to place a checkbox in the UI to let the user choose whether to download the folders as zip file or not.

    Like this:

    β–‘ Download folders as zip file

    In this way, when chosen to do so, downloading zip file from https://<your_moodle>/mod/folder/download_folder.php?id=<folder_id> would preserve the folder's file structure.

    enhancement wontfix 
    opened by JohnnyLAmpAz 1
  • Rewrite get moodle files using bfs

    Rewrite get moodle files using bfs

    Close #17 .

    Previously, the crawling function getMoodleFiles is written using DFS. It could lead to a wrong nested folder structure if there is a previously not yet processed folder URL on the current page.

    Example:

                folder a
                /            \
         folder b     folder c
         /           \
    folder c    file x
    

    In this case, folder c will be considered a child of folder b instead of being skipped. Due to the nature of DFS, it is hard to know that folder c should actually be on the same level as folder b.

    Therefore, this PR replaces the DFS implementation with BFS.

    opened by rssws 1
  • Update dependency @types/chrome to ^0.0.206

    Update dependency @types/chrome to ^0.0.206

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | @types/chrome (source) | ^0.0.204 -> ^0.0.206 | age | adoption | passing | confidence |


    Configuration

    πŸ“… Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    β™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    πŸ”• Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update Yarn to v3.3.1

    Update Yarn to v3.3.1

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | yarn | 3.3.0 -> 3.3.1 | age | adoption | passing | confidence |


    Release Notes

    yarnpkg/berry

    v3.3.1

    Compare Source


    Configuration

    πŸ“… Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    β™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    πŸ”• Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Lock file maintenance

    Lock file maintenance

    Mend Renovate

    This PR contains the following updates:

    | Update | Change | |---|---| | lockFileMaintenance | All locks refreshed |

    πŸ”§ This Pull Request updates lock files to use the latest dependency versions.


    Configuration

    πŸ“… Schedule: Branch creation - "before 3am on Monday" (UTC), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    β™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    πŸ‘» Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Lock file maintenance

    Lock file maintenance

    Mend Renovate

    This PR contains the following updates:

    | Update | Change | |---|---| | lockFileMaintenance | All locks refreshed |

    πŸ”§ This Pull Request updates lock files to use the latest dependency versions.


    Configuration

    πŸ“… Schedule: Branch creation - "before 3am on Monday" (UTC), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    β™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    πŸ‘» Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update dependency @types/chrome to ^0.0.204

    Update dependency @types/chrome to ^0.0.204

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | @types/chrome (source) | ^0.0.203 -> ^0.0.204 | age | adoption | passing | confidence |


    Configuration

    πŸ“… Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    β™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    πŸ”• Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Lock file maintenance

    Lock file maintenance

    Mend Renovate

    This PR contains the following updates:

    | Update | Change | |---|---| | lockFileMaintenance | All locks refreshed |

    πŸ”§ This Pull Request updates lock files to use the latest dependency versions.


    Configuration

    πŸ“… Schedule: Branch creation - "before 3am on Monday" (UTC), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    β™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    πŸ‘» Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Lock file maintenance

    Lock file maintenance

    Mend Renovate

    This PR contains the following updates:

    | Update | Change | |---|---| | lockFileMaintenance | All locks refreshed |

    πŸ”§ This Pull Request updates lock files to use the latest dependency versions.


    Configuration

    πŸ“… Schedule: Branch creation - "before 3am on Monday" (UTC), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    β™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    πŸ‘» Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Lock file maintenance

    Lock file maintenance

    Mend Renovate

    This PR contains the following updates:

    | Update | Change | |---|---| | lockFileMaintenance | All locks refreshed |

    πŸ”§ This Pull Request updates lock files to use the latest dependency versions.


    Configuration

    πŸ“… Schedule: Branch creation - "before 3am on Monday" (UTC), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    β™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    πŸ‘» Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Dependency Dashboard

    Dependency Dashboard

    This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

    Open

    These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

    Detected dependencies

    github-actions
    .github/workflows/build.yml
    • actions/checkout v3
    • actions/setup-node v3
    • actions/cache v3
    • actions/checkout v3
    • actions/setup-node v3
    • actions/cache v3
    .github/workflows/codeql-analysis.yml
    • actions/checkout v3
    • github/codeql-action v2
    • github/codeql-action v2
    • github/codeql-action v2
    npm
    package.json
    • eslint ^8.22.0
    • eslint-plugin-jsdoc ^39.3.6
    • eslint-plugin-no-null ^1.0.2
    • prettier ^2.7.1
    • turbo ^1.4.3
    • yarn 3.3.1
    packages/content-script/package.json
    • jszip ^3.10.1
    • @types/chrome ^0.0.206
    • @types/webpack ^5.28.0
    • @webpack-cli/generators ^3.0.0
    • ts-loader ^9.3.1
    • typescript ^4.7.4
    • webpack ^5.74.0
    • webpack-cli ^5.0.0
    packages/popup/package.json
    • @emotion/react ^11.10.0
    • @emotion/styled ^11.10.0
    • @mui/icons-material ^5.8.4
    • @mui/material ^5.10.1
    • @testing-library/jest-dom ^5.16.5
    • @testing-library/react ^13.3.0
    • @testing-library/user-event ^14.0.0
    • @types/jest ^29.0.0
    • @types/node ^18.0.0
    • @types/react ^18.0.17
    • @types/react-dom ^18.0.6
    • react ^18.2.0
    • react-dom ^18.2.0
    • react-scripts 5.0.1
    • typescript ^4.7.4
    • web-vitals ^3.0.0
    • @types/chrome ^0.0.206

    • [ ] Check this box to trigger a request for Renovate to run again on this repository
    opened by renovate[bot] 0
Releases(v0.2.2)
Owner
Zhongpin Wang
Computer Science @ TUM || Working Student @ SAP || Work GH: @ZhongpinWang
Zhongpin Wang
Makes downloading Scratch projects easy. Simply enter two project IDs and click start.

Makes downloading Scratch projects easy. Simply enter two project IDs and click start. No need to pick the right format or include the assets, all of this is done automatically and in the browser.

null 6 May 27, 2022
On this page, you can save and load all the awesome books you have and save the name and the author into the local storage. this project uses Javascript to interact with the pages

Awesome Books: refactor to use JavaScript classes In this project, We add the links to the applications into the final project Getting Started if you

Cesar Valencia 8 Nov 29, 2022
⚑Chrome extension allows you to create lists of Google and Github dork to open multiple tabs with one click, import "scope/out of scope" from #HackerOne #Bugcrowd #Intigriti ...

FastDork v0.1 This chrome extension allows you to create lists of Google and Github dork to open multiple tabs with one click, import "scope/out of sc

skvndr 74 Dec 31, 2022
Save time by managing bills & expenses, invoicing & easy reconciliation all in one app. Generate clear dynamic statements and get your reports, the way you like them

expense-manager-app (Opensource Expense Tracking App built with React) ?? Save time by managing bills & expenses, invoicing & easy reconciliation all

Muhammad Awais 3 Oct 12, 2022
Source of the (Un)official Moodle Developer Resources

Moodle Developer Resources Introduction This repository includes the source for the Moodle Developer Resources - a collection of resources aimed at ma

Moodle Development 19 Dec 16, 2022
View maps, graphs, and tables of your save and compete in a casual, evergreen leaderboard of EU4 achievement speed runs. Upload and share your save with the world.

PDX Tools PDX Tools is a modern EU4 save file analyzer that allow users to view maps, graphs, and data tables of their save all within the browser. If

PDX Tools 24 Dec 27, 2022
A simple To Do List application that allows users to save, edit, mark completed, and delete their to-dos, and save their list when application is closed. Build with JavaScript.

To Do List A simple To Do List online application that allows users to save, and manipulate their to-dos, and save their list when application is clos

Mahmoud Rizk 10 Dec 20, 2022
Chrome extension to save and keep track of problems from different platforms(codeforces, codechef, atcoder, leetcode etc.)

Keep Problems A Browser extension which helps to save and keep track of problems from different platforms(codeforces, codechef, atcoder, leetcode etc.

Nirav Jain 4 Aug 13, 2022
generate pages from markdown files with dynamic routes, 0 effort, 0 boilerplate.

next-markdown Markdown Pages for Next.js Dynamic Routes. Blog Aware. Design Your Layout Made for people having a nextjs project in ❀️ with markdown wh

François Rouault 105 Oct 11, 2022
Manually curated collection of resources, plugins, utilities, and other assortments for the Sapphire Community projects.

Awesome Sapphire Manually curated collection of resources, plugins, utilities, and other assortments for the Sapphire Community projects. Has your pro

Sapphire 20 Dec 17, 2022
Wallpik is a stock images & wallpapers downloading web app built with vanilla JavaScript & Pexels API

Wallpik the stock photos & wallpaper web app (Preview) Wallpik Wallpik is a single page application built with HTML, CSS, Vanilla JavaScript & Pexels

Shivaraj Padala 4 Apr 19, 2022
Manually curated collection of resources for frontend web developers.

Frontend Development Manually curated collection of resources for frontend web developers. You are viewing a browseable version, split by category in

Tim Navrotskyy 36.4k Jan 1, 2023
Toggle Dark-Mode manually on InStream.de

InStream.de Dark-Mode Umschalter Was es macht Dieses Add-On fΓΌr Firefox fΓΌgt einen Button hinzu, mit dem man websites zwischen "Normal" und "Dark-Mode

InStream.de 2 Feb 7, 2022
A JavaScript library allowing the creation of manually resizable div elements.

Resizable.js A JavaScript library allowing the creation of resizable html divs. Try the live demo! Setup Link to both resizable.js and resizable-style

null 44 Oct 6, 2022
An extension to download all you need in the LGU (aka CUHKSZ) Blackboard

LGU Blackboard Downloader A Chromium (Chrome/Edge compatible) browser extension to download all you need in the LGU (aka CUHKSZ) Blackboard δΈ€δΈͺChrome/E

Zcorn 4 Mar 4, 2023
Satyam Sharma 3 Jul 8, 2022
ToolJet an open-source low-code framework to build and deploy internal tools quickly without much effort from the engineering teams

ToolJet is an open-source low-code framework to build and deploy internal tools quickly without much effort from the engineering teams. You can connect to your data sources, such as databases (like PostgreSQL, MongoDB, Elasticsearch, etc), API endpoints (ToolJet supports importing OpenAPI spec & OAuth2 authorization), and external services (like Stripe, Slack, Google Sheets, Airtable) and use our pre-built UI widgets to build internal tools.

ToolJet 15.6k Jan 3, 2023
Low cost, low effort P2P WebRTC serverless signalling using Cloudflare Workers

P2PCF P2PCF enables free (or cheap) serverless WebRTC signalling using a Cloudflare worker and a Cloudflare R2 bucket. The API is inspired by P2PT, bu

Greg Fodor 560 Jan 8, 2023