Repository files navigation

Introduction

Pathagar is a simple book server for schools where there is little or no internet. For more information, see this presentation by Prof. Sameer Verma. To get involved, please join our mailing list. For some of the history of the project, read this blogpost at OLPC-SF. Pathagar is built with the Django framework.

OPDS

It uses the OPDS spec.

Known good clients

We've successfully used the following OPDS clients with Pathagar.

  • Aldiko Book Reader on Android

Loading content

Once installed, Pathagar contains no books. You can upload individual books through the UI or you can bulk load them by following the instructions below.

From Internet Archive

You can download book files from Internet Archive. First you need to create a user and a bookmarks list. Once created, you'll fetch the book files on your bookmarks list with the fetch_ia_item command.

python manage.py fetch_ia_item --username=<your-username> --out=books.json

This can take a while depending on your internet connection and how many books you have on your bookmarks list. You might want to go grab a coffee and take a stretch break.

Once complete, you'll have a books.json file which you can use with the addbooks command.

python manage.py addbooks --json books.json

Learn more about the addbooks command below.

addbooks command

If you have your books already with metadata described in a file, use the addbooks command to import them into Pathagar.

JSON format

To add books from a JSON file:

python manage.py addbooks --json books.json

The format of the JSON file is like::

[
{
"book_path": "Path to ebook file",
"cover_path": "Path to cover image",
"a_title": "Title",
"a_author": "Author",
"a_status": "Published",
"a_summary": "Description",
"tags": "set, of, tags"
},
...
]

You can add more fields. Please refer to the Book model.

CSV format

To add books from a CSV file:

python manage.py addbooks books.csv

The format of the CSV file is like:

"Path to ebook file","Title","Author","Description"

If you need to add more fields, please use the JSON file.

Dependencies

  • Python 2.7 or Python 3.5
  • libxml2-dev
  • libxslt-dev

Quickstart

Create a virtualenv and install the dependencies.

python3 -m venv venv_pathagar
. ./venv_pathagar/bin/activate
pip install -r requirements.pip

In the Pathagar folder, copy local_settings.example.py to local_settings.py and edit it to suite your needs and environment.

Create the database schema and admin user.

python manage.py migrate
python manage.py createsuperuser

You will be asked for an admin username and password during this stage. This is only for development, so an easy to remember username and password is fine.

Start the development server.

python manage.py runserver

Open your web browser to http://localhost:8000/.

Click on "Add books" in the footer to start adding books. You will be asked for a username/password. This is the admin username/password you supplied while running createsuperuser.

Deployment

To run the server in a production environment, look at Django deployment docs.

pathagar.info also contains some common options for deploying Pathagar.

About

Pathagar is a simple bookserver serving OPDS feeds

Topics

Resources

Stars

102 stars

Watchers

9 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Introduction

Pathagar is a simple book server for schools where there is little or no internet. For more information, see this presentation by Prof. Sameer Verma. To get involved, please join our mailing list. For some of the history of the project, read this blogpost at OLPC-SF. Pathagar is built with the Django framework.

OPDS

It uses the OPDS spec.

Known good clients

We've successfully used the following OPDS clients with Pathagar.

  • Aldiko Book Reader on Android

Loading content

Once installed, Pathagar contains no books. You can upload individual books through the UI or you can bulk load them by following the instructions below.

From Internet Archive

You can download book files from Internet Archive. First you need to create a user and a bookmarks list. Once created, you'll fetch the book files on your bookmarks list with the fetch_ia_item command.

python manage.py fetch_ia_item --username=<your-username> --out=books.json

This can take a while depending on your internet connection and how many books you have on your bookmarks list. You might want to go grab a coffee and take a stretch break.

Once complete, you'll have a books.json file which you can use with the addbooks command.

python manage.py addbooks --json books.json

Learn more about the addbooks command below.

addbooks command

If you have your books already with metadata described in a file, use the addbooks command to import them into Pathagar.

JSON format

To add books from a JSON file:

python manage.py addbooks --json books.json

The format of the JSON file is like::

[
{
"book_path": "Path to ebook file",
"cover_path": "Path to cover image",
"a_title": "Title",
"a_author": "Author",
"a_status": "Published",
"a_summary": "Description",
"tags": "set, of, tags"
},
...
]

You can add more fields. Please refer to the Book model.

CSV format

To add books from a CSV file:

python manage.py addbooks books.csv

The format of the CSV file is like:

