BinaryONe commited on
Commit
68a2a86
·
1 Parent(s): c7b5125

API Updates

Browse files
FileStream/DBFiles/___init__.py ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+
2
+ from .database import PUBLICFilesDB
3
+ from FileStream.config import Telegram
4
+
5
+ DB_Controller = PUBLICFilesDB(Telegram.DATABASE_URL, Telegram.SESSION_NAME)
6
+
7
+
FileStream/DBFiles/database.py ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import re
2
+ import time
3
+ import pymongo
4
+ import motor.motor_asyncio
5
+ from bson.objectid import ObjectId
6
+ from bson.errors import InvalidId
7
+ from bson.json_util import dumps
8
+
9
+ from pymongo.errors import PyMongoError
10
+
11
+ class PUBLICFilesDB:
12
+ def __init__(self, uri, database_name):
13
+ self._client = motor.motor_asyncio.AsyncIOMotorClient(uri)
14
+ self.db = self._client[database_name]
15
+ self.files = self.db.Public_Files
16
+
17
+ async def GetMoviesAllBy10(self, offset=None):
18
+ try:
19
+ filter = {"type": "Movie"} # Define the filter for movies
20
+ total_results = await self.files.count_documents(filter)
21
+ offset=int( offset if offset else 0)
22
+ next_offset = offset + 10
23
+ if next_offset >= total_results: # Changed > to >= to handle the last page correctly
24
+ next_offset = ''
25
+ cursor = self.files.find(filter) # Apply the filter
26
+ cursor.sort('$natural', pymongo.DESCENDING) # Use pymongo.DESCENDING
27
+ cursor.skip(offset).limit(10)
28
+ files = await cursor.to_list(length=10)
29
+ return files, next_offset
30
+
31
+ except PyMongoError as e:
32
+ print(f"MongoDB error: {e}")
33
+ return [], '' # Return empty list and '' on error
34
+ except Exception as e:
35
+ print(f"An unexpected error occurred: {e}")
36
+ return [], ''
37
+
FileStream/server/API/__init__.py CHANGED
@@ -2,17 +2,10 @@ import aiohttp_cors
2
  from aiohttp import web
3
 
4
  #---------------------- Local Imports --------------------#
5
- #from .listings import (
6
- # list_all_files_db,
7
- # list_all_files,
8
- # list_all_files_tmdb,
9
- # list_10_all_files_db,
10
- # list_all_tmdb_tv_from_db,
11
- # list_all_tmdb_movies_from_db,
12
- #)
13
  from .downloads import stream_handler
14
  from .uploads import upload_file
15
- from .search import searchAll
 
16
 
17
 
18
  #-----------------------------Functions------------------------#
@@ -32,22 +25,21 @@ cors = aiohttp_cors.setup(api, defaults={"*": aiohttp_cors.ResourceOptions(
32
  allow_methods="*"
33
  )})
34
 
35
- cors.add(api.router.add_get('/', handle_v2))
36
-
37
-
38
- #serch PI
39
- api.router.add_get('/search', searchAll)
40
- #Movies
41
- #Webseries
42
- #trending
43
- #detils
44
 
 
45
  #api.router.add_get('/files', list_all_files_db)
46
  #api.router.add_get('/files/mix', list_all_files)
47
  #api.router.add_get('/tmdb/mix', list_all_files_tmdb)
48
  #api.router.add_get('/10/files', list_10_all_files_db)
49
  #api.router.add_get('/tmdb/tv', list_all_tmdb_tv_from_db)
50
  #api.router.add_get('/tmdb/movies', list_all_tmdb_movies_from_db)
 
51
 
52
  api.router.add_get('/upload', upload_file)
53
  api.router.add_get('/dl/{path}', stream_handler)
 
2
  from aiohttp import web
3
 
4
  #---------------------- Local Imports --------------------#
 
 
 
 
 
 
 
 
5
  from .downloads import stream_handler
6
  from .uploads import upload_file
7
+ from .search import SearchAll
8
+ from .listings import AllMovies10
9
 
10
 
11
  #-----------------------------Functions------------------------#
 
25
  allow_methods="*"
26
  )})
27
 
28
+ cors.add(api.router.add_get('/', handle_v2)) #Basic Reponse
29
+ api.router.add_get('/search', SearchAll) #serch API
30
+ api.router.add_get('/movies', AllMovies10) #Movies
31
+ #api.router.add_get('/series', AllSeries10) #Webseries
32
+ #api.router.add_get('/trending', Leatest10) #trending
33
+ #api.router.add_get('/details', Details) #details
 
 
 
34
 
35
+ #----------------------------------------------------------------
36
  #api.router.add_get('/files', list_all_files_db)
37
  #api.router.add_get('/files/mix', list_all_files)
