diff --git a/CalibreWebCompanion/CalibreWebCompanion/settings.py b/CalibreWebCompanion/CalibreWebCompanion/settings.py
index d7fef39..40a5ea8 100644
--- a/CalibreWebCompanion/CalibreWebCompanion/settings.py
+++ b/CalibreWebCompanion/CalibreWebCompanion/settings.py
@@ -65,6 +65,7 @@ TEMPLATES = [
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
+ "library.context_processors.filters"
],
},
},
diff --git a/CalibreWebCompanion/library/_models.py b/CalibreWebCompanion/library/_models.py
deleted file mode 100644
index f9320a5..0000000
--- a/CalibreWebCompanion/library/_models.py
+++ /dev/null
@@ -1,265 +0,0 @@
-# This is an auto-generated Django model module.
-# You'll have to do the following manually to clean this up:
-# * Rearrange models' order
-# * Make sure each model has one field with primary_key=True
-# * Make sure each ForeignKey and OneToOneField has `on_delete` set to the desired behavior
-# * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
-# Feel free to rename the models, but don't rename db_table values or field names.
-from django.db import models
-
-
-class Authors(models.Model):
- name = models.TextField()
- sort = models.TextField(blank=True, null=True)
- link = models.TextField()
-
- class Meta:
- managed = False
- db_table = 'authors'
-
-
-class Comments(models.Model):
- book = models.ForeignField("Book")
- text = models.TextField()
-
- class Meta:
- managed = False
- db_table = 'comments'
-
-
-class Data(models.Model):
- book = models.IntegerField()
- format = models.TextField()
- uncompressed_size = models.IntegerField()
- name = models.TextField()
-
- class Meta:
- managed = False
- db_table = 'data'
-
-
-class Identifiers(models.Model):
- book = models.IntegerField()
- type = models.TextField()
- val = models.TextField()
-
- class Meta:
- managed = False
- db_table = 'identifiers'
-
-
-class Languages(models.Model):
- lang_code = models.TextField()
-
- class Meta:
- managed = False
- db_table = 'languages'
-
-
-class Publishers(models.Model):
- name = models.TextField()
- sort = models.TextField(blank=True, null=True)
-
- class Meta:
- managed = False
- db_table = 'publishers'
-
-
-class Ratings(models.Model):
- rating = models.IntegerField(blank=True, null=True)
-
- class Meta:
- managed = False
- db_table = 'ratings'
-
-
-class Series(models.Model):
- name = models.TextField()
- sort = models.TextField(blank=True, null=True)
-
- class Meta:
- managed = False
- db_table = 'series'
-
-
-class Tags(models.Model):
- name = models.TextField()
-
- class Meta:
- managed = False
- db_table = 'tags'
-
-
-class Books(models.Model):
- title = models.TextField()
- sort = models.TextField(blank=True, null=True)
- # This field type is a guess.
- timestamp = models.TextField(blank=True, null=True)
- # This field type is a guess.
- pubdate = models.TextField(blank=True, null=True)
- series_index = models.FloatField()
- author_sort = models.TextField(blank=True, null=True)
- isbn = models.TextField(blank=True, null=True)
- lccn = models.TextField(blank=True, null=True)
- path = models.TextField()
- flags = models.IntegerField()
- uuid = models.TextField(blank=True, null=True)
- has_cover = models.BooleanField(blank=True, null=True)
- last_modified = models.TextField() # This field type is a guess.
- authors = models.ManyToManyField(
- Authors,
- through='BooksAuthorsLink',
- through_fields=('book', 'author'))
- languages = models.ManyToManyField(
- Languages,
- through='BooksLanguagesLink',
- through_fields=('book', 'lang_code'))
- publishers = models.ManyToManyField(
- Publishers,
- through='BooksPublishersLink',
- through_fields=('book', 'publisher'))
- series = models.ManyToManyField(
- Series,
- through='BooksSeriesLink',
- through_fields=('book', 'series'))
- tags = models.ManyToManyField(
- Tags,
- through='BooksTagsLink',
- through_fields=('book', 'tag'))
-
- class Meta:
- managed = False
- db_table = 'books'
-
-
-class BooksAuthorsLink(models.Model):
- book = models.ForeignKey(db_column="book")
- author = models.ForeignKey(db_column="author")
-
- class Meta:
- managed = False
- db_table = 'books_authors_link'
-
-
-class BooksLanguagesLink(models.Model):
- book = models.ForeignKey(db_colum="book")
- lang_code = models.ForeignKey(db_column="lang_code")
- item_order = models.IntegerField()
-
- class Meta:
- managed = False
- db_table = 'books_languages_link'
-
-
-class BooksPublishersLink(models.Model):
- book = models.ForeignKey(db_column="book")
- publisher = models.ForeignKey(db_column="publisher")
-
- class Meta:
- managed = False
- db_table = 'books_publishers_link'
-
-
-# class BooksRatingsLink(models.Model): # TODO add this somehow
-# book = models.ForeignKey(db_column="book")
-# rating = models.IntegerField()
-# class Meta:
-# managed = False
-# db_table = 'books_ratings_link'
-
-
-class BooksSeriesLink(models.Model):
- book = models.ForeignKey(db_column="book")
- series = models.ForeignKey(db_column="series")
-
- class Meta:
- managed = False
- db_table = 'books_series_link'
-
-
-class BooksTagsLink(models.Model):
- book = models.ForeignKey(db_column="book")
- tag = models.ForeignKey(db_column="tag")
-
- class Meta:
- managed = False
- db_table = 'books_tags_link'
-
-
-# class BooksPluginData(models.Model):
-# book = models.IntegerField()
-# name = models.TextField()
-# val = models.TextField()
-
-# class Meta:
-# managed = False
-# db_table = 'books_plugin_data'
-
-
-# class ConversionOptions(models.Model):
-# format = models.TextField()
-# book = models.IntegerField(blank=True, null=True)
-# data = models.BinaryField()
-#
-# class Meta:
-# managed = False
-# db_table = 'conversion_options'
-#
-# class LibraryId(models.Model):
-# uuid = models.TextField()
-#
-# class Meta:
-# managed = False
-# db_table = 'library_id'
-#
-# class CustomColumns(models.Model):
-# label = models.TextField()
-# name = models.TextField()
-# datatype = models.TextField()
-# mark_for_delete = models.BooleanField()
-# editable = models.BooleanField()
-# display = models.TextField()
-# is_multiple = models.BooleanField()
-# normalized = models.BooleanField()
-#
-# class Meta:
-# managed = False
-# db_table = 'custom_columns'
-#
-# class Preferences(models.Model):
-# key = models.TextField()
-# val = models.TextField()
-#
-# class Meta:
-# managed = False
-# db_table = 'preferences'
-#
-# class Feeds(models.Model):
-# title = models.TextField()
-# script = models.TextField()
-#
-# class Meta:
-# managed = False
-# db_table = 'feeds'
-#
-#
-# class LastReadPositions(models.Model):
-# book = models.IntegerField()
-# format = models.TextField()
-# user = models.TextField()
-# device = models.TextField()
-# cfi = models.TextField()
-# epoch = models.FloatField()
-# pos_frac = models.FloatField()
-#
-# class Meta:
-# managed = False
-# db_table = 'last_read_positions'
-
-
-# class MetadataDirtied(models.Model):
-# book = models.IntegerField()
-
-# class Meta:
-# managed = False
-# db_table = 'metadata_dirtied'
diff --git a/CalibreWebCompanion/library/context_processors.py b/CalibreWebCompanion/library/context_processors.py
new file mode 100644
index 0000000..b523dfc
--- /dev/null
+++ b/CalibreWebCompanion/library/context_processors.py
@@ -0,0 +1,19 @@
+from .models import Authors, Tags, Publishers, Languages, Ratings, Series
+
+
+def filters(request):
+ unique_authors = Authors.objects.all().order_by('sort')
+ unique_tags = Tags.objects.all().order_by('name')
+ unique_publishers = Publishers.objects.all().order_by('name')
+ unique_languages = Languages.objects.all()
+ unique_ratings = Ratings.objects.all().order_by('rating')
+ unique_series = Series.objects.all().order_by('sort')
+
+ return {
+ "unique_authors": unique_authors,
+ "unique_tags": unique_tags,
+ "unique_publishers": unique_publishers,
+ "unique_languages": unique_languages,
+ "unique_ratings": unique_ratings,
+ "unique_series": unique_series
+ }
diff --git a/CalibreWebCompanion/library/forms.py b/CalibreWebCompanion/library/forms.py
new file mode 100644
index 0000000..23ce394
--- /dev/null
+++ b/CalibreWebCompanion/library/forms.py
@@ -0,0 +1,7 @@
+from django import forms
+
+class SearchForm(forms.Form):
+ title = forms.CharField(label="Title", max_length=200)
+ author = forms.CharField(label='Author', max_length=100)
+ # identifier = forms.CharField(label='Identifier(ISBN, Google-id, amazon id)', max_length=20)
+
diff --git a/CalibreWebCompanion/library/static/css/styles.css b/CalibreWebCompanion/library/static/css/styles.css
index b49e6a5..2a56dc8 100644
--- a/CalibreWebCompanion/library/static/css/styles.css
+++ b/CalibreWebCompanion/library/static/css/styles.css
@@ -55,4 +55,24 @@
.fa-caret-down {
float: right;
padding-right: 8px;
- }
\ No newline at end of file
+ }
+
+
+ table {
+ border-spacing: 0;
+ width: 100%;
+ border: 1px solid #ddd;
+ }
+
+ th {
+ cursor: pointer;
+ }
+
+ th, td {
+ text-align: left;
+ padding: 16px;
+ }
+
+ tr:nth-child(even) {
+ background-color: #f2f2f2
+ }
\ No newline at end of file
diff --git a/CalibreWebCompanion/library/templates/base.html b/CalibreWebCompanion/library/templates/base.html
index fb8494f..b5bce2d 100644
--- a/CalibreWebCompanion/library/templates/base.html
+++ b/CalibreWebCompanion/library/templates/base.html
@@ -1,55 +1,142 @@
+
{% block title %}Local Library {% endblock %}
-
+
{% load static %}
+
- {% block sidebar %}
-
- {% endblock %}
+ {% block sidebar %}
+
+
Books
+
Authors
+
+
+
+ {% for author in unique_authors %}
+
{{author}}
+
+ {% endfor %}
+
+
+
Publishers
+
+
+
+ {% for publisher in unique_publishers %}
+
{{publisher}}
+
+ {% endfor %}
+
+
+
Ratings
+
+
+
+ {% for rating in unique_ratings %}
+
{{rating}}
+
+ {% endfor %}
+
+
Tags
+
+
+
+ {% for tag in unique_tags %}
+
{{tag}}
+
+ {% endfor %}
+
+
+
+ {% endblock %}
{% block content %}{% endblock %}
+
+
+
\ No newline at end of file
diff --git a/CalibreWebCompanion/library/templates/library/authors_detail.html b/CalibreWebCompanion/library/templates/library/authors_detail.html
index d3e832e..85ca59c 100644
--- a/CalibreWebCompanion/library/templates/library/authors_detail.html
+++ b/CalibreWebCompanion/library/templates/library/authors_detail.html
@@ -3,15 +3,33 @@
{% block content %}
{% load static %}
{{authors}}
- {% if books %}
-
- {% else %}
- {%endif%}
+
+
+
+ Title
+ Author
+ Rating
+ Tags
+ Added
+
+ {% for book in books %}
+
+ {{ book.title }}
+ {{book.author_sort}}
+ {% for rating in book.ratings.all %}
+ {{rating}}
+ {% endfor %}
+
+
+ {% for tag in book.tags.all %}
+ {{tag}},
+ {% endfor %}
+
+ {{book.timestamp}}
+
+ {% endfor %}
+
diff --git a/CalibreWebCompanion/library/templates/library/books_list.html b/CalibreWebCompanion/library/templates/library/books_list.html
index 81c97f8..147c59a 100644
--- a/CalibreWebCompanion/library/templates/library/books_list.html
+++ b/CalibreWebCompanion/library/templates/library/books_list.html
@@ -2,16 +2,39 @@
{% block content %}
{% load static %}
- Book List
- {% if books_list %}
-
- {% for book in books_list %}
-
- {{ book.title }} ({{book.author_sort}})
-
- {% endfor %}
-
- {% else %}
- There are no books in the library.
- {% endif %}
+Book List
+
+
+
+
+ Title
+ Author
+ Rating
+ Tags
+ Added
+
+ {% for book in books_list %}
+
+ {{ book.title }}
+ {{book.author_sort}}
+ {% for rating in book.ratings.all %}
+ {{rating}}
+ {% endfor %}
+
+
+ {% for tag in book.tags.all %}
+ {{tag}},
+ {% endfor %}
+
+ {{book.timestamp}}
+
+ {% endfor %}
+
+
+
+
+
+
+
+
{% endblock %}
\ No newline at end of file
diff --git a/CalibreWebCompanion/library/templates/library/publishers_detail.html b/CalibreWebCompanion/library/templates/library/publishers_detail.html
index 834da20..ff23d0b 100644
--- a/CalibreWebCompanion/library/templates/library/publishers_detail.html
+++ b/CalibreWebCompanion/library/templates/library/publishers_detail.html
@@ -2,17 +2,37 @@
{% block content %}
{% load static %}
-{{authors}}
+{{publishers}}
- {% if publishers.released %}
-
- {% for book in publishers.released.all %}
-
- {{book.title}}
- {%endfor%}
-
- {% else %}
- {%endif%}
+{% if publishers.released %}
+
+
+
+ Title
+ Author
+ Rating
+ Tags
+ Added
+
+ {% for book in publishers.released.all %}
+
+ {{ book.title }}
+ {{book.author_sort}}
+ {% for rating in book.ratings.all %}
+ {{rating}}
+ {% endfor %}
+
+
+ {% for tag in book.tags.all %}
+ {{tag}},
+ {% endfor %}
+
+ {{book.timestamp}}
+
+ {% endfor %}
+
+{% else %}
+{%endif%}
{% endblock %}
\ No newline at end of file
diff --git a/CalibreWebCompanion/library/templates/library/ratings_detail.html b/CalibreWebCompanion/library/templates/library/ratings_detail.html
index 4cfcb26..d1b6c4e 100644
--- a/CalibreWebCompanion/library/templates/library/ratings_detail.html
+++ b/CalibreWebCompanion/library/templates/library/ratings_detail.html
@@ -4,15 +4,35 @@
{% load static %}
{{ratings}}
- {% if books %}
-
- {% else %}
- {%endif%}
+{% if books %}
+
+
+
+ Title
+ Author
+ Rating
+ Tags
+ Added
+
+ {% for book in books %}
+
+ {{ book.title }}
+ {{book.author_sort}}
+ {% for rating in book.ratings.all %}
+ {{rating}}
+ {% endfor %}
+
+
+ {% for tag in book.tags.all %}
+ {{tag}},
+ {% endfor %}
+
+ {{book.timestamp}}
+
+ {% endfor %}
+
+{% else %}
+{%endif%}
diff --git a/CalibreWebCompanion/library/templates/library/tags_detail.html b/CalibreWebCompanion/library/templates/library/tags_detail.html
index 8b8edbc..662baa1 100644
--- a/CalibreWebCompanion/library/templates/library/tags_detail.html
+++ b/CalibreWebCompanion/library/templates/library/tags_detail.html
@@ -4,15 +4,35 @@
{% load static %}
{{tags}}
- {% if books %}
-
- {% else %}
- {%endif%}
+{% if books %}
+
+
+
+ Title
+ Author
+ Rating
+ Tags
+ Added
+
+ {% for book in books %}
+
+ {{ book.title }}
+ {{book.author_sort}}
+ {% for rating in book.ratings.all %}
+ {{rating}}
+ {% endfor %}
+
+
+ {% for tag in book.tags.all %}
+ {{tag}},
+ {% endfor %}
+
+ {{book.timestamp}}
+
+ {% endfor %}
+
+{% else %}
+{%endif%}
diff --git a/CalibreWebCompanion/library/views.py b/CalibreWebCompanion/library/views.py
index d4d724e..074dac3 100644
--- a/CalibreWebCompanion/library/views.py
+++ b/CalibreWebCompanion/library/views.py
@@ -1,8 +1,31 @@
from django.shortcuts import render
from django.views import generic
from .models import Authors, Books, Comments, Ratings, BooksAuthorsLink, Publishers, Tags, BooksTagsLink, BooksRatingsLink, Data
+from django.http import HttpResponseRedirect
+# from .forms import SearchForms
+# def get_results(request): # TODO this might not be what i want
+# # if this is a POST request we need to process the form data
+# if request.method == 'POST':
+# # create a form instance and populate it with data from the request:
+# form = SearchForm(request.POST)
+# # check whether it's valid:
+# if form.is_valid():
+# books = Books.objects.all()
+# if form.title:
+# books.filter(sort_icontains=form.title)
+# if form.author:
+# books.filter(author_sort_icontains=form.author)
+
+# return HttpResponseRedirect('/results/')
+
+# # if a GET (or any other method) we'll create a blank form
+# else:
+# form = NameForm()
+
+# return render(request, 'name.html', {'form': form})
+
class AuthorListView(generic.ListView):
model = Authors
diff --git a/README.md b/README.md
index 9fc27c8..b0ec19b 100644
--- a/README.md
+++ b/README.md
@@ -2,9 +2,9 @@
Django 3.0
# how to use:
-Edit `./CalibreWebCompanion/CalibreWebCompanion/settings`.
-Set CALIBREPATH to the path of your library
-`./CalibreWebCompanion`
-run `./manage.py runserver`
+Edit `./CalibreWebCompanion/CalibreWebCompanion/settings`.
+Set CALIBREPATH to the path of your library
+`./CalibreWebCompanion`
+run `./manage.py runserver`
-this is in development mode. don't actually use it or release it like this. The debug info it shows is spicy.
\ No newline at end of file
+this is in development mode. don't actually use it or release it like this. The debug info it shows is spicy.
\ No newline at end of file