mirror of
https://github.com/Tzahi12345/YoutubeDL-Material.git
synced 2026-04-15 13:21:27 +03:00
Added ability to filter for only audio and only video files in the home page
This commit is contained in:
@@ -1072,6 +1072,7 @@ app.post('/api/getAllFiles', optionalJwt, async function (req, res) {
|
|||||||
let sort = req.body.sort;
|
let sort = req.body.sort;
|
||||||
let range = req.body.range;
|
let range = req.body.range;
|
||||||
let text_search = req.body.text_search;
|
let text_search = req.body.text_search;
|
||||||
|
let file_type_filter = req.body.file_type_filter;
|
||||||
const uuid = req.isAuthenticated() ? req.user.uid : null;
|
const uuid = req.isAuthenticated() ? req.user.uid : null;
|
||||||
|
|
||||||
const filter_obj = {user_uid: uuid};
|
const filter_obj = {user_uid: uuid};
|
||||||
@@ -1084,6 +1085,9 @@ app.post('/api/getAllFiles', optionalJwt, async function (req, res) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (file_type_filter === 'audio_only') filter_obj['isAudio'] = true;
|
||||||
|
else if (file_type_filter === 'video_only') filter_obj['isAudio'] = false;
|
||||||
|
|
||||||
files = await db_api.getRecords('files', filter_obj, false, sort, range, text_search);
|
files = await db_api.getRecords('files', filter_obj, false, sort, range, text_search);
|
||||||
let file_count = await db_api.getRecords('files', filter_obj, true);
|
let file_count = await db_api.getRecords('files', filter_obj, true);
|
||||||
playlists = await db_api.getRecords('playlists', {user_uid: uuid});
|
playlists = await db_api.getRecords('playlists', {user_uid: uuid});
|
||||||
|
|||||||
@@ -46,8 +46,20 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<mat-paginator class="paginator" #paginator *ngIf="paged_data && paged_data.length > 0" (page)="pageChangeEvent($event)" [length]="file_count"
|
<div>
|
||||||
[pageSize]="pageSize"
|
<div style="position: absolute; margin-left: -8px; margin-top: 5px; scale: 0.8">
|
||||||
[pageSizeOptions]="[5, 10, 25, 100, this.paged_data && this.paged_data.length > 100 ? this.paged_data.length : 250]">
|
<mat-form-field>
|
||||||
</mat-paginator>
|
<mat-label><ng-container i18n="File type">File type</ng-container></mat-label>
|
||||||
|
<mat-select color="accent" [(ngModel)]="fileTypeFilter" (selectionChange)="fileTypeFilterChanged($event.value)">
|
||||||
|
<mat-option value="both"><ng-container i18n="Both">Both</ng-container></mat-option>
|
||||||
|
<mat-option value="video_only"><ng-container i18n="Video only">Video only</ng-container></mat-option>
|
||||||
|
<mat-option value="audio_only"><ng-container i18n="Audio only">Audio only</ng-container></mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
<mat-paginator class="paginator" #paginator *ngIf="paged_data && paged_data.length > 0" (page)="pageChangeEvent($event)" [length]="file_count"
|
||||||
|
[pageSize]="pageSize"
|
||||||
|
[pageSizeOptions]="[5, 10, 25, 100, this.paged_data && this.paged_data.length > 100 ? this.paged_data.length : 250]">
|
||||||
|
</mat-paginator>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -52,6 +52,7 @@ export class RecentVideosComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
filterProperty = this.filterProperties['upload_date'];
|
filterProperty = this.filterProperties['upload_date'];
|
||||||
|
fileTypeFilter = 'both';
|
||||||
|
|
||||||
playlists = null;
|
playlists = null;
|
||||||
|
|
||||||
@@ -94,12 +95,18 @@ export class RecentVideosComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// set filter property to cached
|
// set filter property to cached value
|
||||||
const cached_filter_property = localStorage.getItem('filter_property');
|
const cached_filter_property = localStorage.getItem('filter_property');
|
||||||
if (cached_filter_property && this.filterProperties[cached_filter_property]) {
|
if (cached_filter_property && this.filterProperties[cached_filter_property]) {
|
||||||
this.filterProperty = this.filterProperties[cached_filter_property];
|
this.filterProperty = this.filterProperties[cached_filter_property];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set file type filter to cached value
|
||||||
|
const cached_file_type_filter = localStorage.getItem('file_type_filter');
|
||||||
|
if (cached_file_type_filter) {
|
||||||
|
this.fileTypeFilter = cached_file_type_filter;
|
||||||
|
}
|
||||||
|
|
||||||
this.searchChangedSubject
|
this.searchChangedSubject
|
||||||
.debounceTime(500)
|
.debounceTime(500)
|
||||||
.pipe(distinctUntilChanged()
|
.pipe(distinctUntilChanged()
|
||||||
@@ -131,6 +138,11 @@ export class RecentVideosComponent implements OnInit {
|
|||||||
this.getAllFiles();
|
this.getAllFiles();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fileTypeFilterChanged(value) {
|
||||||
|
localStorage.setItem('file_type_filter', value);
|
||||||
|
this.getAllFiles();
|
||||||
|
}
|
||||||
|
|
||||||
toggleModeChange() {
|
toggleModeChange() {
|
||||||
this.descendingMode = !this.descendingMode;
|
this.descendingMode = !this.descendingMode;
|
||||||
this.getAllFiles();
|
this.getAllFiles();
|
||||||
@@ -143,7 +155,7 @@ export class RecentVideosComponent implements OnInit {
|
|||||||
const current_file_index = (this.paginator?.pageIndex ? this.paginator.pageIndex : 0)*this.pageSize;
|
const current_file_index = (this.paginator?.pageIndex ? this.paginator.pageIndex : 0)*this.pageSize;
|
||||||
const sort = {by: this.filterProperty['property'], order: this.descendingMode ? -1 : 1};
|
const sort = {by: this.filterProperty['property'], order: this.descendingMode ? -1 : 1};
|
||||||
const range = [current_file_index, current_file_index + this.pageSize];
|
const range = [current_file_index, current_file_index + this.pageSize];
|
||||||
this.postsService.getAllFiles(sort, range, this.search_mode ? this.search_text : null).subscribe(res => {
|
this.postsService.getAllFiles(sort, range, this.search_mode ? this.search_text : null, this.fileTypeFilter).subscribe(res => {
|
||||||
this.file_count = res['file_count'];
|
this.file_count = res['file_count'];
|
||||||
this.paged_data = res['files'];
|
this.paged_data = res['files'];
|
||||||
for (let i = 0; i < this.paged_data.length; i++) {
|
for (let i = 0; i < this.paged_data.length; i++) {
|
||||||
|
|||||||
@@ -238,8 +238,8 @@ export class PostsService implements CanActivate {
|
|||||||
return this.http.post(this.path + 'getFile', {uid: uid, type: type, uuid: uuid}, this.httpOptions);
|
return this.http.post(this.path + 'getFile', {uid: uid, type: type, uuid: uuid}, this.httpOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
getAllFiles(sort, range, text_search) {
|
getAllFiles(sort, range, text_search, file_type_filter) {
|
||||||
return this.http.post(this.path + 'getAllFiles', {sort: sort, range: range, text_search: text_search}, this.httpOptions);
|
return this.http.post(this.path + 'getAllFiles', {sort: sort, range: range, text_search: text_search, file_type_filter: file_type_filter}, this.httpOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
getFullTwitchChat(id, type, uuid = null, sub = null) {
|
getFullTwitchChat(id, type, uuid = null, sub = null) {
|
||||||
|
|||||||
Reference in New Issue
Block a user