Skip to content

Commit 189cebe

Browse files
ILoveScratch2Da3zKi7KirCuteSuyunmengj2rong4cn
authored
feat(drivers): add MediaFire driver support (#1322)
* feat(drivers): add MediaFire driver support (#9319) - Implement complete MediaFire storage driver - Add authentication via session_token and cookie - Support all core operations: List, Get, Link, Put, Copy, Move, Remove, Rename, MakeDir - Include thumbnail generation for media files - Handle MediaFire's resumable upload API with multi-unit transfers - Add proper error handling and progress reporting Co-authored-by: Da3zKi7 <[email protected]> * fix(mediafire): fix code errors in mediafire * fix(mediafire): fix code errors in mediafire * fix(drivers): add session renewal cron for MediaFire driver (#9321) - Implement automatic session token renewal every 6-9 minutes - Add validation for required SessionToken and Cookie fields in Init - Handle session expiration by calling renewToken on validation failure - Prevent storage failures due to MediaFire session timeouts Fixes session closure issues that occur after server restarts or extended periods. Co-authored-by: Da3zKi7 <[email protected]> * docs: restore README changes Signed-off-by: ILoveScratch <[email protected]> * fix * fix * fix: add stream upload limit * fix * fix: clear action token on drop and refactor header setting * feat(drivers/mediafire): optimize file caching - support direct stream processing - Remove forced caching to *os.File type - Support generic model.File interface for better flexibility - Improve upload efficiency by avoiding unnecessary file conversions - Fix return type to use model.Object instead of model.ObjThumb * feat(drivers/mediafire): improve global rate limiting - Ensure all API methods properly use context for rate limiting - Fix context parameter usage in getDirectDownloadLink, getActionToken, getFileByHash - Maintain consistent rate limiting across all MediaFire API calls * feat(drivers/mediafire): unify return types - remove unnecessary ObjThumb - Change MakeDir, Rename, Copy methods to return model.Object instead of model.ObjThumb - Remove empty Thumbnail fields where not meaningful - Keep ObjThumb only for fileToObj (List operations) which provides actual thumbnail URLs - Improve code consistency and reduce unnecessary wrapper objects * refactor(drivers/mediafire): extract common error handling logic - Add checkAPIResult helper function to reduce code duplication - Replace repetitive MediaFire API error checks with centralized function - Maintain specific error messages for unique cases (token, upload, search) - Improve code maintainability and consistency * enhance(drivers/mediafire): improve quick upload implementation - Add null check for existingFile to prevent potential issues - Improve error handling in quick upload - continue normal upload if search fails - Add detailed comments explaining quick upload logic - Optimize getExistingFileInfo with clearer fallback strategy - Ensure upload reliability even when file search encounters issues * refactor(drivers/mediafire): optimize request method reusability - Extract common HTTP request logic into apiRequest method - Reduce code duplication between getForm and postForm methods - Maintain backward compatibility with existing method signatures - Centralize rate limiting and header management - Support extensible HTTP method handling * docs(drivers/mediafire): add comprehensive English comments - Add function-level comments for all major driver methods - Document Init, List, Link, MakeDir, Move, Rename, Copy, Remove, Put methods - Add comments for key utility functions including session token management - Improve code readability and maintainability for community collaboration - Follow Go documentation conventions with clear, concise descriptions * perf(mediafire): optimize memory allocation and type assertion performance - Pre-allocate slice capacity in getFiles and bitmap conversion to reduce reallocations - Cache file type check in uploadUnits to avoid repeated type assertions - Add uploadSingleUnitOptimized for os.File to eliminate redundant type checks - Optimize string to int conversion with proper error handling - Improve memory efficiency in file upload operations * fix(mediafire): upload without cache * feat(mediafire): add rate limiting to all API methods - Add WaitLimit(ctx) calls to all driver methods: List, Link, MakeDir, Move, Rename, Copy, Remove, Put - Ensure consistent rate limiting across all MediaFire API interactions - Follow project standard pattern used by other drivers * feat(mediafire): improve error handling consistency - Add context parameter to all HTTP API functions for proper context propagation - Update getForm, postForm and apiRequest to accept context parameter - Fix rate limiting to use caller context instead of background context - Ensure consistent error handling patterns across all API calls - Improve cancellation and timeout support * feat(mediafire): refactor resumableUpload to use io.ReadSeeker and improve upload handling * fix(mediafire): release section reader * feat: add disk usage * feat(drivers/mediafire): support concurrent upload (#1387) * feat(drivers): add MediaFire driver with concurrent upload support - Implement complete MediaFire storage driver with session token authentication - Support all core operations: List, Get, Link, Put, Copy, Move, Remove, Rename, MakeDir - Include thumbnail generation for media files - Handle MediaFire's resumable upload with intelligent and multi-unit transfers - Support concurrent chunk uploads using errgroup.NewOrderedGroupWithContext, using splitted file caching for large files - Optimize memory usage with adaptive buffer sizing (10MB-100MB (default)) - Include rate limiting and retry logic for API requests - Add proper error handling and progress reporting - Handle MediaFire's bitmap-based resumable upload protocol Closes PR #1322 * feat(stream): add DiscardSection method to StreamSectionReader for skipping data * feat(mediafire): refactor resumableUpload logic for improved upload handling and error management * fix(mediafire): stop cron job and clear action token in Drop method * . * fix(mediafire): optimize buffer sizing logic in uploadUnits method * fix(docs): remove duplicate MediaFire * fix(mediafire): revert 'optimization', large files should not be fully chached. --------- Signed-off-by: j2rong4cn <[email protected]> Co-authored-by: Da3zKi7 <[email protected]> Co-authored-by: D@' 3z K!7 <[email protected]> Co-authored-by: j2rong4cn <[email protected]> Co-authored-by: j2rong4cn <[email protected]> * fix(mediafire): optimize hash calculation in uploadUnits function * feat(drivers/mediafire): support concurrent upload (#1366) * feat(drivers): add MediaFire driver with concurrent upload support - Implement complete MediaFire storage driver with session token authentication - Support all core operations: List, Get, Link, Put, Copy, Move, Remove, Rename, MakeDir - Include thumbnail generation for media files - Handle MediaFire's resumable upload with intelligent and multi-unit transfers - Support concurrent chunk uploads using errgroup.NewOrderedGroupWithContext, using splitted file caching for large files - Optimize memory usage with adaptive buffer sizing (10MB-100MB (default)) - Include rate limiting and retry logic for API requests - Add proper error handling and progress reporting - Handle MediaFire's bitmap-based resumable upload protocol Closes PR #1322 * feat(stream): add DiscardSection method to StreamSectionReader for skipping data * feat(mediafire): refactor resumableUpload logic for improved upload handling and error management * fix(mediafire): stop cron job and clear action token in Drop method * . * fix(mediafire): optimize buffer sizing logic in uploadUnits method * fix(docs): remove duplicate MediaFire * fix(mediafire): revert 'optimization', large files should not be fully chached. --------- Signed-off-by: j2rong4cn <[email protected]> Signed-off-by: D@' 3z K!7 <[email protected]> Co-authored-by: j2rong4cn <[email protected]> Co-authored-by: j2rong4cn <[email protected]> --------- Signed-off-by: ILoveScratch <[email protected]> Signed-off-by: j2rong4cn <[email protected]> Signed-off-by: D@' 3z K!7 <[email protected]> Co-authored-by: D@' 3z K!7 <[email protected]> Co-authored-by: Da3zKi7 <[email protected]> Co-authored-by: KirCute <[email protected]> Co-authored-by: Suyunmeng <[email protected]> Co-authored-by: j2rong4cn <[email protected]> Co-authored-by: j2rong4cn <[email protected]>
1 parent 9d3da44 commit 189cebe

File tree

10 files changed

+1488
-1
lines changed

10 files changed

+1488
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ Thank you for your support and understanding of the OpenList project.
6565
- [x] [WebDAV](https://en.wikipedia.org/wiki/WebDAV)
6666
- [x] Teambition([China](https://www.teambition.com), [International](https://us.teambition.com))
6767
- [x] [Mediatrack](https://www.mediatrack.cn)
68+
- [x] [MediaFire](https://www.mediafire.com)
6869
- [x] [139yun](https://yun.139.com) (Personal, Family, Group)
6970
- [x] [YandexDisk](https://disk.yandex.com)
7071
- [x] [BaiduNetdisk](http://pan.baidu.com)
@@ -93,7 +94,6 @@ Thank you for your support and understanding of the OpenList project.
9394
- [x] [OpenList](https://github.com/OpenListTeam/OpenList)
9495
- [x] [Teldrive](https://github.com/tgdrive/teldrive)
9596
- [x] [Weiyun](https://www.weiyun.com)
96-
9797
- [x] Easy to deploy and out-of-the-box
9898
- [x] File preview (PDF, markdown, code, plain text, ...)
9999
- [x] Image preview in gallery mode

README_cn.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ OpenList 是一个由 OpenList 团队独立维护的开源项目,遵循 AGPL-3
6565
- [x] [WebDAV](https://en.wikipedia.org/wiki/WebDAV)
6666
- [x] Teambition([中国](https://www.teambition.com), [国际](https://us.teambition.com))
6767
- [x] [分秒帧](https://www.mediatrack.cn)
68+
- [x] [MediaFire](https://www.mediafire.com)
6869
- [x] [和彩云](https://yun.139.com)(个人、家庭、群组)
6970
- [x] [YandexDisk](https://disk.yandex.com)
7071
- [x] [百度网盘](http://pan.baidu.com)

README_ja.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ OpenListプロジェクトへのご支援とご理解をありがとうござい
9393
- [x] [OpenList](https://github.com/OpenListTeam/OpenList)
9494
- [x] [Teldrive](https://github.com/tgdrive/teldrive)
9595
- [x] [Weiyun](https://www.weiyun.com)
96+
- [x] [MediaFire](https://www.mediafire.com)
9697
- [x] 簡単にデプロイでき、すぐに使える
9798
- [x] ファイルプレビュー(PDF、markdown、コード、テキストなど)
9899
- [x] ギャラリーモードでの画像プレビュー

README_nl.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ Dank u voor uw ondersteuning en begrip
6464
- [x] [UPYUN Storage Service](https://www.upyun.com/products/file-storage)
6565
- [x] [WebDAV](https://en.wikipedia.org/wiki/WebDAV)
6666
- [x] Teambition([China](https://www.teambition.com), [Internationaal](https://us.teambition.com))
67+
- [x] [MediaFire](https://www.mediafire.com)
6768
- [x] [Mediatrack](https://www.mediatrack.cn)
6869
- [x] [139yun](https://yun.139.com) (Persoonlijk, Familie, Groep)
6970
- [x] [YandexDisk](https://disk.yandex.com)

drivers/all.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import (
4242
_ "github.com/OpenListTeam/OpenList/v4/drivers/lanzou"
4343
_ "github.com/OpenListTeam/OpenList/v4/drivers/lenovonas_share"
4444
_ "github.com/OpenListTeam/OpenList/v4/drivers/local"
45+
_ "github.com/OpenListTeam/OpenList/v4/drivers/mediafire"
4546
_ "github.com/OpenListTeam/OpenList/v4/drivers/mediatrack"
4647
_ "github.com/OpenListTeam/OpenList/v4/drivers/mega"
4748
_ "github.com/OpenListTeam/OpenList/v4/drivers/misskey"

0 commit comments

Comments
 (0)