"Path to ebook file","Title","Author","Description"

If you need to add more fields, please use the JSON file.

Dependencies

  • Python 2.7 or Python 3.5
  • libxml2-dev
  • libxslt-dev

Quickstart

Create a virtualenv and install the dependencies.

python3 -m venv venv_pathagar
. ./venv_pathagar/bin/activate
pip install -r requirements.pip

In the Pathagar folder, copy local_settings.example.py to local_settings.py and edit it to suite your needs and environment.

Create the database schema and admin user.

python manage.py migrate
python manage.py createsuperuser

You will be asked for an admin username and password during this stage. This is only for development, so an easy to remember username and password is fine.

Start the development server.

python manage.py runserver

Open your web browser to http://localhost:8000/.

Click on "Add books" in the footer to start adding books. You will be asked for a username/password. This is the admin username/password you supplied while running createsuperuser.

Deployment

To run the server in a production environment, look at Django deployment docs.

pathagar.info also contains some common options for deploying Pathagar.

About

Pathagar is a simple bookserver serving OPDS feeds

Topics

Resources

Stars

102 stars

Watchers

9 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Introduction

Pathagar is a simple book server for schools where there is little or no internet. For more information, see this presentation by Prof. Sameer Verma. To get involved, please join our mailing list. For some of the history of the project, read this blogpost at OLPC-SF. Pathagar is built with the Django framework.

OPDS

It uses the OPDS spec.

Known good clients

We've successfully used the following OPDS clients with Pathagar.

  • Aldiko Book Reader on Android

Loading content

Once installed, Pathagar contains no books. You can upload individual books through the UI or you can bulk load them by following the instructions below.

From Internet Archive

You can download book files from Internet Archive. First you need to create a user and a bookmarks list. Once created, you'll fetch the book files on your bookmarks list with the fetch_ia_item command.

python manage.py fetch_ia_item --username=<your-username> --out=books.json

This can take a while depending on your internet connection and how many books you have on your bookmarks list. You might want to go grab a coffee and take a stretch break.

Once complete, you'll have a books.json file which you can use with the addbooks command.

python manage.py addbooks --json books.json

Learn more about the addbooks command below.

addbooks command

If you have your books already with metadata described in a file, use the addbooks command to import them into Pathagar.

JSON format

To add books from a JSON file:

python manage.py addbooks --json books.json

The format of the JSON file is like::

[
{
"book_path": "Path to ebook file",
"cover_path": "Path to cover image",
"a_title": "Title",
"a_author": "Author",
"a_status": "Published",
"a_summary": "Description",
"tags": "set, of, tags"
},
...
]

You can add more fields. Please refer to the Book model.

CSV format

To add books from a CSV file:

python manage.py addbooks books.csv

The format of the CSV file is like:

"Path to ebook file","Title","Author","Description"

If you need to add more fields, please use the JSON file.

Dependencies

  • Python 2.7 or Python 3.5
  • libxml2-dev
  • libxslt-dev

Quickstart

Create a virtualenv and install the dependencies.

python3 -m venv venv_pathagar
. ./venv_pathagar/bin/activate
pip install -r requirements.pip

In the Pathagar folder, copy local_settings.example.py to local_settings.py and edit it to suite your needs and environment.

Create the database schema and admin user.

python manage.py migrate
python manage.py createsuperuser

You will be asked for an admin username and password during this stage. This is only for development, so an easy to remember username and password is fine.

Start the development server.

python manage.py runserver

Open your web browser to http://localhost:8000/.

Click on "Add books" in the footer to start adding books. You will be asked for a username/password. This is the admin username/password you supplied while running createsuperuser.

Deployment

To run the server in a production environment, look at Django deployment docs.

pathagar.info also contains some common options for deploying Pathagar.

About

Pathagar is a simple bookserver serving OPDS feeds

Topics

Resources

Stars

102 stars

Watchers

9 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Introduction

Pathagar is a simple book server for schools where there is little or no internet. For more information, see this presentation by Prof. Sameer Verma. To get involved, please join our mailing list. For some of the history of the project, read this blogpost at OLPC-SF. Pathagar is built with the Django framework.

OPDS

It uses the OPDS spec.

Known good clients

We've successfully used the following OPDS clients with Pathagar.

  • Aldiko Book Reader on Android

Loading content

Once installed, Pathagar contains no books. You can upload individual books through the UI or you can bulk load them by following the instructions below.

From Internet Archive

