creation of playlist

This commit is contained in:
grimhilt 2023-07-29 23:25:03 +02:00
parent 874b04bef0
commit 52513c10df
6 changed files with 149 additions and 42 deletions

2
.gitignore vendored
View File

@ -1 +1,3 @@
data data
__pycache__
*.db

32
src/api/__init__.py Normal file
View File

@ -0,0 +1,32 @@
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_cors import CORS
from os import path
import logging
db = SQLAlchemy()
DB_NAME = 'database.db'
def create_api():
app = Flask(__name__)
CORS(app)
logging.getLogger('flask_cors').level = logging.DEBUG
#CORS(app, resources={r"/*": {"origin": ["http://localhost:3008"]}})
app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{DB_NAME}'
db.init_app(app)
from .abl.user import user
from .abl.playlist import playlist
app.register_blueprint(user, url_prefix='/api/user')
app.register_blueprint(playlist, url_prefix='/api/playlist')
from .models import User, Playlist, PlaylistFile, File
with app.app_context():
db.create_all()
return app

58
src/api/abl/playlist.py Normal file
View File

@ -0,0 +1,58 @@
from flask import Blueprint, request, Response, jsonify
from flask_cors import cross_origin
from ..models import Playlist, PlaylistFile
from .. import db
from datetime import datetime
from sqlalchemy.sql import func
playlist = Blueprint('playlist', __name__)
@playlist.route('/', methods=['PUT'])
def create():
data = request.get_json()
new_playlist = Playlist(name=data['name'])
db.session.add(new_playlist)
db.session.flush()
db.session.commit()
print(new_playlist.as_dict())
return Response(
response=new_playlist.as_dict(),
status=200,
mimetype="application/json"
)
@playlist.route('/', methods=["GET"])
def list():
playlists = db.session.query(Playlist).all()
res = []
for playlist in playlists:
p = playlist.as_dict()
p['last_modified'] = p['last_modified'].isoformat()
res.append(p)
return jsonify(res)
@playlist.route('/<int:playlist_id>', methods=["GET"])
def get_playlist(playlist_id):
query = db.session.query(\
Playlist.name,\
func.group_concat(PlaylistFile.id).label('files')\
).\
join(PlaylistFile, Playlist.id == PlaylistFile.playlist_id).\
filter(Playlist.id == playlist_id).\
group_by(Playlist.id).\
all()
query = db.session.query( \
Playlist.name, \
func.group_concat(Playlist.id == PlaylistFile.playlist_id) \
) \
.outerjoin(PlaylistFile, Playlist.id == PlaylistFile.playlist_id) \
.filter(Playlist.id == playlist_id) \
.group_by(Playlist.id) \
.first()
return jsonify({'name': query[0], 'files': query[1]})

22
src/api/abl/user.py Normal file
View File

@ -0,0 +1,22 @@
from flask import Blueprint, request
from ..models import User
from werkzeug.security import generate_password_hash, check_password_hash
user = Blueprint('user', __name__)
@user.route('create', methods=['PUT'])
def create():
print(request.get_json())
return "ok"
generate_password_hash("i", method='sha256')
db.session.add(new_user)
db.session.commit()
return "ok"
@user.route('delete', methods=['DELETE'])
def delete():
return "ok"
@user.route('list', methods=['GET'])
def list():
return "ok"

30
src/api/models.py Normal file
View File

@ -0,0 +1,30 @@
from . import db
from flask_login import UserMixin
from sqlalchemy.sql import func
class PlaylistFile(db.Model):
id = db.Column(db.Integer, primary_key = True)
playlist_id = db.Column(db.Integer, db.ForeignKey('playlist.id'))
# file_id = db.Column(db.Integer, db.ForeignKey('file.id'))
class File(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(150))
type = db.Column(db.String(15))
class Playlist(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(150))
last_modified = db.Column(db.DateTime(timezone=True), default=func.now())
read_permissions = db.Column(db.Integer, default=0)
write_permissions = db.Column(db.Integer, default=0)
execute_permissions = db.Column(db.Integer, default=0)
files = db.relationship('PlaylistFile')
def as_dict(self):
return {c.name: getattr(self, c.name) for c in self.__table__.columns}
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key = True)
login = db.Column(db.String(150))
password = db.Column(db.String(150))

View File

@ -1,47 +1,10 @@
import tkinter as tk from api import create_api
from PIL import ImageTk, Image
import os
import time
class SlideshowApp:
def __init__(self, root, image_paths): api = create_api()
self.root = root
self.paths = image_paths
self.idx = 0
self.image_label = tk.Label(root) if __name__ == '__main__':
self.image_label.pack() api.run(host="0.0.0.0", port=5500, debug=True)
self.image_label.pack(fill=tk.BOTH, expand=True)
self.show_next_image()
def show_next_image(self):
img_path = self.paths[self.idx]
image = Image.open(img_path)
# Get root window width and height
screen_width = self.root.winfo_width()
screen_height = self.root.winfo_height()
# Resize the image to fit the screen
image = image.resize((screen_width, screen_height), Image.ANTIALIAS)
photo = ImageTk.PhotoImage(image)
self.image_label.config(image=photo)
self.image_label.image = photo
self.idx = (self.idx + 1) % len(self.paths)
self.root.after(2000, self.show_next_image)
def main():
root = tk.Tk()
root.title("Image Slideshow")
img_paths = ["./data/960x0-1053101061.jpg", "./data/my-linux-desktop-1131547615.png", "./data/glzrkk83f4621-1200x671-54057802.jpg", "./data/yjdoiycuw04lvrebijtw-605729284.jpg"]
app = SlideshowApp(root, img_paths)
root.mainloop()
if __name__ == "__main__":
main()