38
  #api.router.add_get('/tmdb/mix', list_all_files_tmdb)
39
  #api.router.add_get('/10/files', list_10_all_files_db)
40
  #api.router.add_get('/tmdb/tv', list_all_tmdb_tv_from_db)
41
  #api.router.add_get('/tmdb/movies', list_all_tmdb_movies_from_db)
42
+ #-----------------------------------------------------------------
43
 
44
  api.router.add_get('/upload', upload_file)
45
  api.router.add_get('/dl/{path}', stream_handler)
FileStream/server/API/listings.py CHANGED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import json
3
+ import logging
4
+ import asyncio
5
+ import traceback
6
+ from aiohttp import web
7
+ from pyrogram import raw
8
+ from aiohttp.http_exceptions import BadStatusLine
9
+
10
+ from FileStream.utils.FileProcessors.human_readable import humanbytes
11
+ from FileStream.config import Telegram, Server
12
+
13
+ from FileStream.DBFiles import PUBLICFilesDB
14
+
15
+ db = PUBLICFilesDB(Telegram.DATABASE_URL, Telegram.SESSION_NAME)
16
+
17
+ async def AllMovies10(request: web.Request):
18
+ offset = request.rel_url.query.get('offset', 0)
19
+ results=[]
20
+ files, next_offset = await db.get_search_results(offset=offset)
21
+ for file in files:
22
+ results.append({
23
+ "poster":file['poster'],
24
+ "title":file['title'],
25
+ "release_date":file['release_date'],
26
+ "genre":file['genre'],
27
+ "imdb_id":file['IMDB_id'],
28
+ "type":file['type'],
29
+ "file_name": file['file']['file_name'],
30
+ "document_file_id": file['file']['file_id'],
31
+ "caption": file['file']['file_name'] or "",
32
+ "description": f"Size: {humanbytes(file['file']['file_size'])}\nType: {file['file']['mime_type']}",
33
+ })
34
+ return web.json_response({"count": len(results), "results": results, "next_offset": next_offset}) # Correct JSON response format
35
+
36
+
37
+
38
+
39
+
40
+
41
+
FileStream/server/API/search.py CHANGED
@@ -15,24 +15,25 @@ from FileStream.Database import Database
15
  from FileStream.config import Telegram, Server
16
  db = Database(Telegram.DATABASE_URL, Telegram.SESSION_NAME)
17
 
18
- async def searchAll(request: web.Request):
19
- query = request.rel_url.query.get('query', '') # Extract 'query' from URL params
20
- offset = request.rel_url.query.get('offset', '0') # Extract 'offset' (default 0)
21
-
22
- print(query, offset) # Debugging print
23
-
24
  results = []
25
- offset = int(offset) # Convert offset to integer
26
-
27
  # Simulating a database function call (replace with actual implementation)
28
  files, next_offset = await db.get_search_results(query, file_type=None, max_results=10, offset=offset)
29
-
30
  for file in files:
31
  results.append({
32
- "title": file['file']['file_name'],
33
- "document_file_id": file['file']['file_id'],
34
- "caption": file['file']['file_name'] or "",
35
- "description": f"Size: {humanbytes(file['file']['file_size'])}\nType: {file['file']['mime_type']}",
 
 
 
 
 
 
36
  })
37
 
38
- return web.json_response({"results": results, "next_offset": next_offset}) # Correct JSON response format
 
15
  from FileStream.config import Telegram, Server
16
  db = Database(Telegram.DATABASE_URL, Telegram.SESSION_NAME)
17
 
18
+ async def SearchAll(request: web.Request):
19
+ query = request.rel_url.query.get('query', '') # Extract 'query' from URL params
20
+ #print(query, offset) # Debugging print
 
 
 
21
  results = []
22
+ offset = int(request.rel_url.query.get('offset') if request.rel_url.query.get('offset') else 0 ) # Convert offset to integer
 
23
  # Simulating a database function call (replace with actual implementation)
24
  files, next_offset = await db.get_search_results(query, file_type=None, max_results=10, offset=offset)
 
25
  for file in files:
26
  results.append({
27
+ "poster":file['poster'],
28
+ "title":file['title'],
29
+ "release_date":file['release_date'],
30
+ "genre":file['genre'],
31
+ "imdb_id":file['IMDB_id'],
32
+ "type":file['type'],
33
+ "file_name": file['file']['file_name'],
34
+ "document_file_id": file['file']['file_id'],
35
+ "caption": file['file']['file_name'] or "",
36
+ "description": f"Size: {humanbytes(file['file']['file_size'])}\nType: {file['file']['mime_type']}",
37
  })
38
 
39
+ return web.json_response({"count": len(results), "results": results, "next_offset": next_offset}) # Correct JSON response format