You can download book files from Internet Archive. First you need to create a user and a bookmarks list. Once created, you'll fetch the book files on your bookmarks list with the fetch_ia_item command.

python manage.py fetch_ia_item --username=<your-username> --out=books.json

This can take a while depending on your internet connection and how many books you have on your bookmarks list. You might want to go grab a coffee and take a stretch break.

Once complete, you'll have a books.json file which you can use with the addbooks command.

python manage.py addbooks --json books.json

Learn more about the addbooks command below.

addbooks command

If you have your books already with metadata described in a file, use the addbooks command to import them into Pathagar.

JSON format

To add books from a JSON file:

python manage.py addbooks --json books.json

The format of the JSON file is like::

[
{
"book_path": "Path to ebook file",
"cover_path": "Path to cover image",
"a_title": "Title",
"a_author": "Author",
"a_status": "Published",
"a_summary": "Description",
"tags": "set, of, tags"
},
...
]

You can add more fields. Please refer to the Book model.

CSV format

To add books from a CSV file:

python manage.py addbooks books.csv

The format of the CSV file is like:

"Path to ebook file","Title","Author","Description"

If you need to add more fields, please use the JSON file.

Dependencies

  • Python 2.7 or Python 3.5
  • libxml2-dev
  • libxslt-dev

Quickstart

Create a virtualenv and install the dependencies.

python3 -m venv venv_pathagar
. ./venv_pathagar/bin/activate
pip install -r requirements.pip

In the Pathagar folder, copy local_settings.example.py to local_settings.py and edit it to suite your needs and environment.

Create the database schema and admin user.

python manage.py migrate
python manage.py createsuperuser

You will be asked for an admin username and password during this stage. This is only for development, so an easy to remember username and password is fine.

Start the development server.

python manage.py runserver

Open your web browser to http://localhost:8000/.

Click on "Add books" in the footer to start adding books. You will be asked for a username/password. This is the admin username/password you supplied while running createsuperuser.

Deployment

To run the server in a production environment, look at Django deployment docs.

pathagar.info also contains some common options for deploying Pathagar.

About

Pathagar is a simple bookserver serving OPDS feeds

Topics

Resources

Stars

102 stars

Watchers

9 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Introduction

Pathagar is a simple book server for schools where there is little or no internet. For more information, see this presentation by Prof. Sameer Verma. To get involved, please join our mailing list. For some of the history of the project, read this blogpost at OLPC-SF. Pathagar is built with the Django framework.

OPDS

It uses the OPDS spec.

Known good clients

We've successfully used the following OPDS clients with Pathagar.

  • Aldiko Book Reader on Android

Loading content

Once installed, Pathagar contains no books. You can upload individual books through the UI or you can bulk load them by following the instructions below.

From Internet Archive

You can download book files from Internet Archive. First you need to create a user and a bookmarks list. Once created, you'll fetch the book files on your bookmarks list with the fetch_ia_item command.

python manage.py fetch_ia_item --username=<your-username> --out=books.json

This can take a while depending on your internet connection and how many books you have on your bookmarks list. You might want to go grab a coffee and take a stretch break.

Once complete, you'll have a books.json file which you can use with the addbooks command.

python manage.py addbooks --json books.json

Learn more about the addbooks command below.

addbooks command

If you have your books already with metadata described in a file, use the addbooks command to import them into Pathagar.

JSON format

To add books from a JSON file:

python manage.py addbooks --json books.json

The format of the JSON file is like::

[
{
"book_path": "Path to ebook file",
"cover_path": "Path to cover image",
"a_title": "Title",
"a_author": "Author",
"a_status": "Published",
"a_summary": "Description",
"tags": "set, of, tags"
},
...
]

You can add more fields. Please refer to the Book model.

CSV format

To add books from a CSV file:

python manage.py addbooks books.csv

The format of the CSV file is like:

"Path to ebook file","Title","Author","Description"

If you need to add more fields, please use the JSON file.

Dependencies

  • Python 2.7 or Python 3.5
  • libxml2-dev
  • libxslt-dev

Quickstart

Create a virtualenv and install the dependencies.

python3 -m venv venv_pathagar
. ./venv_pathagar/bin/activate
pip install -r requirements.pip

In the Pathagar folder, copy local_settings.example.py to local_settings.py and edit it to suite your needs and environment.

Create the database schema and admin user.

python manage.py migrate
python manage.py createsuperuser

