creation of playlist
This commit is contained in:
parent
874b04bef0
commit
52513c10df
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1,3 @@
|
||||
data
|
||||
__pycache__
|
||||
*.db
|
||||
|
32
src/api/__init__.py
Normal file
32
src/api/__init__.py
Normal 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
58
src/api/abl/playlist.py
Normal 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
22
src/api/abl/user.py
Normal 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
30
src/api/models.py
Normal 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))
|
45
src/index.py
45
src/index.py
@ -1,47 +1,10 @@
|
||||
import tkinter as tk
|
||||
from PIL import ImageTk, Image
|
||||
import os
|
||||
import time
|
||||
from api import create_api
|
||||
|
||||
|
||||
class SlideshowApp:
|
||||
def __init__(self, root, image_paths):
|
||||
self.root = root
|
||||
self.paths = image_paths
|
||||
self.idx = 0
|
||||
|
||||
self.image_label = tk.Label(root)
|
||||
self.image_label.pack()
|
||||
self.image_label.pack(fill=tk.BOTH, expand=True)
|
||||
api = create_api()
|
||||
|
||||
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")
|
||||
if __name__ == '__main__':
|
||||
api.run(host="0.0.0.0", port=5500, debug=True)
|
||||
|
||||
|
||||
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()
|
||||
|
Loading…
Reference in New Issue
Block a user