summaryrefslogtreecommitdiff
path: root/animism-align
diff options
context:
space:
mode:
Diffstat (limited to 'animism-align')
-rw-r--r--animism-align/cli/app/controllers/upload_controller.py10
-rw-r--r--animism-align/cli/app/sql/models/upload.py6
-rw-r--r--animism-align/cli/app/sql/versions/202103111524_add_episode_id_to_uploads.py29
-rw-r--r--animism-align/cli/commands/admin/fix_uploads.py45
-rw-r--r--animism-align/cli/commands/site/export.py2
-rw-r--r--animism-align/frontend/app/views/audio/audio.actions.js2
-rw-r--r--animism-align/frontend/app/views/editor/align/align.actions.js2
-rw-r--r--animism-align/frontend/app/views/editor/media/components/media.form.js6
-rw-r--r--animism-align/frontend/app/views/editor/media/components/media.formFile.js1
-rw-r--r--animism-align/frontend/app/views/editor/media/components/media.formGallery.js1
-rw-r--r--animism-align/frontend/app/views/editor/media/components/media.formImage.js1
-rw-r--r--animism-align/frontend/app/views/editor/media/components/media.formVideo.js1
-rw-r--r--animism-align/frontend/app/views/editor/media/containers/media.edit.js1
-rw-r--r--animism-align/frontend/app/views/editor/media/containers/media.new.js1
-rw-r--r--animism-align/frontend/app/views/editor/media/media.css3
15 files changed, 102 insertions, 9 deletions
diff --git a/animism-align/cli/app/controllers/upload_controller.py b/animism-align/cli/app/controllers/upload_controller.py
index 7122e53..634f15d 100644
--- a/animism-align/cli/app/controllers/upload_controller.py
+++ b/animism-align/cli/app/controllers/upload_controller.py
@@ -64,6 +64,12 @@ class UploadView(FlaskView):
except:
raise APIError('No tag specified')
+ try:
+ episode_id = request.form.get('episode_id')
+ # print(episode_id)
+ except:
+ raise APIError('No episode_id specified')
+
if 'image' in request.files:
file = request.files['image']
# print(fn)
@@ -85,7 +91,7 @@ class UploadView(FlaskView):
file.seek(0)
uploaded_im_fn = secure_filename(file.filename)
- uploaded_im_abspath = os.path.join(app_cfg.DIR_UPLOADS, tag)
+ uploaded_im_abspath = os.path.join(app_cfg.DIR_UPLOADS, str(episode_id), tag)
uploaded_im_fullpath = os.path.join(uploaded_im_abspath, uploaded_im_fn)
session = Session()
@@ -107,7 +113,7 @@ class UploadView(FlaskView):
os.makedirs(uploaded_im_abspath, exist_ok=True)
file.save(uploaded_im_fullpath)
- upload = Upload(username=username, tag=tag, fn=uploaded_im_fn, sha256=sha256, ext=ext)
+ upload = Upload(username=username, tag=tag, fn=uploaded_im_fn, sha256=sha256, ext=ext, episode_id=episode_id)
session.add(upload)
session.commit()
response = {
diff --git a/animism-align/cli/app/sql/models/upload.py b/animism-align/cli/app/sql/models/upload.py
index ae30a54..ea6950f 100644
--- a/animism-align/cli/app/sql/models/upload.py
+++ b/animism-align/cli/app/sql/models/upload.py
@@ -14,6 +14,7 @@ class Upload(Base):
"""Table for storing references to various media"""
__tablename__ = 'upload'
id = Column(Integer, primary_key=True)
+ episode_id = Column(Integer)
sha256 = Column(String(256), nullable=False)
fn = Column(String(256), nullable=False)
ext = Column(String(4, convert_unicode=True), nullable=False)
@@ -24,6 +25,7 @@ class Upload(Base):
def toJSON(self):
return {
'id': self.id,
+ 'episode_id': self.episode_id,
'sha256': self.sha256,
'fn': self.fn,
'ext': self.ext,
@@ -44,6 +46,6 @@ class Upload(Base):
def url(self):
if self.tag:
- return join('/static/data_store/uploads', self.tag, self.fn)
- return join('/static/data_store/uploads', self.fn)
+ return join('/static/data_store/uploads', str(self.episode_id), self.tag, self.fn)
+ return join('/static/data_store/uploads', str(self.episode_id), self.fn)
# return join(app_cfg.URL_UPLOADS, sha256_tree(self.sha256), self.filename())
diff --git a/animism-align/cli/app/sql/versions/202103111524_add_episode_id_to_uploads.py b/animism-align/cli/app/sql/versions/202103111524_add_episode_id_to_uploads.py
new file mode 100644
index 0000000..bccea9e
--- /dev/null
+++ b/animism-align/cli/app/sql/versions/202103111524_add_episode_id_to_uploads.py
@@ -0,0 +1,29 @@
+"""add episode id to uploads
+
+Revision ID: d00c2398fc5f
+Revises: 639488f6e800
+Create Date: 2021-03-11 15:24:07.230796
+
+"""
+from alembic import op
+import sqlalchemy as sa
+import sqlalchemy_utc
+
+
+# revision identifiers, used by Alembic.
+revision = 'd00c2398fc5f'
+down_revision = '639488f6e800'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.add_column('upload', sa.Column('episode_id', sa.Integer(), nullable=True))
+ # ### end Alembic commands ###
+
+
+def downgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.drop_column('upload', 'episode_id')
+ # ### end Alembic commands ###
diff --git a/animism-align/cli/commands/admin/fix_uploads.py b/animism-align/cli/commands/admin/fix_uploads.py
new file mode 100644
index 0000000..8eaa505
--- /dev/null
+++ b/animism-align/cli/commands/admin/fix_uploads.py
@@ -0,0 +1,45 @@
+import click
+
+@click.command('fix_uploads')
+@click.pass_context
+def cli(ctx):
+ from app.settings import app_cfg
+ from app.sql.common import db, Session, Media
+ from sqlalchemy.orm.attributes import flag_modified
+
+ session = Session()
+ media = session.query(Media).all()
+
+ seen_keys = {}
+ for item in media:
+ if "poster" in item.settings:
+ fix_url(item.settings['poster'])
+ print(item.settings['poster']['url'])
+ if "display" in item.settings:
+ fix_url(item.settings['display'])
+ if "fullsize" in item.settings:
+ fix_url(item.settings['fullsize'])
+ if "thumbnail" in item.settings:
+ fix_url(item.settings['thumbnail'])
+ if "file" in item.settings:
+ fix_url(item.settings['file'])
+ if "image_lookup" in item.settings:
+ fix_lookup(item.settings['image_lookup'])
+ if "display_lookup" in item.settings:
+ fix_lookup(item.settings['display_lookup'])
+ if "thumbnail_lookup" in item.settings:
+ fix_lookup(item.settings['thumbnail_lookup'])
+ # sqlalchemy will not notice deep updates of JSON fields
+ flag_modified(item, "settings")
+ session.add(item)
+ session.commit()
+
+def fix_lookup(lookup):
+ for key, value in lookup.items():
+ fix_url(value)
+
+def fix_url(obj):
+ if 'episode_id' in obj:
+ return
+ obj['episode_id'] = 1
+ obj['url'] = obj['url'].replace('/uploads', '/uploads/1')
diff --git a/animism-align/cli/commands/site/export.py b/animism-align/cli/commands/site/export.py
index 41e41ed..6bafadc 100644
--- a/animism-align/cli/commands/site/export.py
+++ b/animism-align/cli/commands/site/export.py
@@ -24,7 +24,7 @@ MEDIA_ANNOTATION_TYPES = [
help='Whether to rebuild the Javascript bundle')
@click.pass_context
def cli(ctx, opt_output_dir, opt_sync, opt_js):
- """Export a graph"""
+ """Export an episode"""
# ------------------------------------------------
# imports
diff --git a/animism-align/frontend/app/views/audio/audio.actions.js b/animism-align/frontend/app/views/audio/audio.actions.js
index 08a8ba4..4627e90 100644
--- a/animism-align/frontend/app/views/audio/audio.actions.js
+++ b/animism-align/frontend/app/views/audio/audio.actions.js
@@ -27,7 +27,7 @@ export const load = (url) => dispatch => {
})
}
export const loadEpisodeAudio = (episode) => dispatch => {
- return load(episode.settings.audio.url)(dispatch)
+ return episode.settings.audio ? load(episode.settings.audio.url)(dispatch) : null
}
export const play = () => dispatch => {
diff --git a/animism-align/frontend/app/views/editor/align/align.actions.js b/animism-align/frontend/app/views/editor/align/align.actions.js
index 3b6450b..fe5020c 100644
--- a/animism-align/frontend/app/views/editor/align/align.actions.js
+++ b/animism-align/frontend/app/views/editor/align/align.actions.js
@@ -150,7 +150,7 @@ export const spliceTime = start_ts => dispatch => {
/* peaks */
export const loadPeaks = (episode) => dispatch => (
- api(dispatch, types.peaks, 'peaks', episode.settings.peaks.url)
+ episode.settings.peaks ? api(dispatch, types.peaks, 'peaks', episode.settings.peaks.url) : null
)
/* longform text */
diff --git a/animism-align/frontend/app/views/editor/media/components/media.form.js b/animism-align/frontend/app/views/editor/media/components/media.form.js
index df86516..3a989f1 100644
--- a/animism-align/frontend/app/views/editor/media/components/media.form.js
+++ b/animism-align/frontend/app/views/editor/media/components/media.form.js
@@ -143,7 +143,7 @@ export default class MediaForm extends Component {
}
render() {
- const { isNew, currentUser } = this.props
+ const { isNew, currentUser, episode_id } = this.props
const { title, submitTitle, errorFields, data } = this.state
// console.log(data)
return (
@@ -161,6 +161,7 @@ export default class MediaForm extends Component {
{data.type === 'image' &&
<MediaImageForm
data={data}
+ episode_id={episode_id}
currentUser={currentUser}
onChange={this.handleSelect}
onSettingsChange={this.handleSettingsChange}
@@ -170,6 +171,7 @@ export default class MediaForm extends Component {
{data.type === 'video' &&
<MediaVideoForm
data={data}
+ episode_id={episode_id}
currentUser={currentUser}
onChange={this.handleSelect}
onSettingsChange={this.handleSettingsChange}
@@ -179,6 +181,7 @@ export default class MediaForm extends Component {
{data.type === 'file' &&
<MediaFileForm
data={data}
+ episode_id={episode_id}
currentUser={currentUser}
onChange={this.handleSelect}
onSettingsChange={this.handleSettingsChange}
@@ -188,6 +191,7 @@ export default class MediaForm extends Component {
{data.type === 'gallery' &&
<MediaGalleryForm
data={data}
+ episode_id={episode_id}
currentUser={currentUser}
onChange={this.handleSelect}
onSettingsChange={this.handleSettingsChange}
diff --git a/animism-align/frontend/app/views/editor/media/components/media.formFile.js b/animism-align/frontend/app/views/editor/media/components/media.formFile.js
index bec0a90..fc9c922 100644
--- a/animism-align/frontend/app/views/editor/media/components/media.formFile.js
+++ b/animism-align/frontend/app/views/editor/media/components/media.formFile.js
@@ -38,6 +38,7 @@ export default class MediaFileForm extends Component {
const uploadData = {
image: file,
tag: "file",
+ episode_id: this.props.episode_id,
username: this.props.currentUser.username,
}
// uploadData['__image_filename'] = file.filename
diff --git a/animism-align/frontend/app/views/editor/media/components/media.formGallery.js b/animism-align/frontend/app/views/editor/media/components/media.formGallery.js
index 4003c7d..536b3c6 100644
--- a/animism-align/frontend/app/views/editor/media/components/media.formGallery.js
+++ b/animism-align/frontend/app/views/editor/media/components/media.formGallery.js
@@ -181,6 +181,7 @@ export default class MediaGalleryForm extends Component {
const uploadData = {
image,
tag,
+ episode_id: this.props.episode_id,
username: this.props.currentUser.username,
}
if (fn) {
diff --git a/animism-align/frontend/app/views/editor/media/components/media.formImage.js b/animism-align/frontend/app/views/editor/media/components/media.formImage.js
index 027926b..015a1cb 100644
--- a/animism-align/frontend/app/views/editor/media/components/media.formImage.js
+++ b/animism-align/frontend/app/views/editor/media/components/media.formImage.js
@@ -103,6 +103,7 @@ export default class MediaImageForm extends Component {
const uploadData = {
image,
tag,
+ episode_id: this.props.episode_id,
username: this.props.currentUser.username,
}
if (fn) {
diff --git a/animism-align/frontend/app/views/editor/media/components/media.formVideo.js b/animism-align/frontend/app/views/editor/media/components/media.formVideo.js
index 656ad2f..5a60cc6 100644
--- a/animism-align/frontend/app/views/editor/media/components/media.formVideo.js
+++ b/animism-align/frontend/app/views/editor/media/components/media.formVideo.js
@@ -60,6 +60,7 @@ export default class MediaVideoForm extends Component {
const uploadData = {
image: file,
tag: "poster",
+ episode_id: this.props.episode_id,
username: this.props.currentUser.username,
}
// uploadData['__image_filename'] = file.filename
diff --git a/animism-align/frontend/app/views/editor/media/containers/media.edit.js b/animism-align/frontend/app/views/editor/media/containers/media.edit.js
index 6799494..c7c8e25 100644
--- a/animism-align/frontend/app/views/editor/media/containers/media.edit.js
+++ b/animism-align/frontend/app/views/editor/media/containers/media.edit.js
@@ -38,6 +38,7 @@ class MediaEdit extends Component {
<MediaMenu mediaActions={this.props.mediaActions} />
<MediaForm
data={show.res}
+ episode_id={this.props.episode_id}
currentUser={this.props.currentUser}
onSubmit={this.handleSubmit.bind(this)}
/>
diff --git a/animism-align/frontend/app/views/editor/media/containers/media.new.js b/animism-align/frontend/app/views/editor/media/containers/media.new.js
index 0a1be55..7c378e0 100644
--- a/animism-align/frontend/app/views/editor/media/containers/media.new.js
+++ b/animism-align/frontend/app/views/editor/media/containers/media.new.js
@@ -63,6 +63,7 @@ class MediaNew extends Component {
<MediaForm
isNew
data={this.state.initialData}
+ episode_id={this.props.episode_id}
currentUser={this.props.currentUser}
onSubmit={this.handleSubmit.bind(this)}
/>
diff --git a/animism-align/frontend/app/views/editor/media/media.css b/animism-align/frontend/app/views/editor/media/media.css
index ebf8c33..eb977fd 100644
--- a/animism-align/frontend/app/views/editor/media/media.css
+++ b/animism-align/frontend/app/views/editor/media/media.css
@@ -17,7 +17,8 @@
max-width: 100%;
}
.media .results .img img {
- max-width: 295px;
+ max-width: 150px;
+ max-height: 150px;
}
/* new / edit media forms */