You will be asked for an admin username and password during this stage. This is only for development, so an easy to remember username and password is fine.

Start the development server.

python manage.py runserver

Open your web browser to http://localhost:8000/.

Click on "Add books" in the footer to start adding books. You will be asked for a username/password. This is the admin username/password you supplied while running createsuperuser.

Deployment

To run the server in a production environment, look at Django deployment docs.

pathagar.info also contains some common options for deploying Pathagar.

About

Pathagar is a simple bookserver serving OPDS feeds

Topics

Resources

Stars

102 stars

Watchers

9 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Introduction

Pathagar is a simple book server for schools where there is little or no internet. For more information, see this presentation by Prof. Sameer Verma. To get involved, please join our mailing list. For some of the history of the project, read this blogpost at OLPC-SF. Pathagar is built with the Django framework.

OPDS

It uses the OPDS spec.

Known good clients

We've successfully used the following OPDS clients with Pathagar.

  • Aldiko Book Reader on Android

Loading content

Once installed, Pathagar contains no books. You can upload individual books through the UI or you can bulk load them by following the instructions below.

From Internet Archive

You can download book files from Internet Archive. First you need to create a user and a bookmarks list. Once created, you'll fetch the book files on your bookmarks list with the fetch_ia_item command.

python manage.py fetch_ia_item --username=<your-username> --out=books.json

This can take a while depending on your internet connection and how many books you have on your bookmarks list. You might want to go grab a coffee and take a stretch break.

Once complete, you'll have a books.json file which you can use with the addbooks command.

python manage.py addbooks --json books.json

Learn more about the addbooks command below.

addbooks command

If you have your books already with metadata described in a file, use the addbooks command to import them into Pathagar.

JSON format

To add books from a JSON file:

python manage.py addbooks --json books.json

The format of the JSON file is like::

[
{
"book_path": "Path to ebook file",
"cover_path": "Path to cover image",
"a_title": "Title",
"a_author": "Author",
"a_status": "Published",
"a_summary": "Description",
"tags": "set, of, tags"
},
...
]

You can add more fields. Please refer to the Book model.

CSV format

To add books from a CSV file:

python manage.py addbooks books.csv

The format of the CSV file is like:

"Path to ebook file","Title","Author","Description"

If you need to add more fields, please use the JSON file.

Dependencies

  • Python 2.7 or Python 3.5
  • libxml2-dev
  • libxslt-dev

Quickstart

Create a virtualenv and install the dependencies.

python3 -m venv venv_pathagar
. ./venv_pathagar/bin/activate
pip install -r requirements.pip

In the Pathagar folder, copy local_settings.example.py to local_settings.py and edit it to suite your needs and environment.

Create the database schema and admin user.

python manage.py migrate
python manage.py createsuperuser

You will be asked for an admin username and password during this stage. This is only for development, so an easy to remember username and password is fine.

Start the development server.

python manage.py runserver

Open your web browser to http://localhost:8000/.

Click on "Add books" in the footer to start adding books. You will be asked for a username/password. This is the admin username/password you supplied while running createsuperuser.

Deployment

To run the server in a production environment, look at Django deployment docs.

pathagar.info also contains some common options for deploying Pathagar.

About

Pathagar is a simple bookserver serving OPDS feeds

Topics

Resources

Stars

102 stars

Watchers

9 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Introduction

Pathagar is a simple book server for schools where there is little or no internet. For more information, see this presentation by Prof. Sameer Verma. To get involved, please join our mailing list. For some of the history of the project, read this blogpost at OLPC-SF. Pathagar is built with the Django framework.

OPDS

It uses the OPDS spec.

Known good clients

We've successfully used the following OPDS clients with Pathagar.

  • Aldiko Book Reader on Android

Loading content

Once installed, Pathagar contains no books. You can upload individual books through the UI or you can bulk load them by following the instructions below.

From Internet Archive

You can download book files from Internet Archive. First you need to create a user and a bookmarks list. Once created, you'll fetch the book files on your bookmarks list with the fetch_ia_item command.

python manage.py fetch_ia_item --username=<your-username> --out=books.json

This can take a while depending on your internet connection and how many books you have on your bookmarks list. You might want to go grab a coffee and take a stretch break.

Once complete, you'll have a books.json file which you can use with the addbooks command.

python manage.py addbooks --json books.json

Learn more about the addbooks command below.

addbooks command

If you have your books already with metadata described in a file, use the addbooks command to import them into Pathagar.

JSON format

To add books from a JSON file:

python manage.py addbooks --json books.json

The format of the JSON file is like::

[
{
"book_path": "Path to ebook file",
"cover_path": "Path to cover image",
"a_title": "Title",
"a_author": "Author",
"a_status": "Published",
"a_summary": "Description",
"tags": "set, of, tags"
},
...
]

You can add more fields. Please refer to the Book model.

CSV format

To add books from a CSV file:

python manage.py addbooks books.csv

The format of the CSV file is like:

"Path to ebook file","Title","Author","Description"

If you need to add more fields, please use the JSON file.

Dependencies

  • Python 2.7 or Python 3.5
  • libxml2-dev
  • libxslt-dev

Quickstart

Create a virtualenv and install the dependencies.

python3 -m venv venv_pathagar
. ./venv_pathagar/bin/activate
pip install -r requirements.pip

In the Pathagar folder, copy local_settings.example.py to local_settings.py and edit it to suite your needs and environment.

Create the database schema and admin user.

python manage.py migrate
python manage.py createsuperuser

You will be asked for an admin username and password during this stage. This is only for development, so an easy to remember username and password is fine.

Start the development server.

python manage.py runserver

Open your web browser to http://localhost:8000/.

Click on "Add books" in the footer to start adding books. You will be asked for a username/password. This is the admin username/password you supplied while running createsuperuser.

Deployment

To run the server in a production environment, look at Django deployment docs.

pathagar.info also contains some common options for deploying Pathagar.

About

Pathagar is a simple bookserver serving OPDS feeds

Topics

Resources

Stars

102 stars

Watchers

9 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Introduction

Pathagar is a simple book server for schools where there is little or no internet. For more information, see this presentation by Prof. Sameer Verma. To get involved, please join our mailing list. For some of the history of the project, read this blogpost at OLPC-SF. Pathagar is built with the Django framework.

OPDS

It uses the OPDS spec.

Known good clients

We've successfully used the following OPDS clients with Pathagar.

  • Aldiko Book Reader on Android

Loading content

Once installed, Pathagar contains no books. You can upload individual books through the UI or you can bulk load them by following the instructions below.

From Internet Archive

You can download book files from Internet Archive. First you need to create a user and a bookmarks list. Once created, you'll fetch the book files on your bookmarks list with the fetch_ia_item command.

python manage.py fetch_ia_item --username=<your-username> --out=books.json

This can take a while depending on your internet connection and how many books you have on your bookmarks list. You might want to go grab a coffee and take a stretch break.

Once complete, you'll have a books.json file which you can use with the addbooks command.

python manage.py addbooks --json books.json

Learn more about the addbooks command below.

addbooks command

If you have your books already with metadata described in a file, use the addbooks command to import them into Pathagar.

JSON format

To add books from a JSON file:

python manage.py addbooks --json books.json

The format of the JSON file is like::

[
{
"book_path": "Path to ebook file",
"cover_path": "Path to cover image",
"a_title": "Title",
"a_author": "Author",
"a_status": "Published",
"a_summary": "Description",
"tags": "set, of, tags"
},
...
]

You can add more fields. Please refer to the Book model.

CSV format

To add books from a CSV file:

python manage.py addbooks books.csv

The format of the CSV file is like:

"Path to ebook file","Title","Author","Description"

If you need to add more fields, please use the JSON file.

Dependencies

  • Python 2.7 or Python 3.5
  • libxml2-dev
  • libxslt-dev

Quickstart

Create a virtualenv and install the dependencies.

python3 -m venv venv_pathagar
. ./venv_pathagar/bin/activate
pip install -r requirements.pip

In the Pathagar folder, copy local_settings.example.py to local_settings.py and edit it to suite your needs and environment.

Create the database schema and admin user.

python manage.py migrate
python manage.py createsuperuser

You will be asked for an admin username and password during this stage. This is only for development, so an easy to remember username and password is fine.

Start the development server.

python manage.py runserver

Open your web browser to http://localhost:8000/.

Click on "Add books" in the footer to start adding books. You will be asked for a username/password. This is the admin username/password you supplied while running createsuperuser.

Deployment

To run the server in a production environment, look at Django deployment docs.

pathagar.info also contains some common options for deploying Pathagar.

About

Pathagar is a simple bookserver serving OPDS feeds

Topics

Resources

Stars

102 stars

Watchers

9 watching

Forks

Releases

Packages

Used by

Contributors

Languages