├── .github
└── ISSUE_TEMPLATE
│ ├── bug_report.yml
│ ├── config.yml
│ └── feature_request.yml
├── .gitignore
├── LICENSE
├── README.md
├── Version_update_log.md
├── analysis_options.yaml
├── android
├── .gitignore
├── app
│ ├── .gitignore
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── kotlin
│ │ │ └── com
│ │ │ │ └── example
│ │ │ │ └── horopic
│ │ │ │ └── MainActivity.kt
│ │ └── res
│ │ │ ├── drawable-v21
│ │ │ └── launch_background.xml
│ │ │ ├── drawable
│ │ │ └── launch_background.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── app_icon.png
│ │ │ ├── favicon.jpg
│ │ │ ├── favicon.png
│ │ │ ├── ic_launcher.png
│ │ │ ├── launch_image.png
│ │ │ └── launch_pic.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── app_icon.png
│ │ │ ├── favicon.png
│ │ │ ├── ic_launcher.png
│ │ │ ├── launch_image.png
│ │ │ └── launch_pic.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── app_icon.png
│ │ │ ├── favicon.png
│ │ │ ├── ic_launcher.png
│ │ │ ├── launch_image.png
│ │ │ └── launch_pic.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── app_icon.png
│ │ │ ├── favicon.png
│ │ │ ├── ic_launcher.png
│ │ │ ├── launch_image.png
│ │ │ └── launch_pic.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── app_icon.png
│ │ │ ├── favicon.png
│ │ │ ├── ic_launcher.png
│ │ │ ├── launch_image.png
│ │ │ └── launch_pic.png
│ │ │ ├── values-night
│ │ │ └── styles.xml
│ │ │ └── values
│ │ │ └── styles.xml
│ │ └── profile
│ │ └── AndroidManifest.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
└── settings.gradle
├── assets
├── app_icon.png
├── app_icon_large.png
├── files
│ └── UpdateLog.md
├── fonts
│ └── iconfont.ttf
├── icons
│ ├── 3g2.png
│ ├── 3gp.png
│ ├── 7z.png
│ ├── Imgur.png
│ ├── _blank.png
│ ├── _page.png
│ ├── aac.png
│ ├── accdb.png
│ ├── adt.png
│ ├── ai.png
│ ├── aiff.png
│ ├── aliyun.png
│ ├── aly.png
│ ├── amiga.png
│ ├── amr.png
│ ├── ape.png
│ ├── apk.png
│ ├── arj.png
│ ├── asf.png
│ ├── asm.png
│ ├── asx.png
│ ├── au.png
│ ├── avc.png
│ ├── avi.png
│ ├── avs.png
│ ├── bak.png
│ ├── bas.png
│ ├── bat.png
│ ├── bmp.png
│ ├── bom.png
│ ├── c.png
│ ├── cda.png
│ ├── cdr.png
│ ├── chm.png
│ ├── class.png
│ ├── cmd.png
│ ├── com.png
│ ├── cpp.png
│ ├── css.png
│ ├── csv.png
│ ├── dart.png
│ ├── dat.png
│ ├── ddb.png
│ ├── dif.png
│ ├── divx.png
│ ├── dll.png
│ ├── dmg.png
│ ├── doc.png
│ ├── docm.png
│ ├── docx.png
│ ├── dot.png
│ ├── dotm.png
│ ├── dotx.png
│ ├── dsl.png
│ ├── dv.png
│ ├── dvd.png
│ ├── dvdaudio.png
│ ├── dwg.png
│ ├── dxf.png
│ ├── emf.png
│ ├── env.png
│ ├── eot.png
│ ├── eps.png
│ ├── exe.png
│ ├── exif.png
│ ├── fakesmms.png
│ ├── flc.png
│ ├── fli.png
│ ├── flv.png
│ ├── folder.png
│ ├── fon.png
│ ├── font.png
│ ├── for.png
│ ├── fpx.png
│ ├── fv.png
│ ├── gif.png
│ ├── github.png
│ ├── gitingore.png
│ ├── gitkeep.png
│ ├── gz.png
│ ├── h.png
│ ├── hdri.png
│ ├── hlp.png
│ ├── hpp.png
│ ├── htm.png
│ ├── html.png
│ ├── ico.png
│ ├── ics.png
│ ├── int.png
│ ├── ipynb.png
│ ├── iso.png
│ ├── java.png
│ ├── jpeg.png
│ ├── jpg.png
│ ├── js.png
│ ├── json.png
│ ├── key.png
│ ├── ksp.png
│ ├── lankong.png
│ ├── less.png
│ ├── lib.png
│ ├── lic.png
│ ├── license.png
│ ├── log.png
│ ├── lskypro.png
│ ├── lst.png
│ ├── lua.png
│ ├── mac.png
│ ├── map.png
│ ├── markdown.png
│ ├── md.png
│ ├── mdf.png
│ ├── mht.png
│ ├── mhtml.png
│ ├── mid.png
│ ├── midi.png
│ ├── mkv.png
│ ├── mmf.png
│ ├── mod.png
│ ├── mov.png
│ ├── mp2.png
│ ├── mp3.png
│ ├── mp4.png
│ ├── mpa.png
│ ├── mpe.png
│ ├── mpeg.png
│ ├── mpeg1.png
│ ├── mpeg2.png
│ ├── mpg.png
│ ├── mppro.png
│ ├── msg.png
│ ├── mts.png
│ ├── mux.png
│ ├── mv.png
│ ├── navi.png
│ ├── obj.png
│ ├── odf.png
│ ├── ods.png
│ ├── odt.png
│ ├── ogg.png
│ ├── one.png
│ ├── otf.png
│ ├── otp.png
│ ├── ots.png
│ ├── ott.png
│ ├── pas.png
│ ├── pcd.png
│ ├── pcx.png
│ ├── pdf.png
│ ├── php.png
│ ├── pic.png
│ ├── png.png
│ ├── ppt.png
│ ├── pptx.png
│ ├── proe.png
│ ├── prt.png
│ ├── psd.png
│ ├── py.png
│ ├── pyc.png
│ ├── qiniu.png
│ ├── qsv.png
│ ├── qt.png
│ ├── quicktime.png
│ ├── ra.png
│ ├── ram.png
│ ├── rar.png
│ ├── raw.png
│ ├── rb.png
│ ├── realaudio.png
│ ├── rm.png
│ ├── rmvb.png
│ ├── rp.png
│ ├── rtf.png
│ ├── s48.png
│ ├── sacd.png
│ ├── sass.png
│ ├── sch.png
│ ├── scss.png
│ ├── sh.png
│ ├── smms.png
│ ├── sql.png
│ ├── stp.png
│ ├── svcd.png
│ ├── svg.png
│ ├── swf.png
│ ├── sys.png
│ ├── tcyun.png
│ ├── tga.png
│ ├── tgz.png
│ ├── tiff.png
│ ├── tmp.png
│ ├── ts.png
│ ├── ttc.png
│ ├── ttf.png
│ ├── txt.png
│ ├── ufo.png
│ ├── unknown.png
│ ├── upyun.png
│ ├── vcd.png
│ ├── vob.png
│ ├── voc.png
│ ├── vqf.png
│ ├── vue.png
│ ├── wav.png
│ ├── wdl.png
│ ├── webm.png
│ ├── webp.png
│ ├── wki.png
│ ├── wma.png
│ ├── wmf.png
│ ├── wmv.png
│ ├── wmvhd.png
│ ├── woff.png
│ ├── woff2.png
│ ├── wps.png
│ ├── wpt.png
│ ├── x_t.png
│ ├── xls.png
│ ├── xlsm.png
│ ├── xlsx.png
│ ├── xlt.png
│ ├── xltm.png
│ ├── xltx.png
│ ├── xmind.png
│ ├── xml.png
│ ├── xv.png
│ ├── xvid.png
│ ├── yaml.png
│ ├── yml.png
│ ├── z.png
│ └── zip.png
├── images
│ ├── alist.png
│ ├── aws_s3.png
│ ├── empty.png
│ ├── emptydir.png
│ ├── ftp.png
│ ├── ftp_back.png
│ ├── githubrepo.png
│ └── webdav.png
├── launch_pic.png
├── menubar.png
├── roundLogo.png
└── validateImage
│ └── PicHoroValidate.jpeg
├── ios
└── Flutter
│ └── flutter_export_environment.sh
├── lib
├── album
│ ├── action_button.dart
│ ├── album_page.dart
│ ├── album_sql.dart
│ ├── empty_database.dart
│ └── network_pic_preview.dart
├── api
│ ├── alist_api.dart
│ ├── aliyun_api.dart
│ ├── api.dart
│ ├── aws_api.dart
│ ├── ftp_api.dart
│ ├── github_api.dart
│ ├── imgur_api.dart
│ ├── lskypro_api.dart
│ ├── qiniu_api.dart
│ ├── smms_api.dart
│ ├── tencent_api.dart
│ ├── upyun_api.dart
│ └── webdav_api.dart
├── configure_page
│ ├── common_configure
│ │ ├── common_configure.dart
│ │ ├── compress_configure.dart
│ │ ├── picture_host_import_qr.dart
│ │ ├── rename_uploaded_file.dart
│ │ ├── select_default_picture_host.dart
│ │ └── select_link_format.dart
│ ├── configure_page.dart
│ ├── logger
│ │ └── logs.dart
│ └── others
│ │ ├── author.dart
│ │ ├── select_theme.dart
│ │ ├── theme_data.dart
│ │ └── update_log.dart
├── main.dart
├── pages
│ ├── home_page.dart
│ ├── pichoro_app.dart
│ └── upload_helper
│ │ ├── home_page_uploadlist.dart
│ │ ├── upload_request.dart
│ │ ├── upload_status.dart
│ │ ├── upload_task.dart
│ │ └── upload_utils.dart
├── picture_host_configure
│ ├── configure_page
│ │ ├── alist_configure.dart
│ │ ├── aliyun_configure.dart
│ │ ├── aws_configure.dart
│ │ ├── configure_export.dart
│ │ ├── ftp_configure.dart
│ │ ├── github_configure.dart
│ │ ├── imgur_configure.dart
│ │ ├── lskypro_configure.dart
│ │ ├── qiniu_configure.dart
│ │ ├── smms_configure.dart
│ │ ├── tencent_configure.dart
│ │ ├── upyun_configure.dart
│ │ └── webdav_configure.dart
│ ├── configure_store
│ │ ├── configure_store_edit_page
│ │ │ ├── alist_configure_store_edit.dart
│ │ │ ├── aliyun_configure_store_edit.dart
│ │ │ ├── aws_configure_store_edit.dart
│ │ │ ├── configure_store_edit_export.dart
│ │ │ ├── ftp_configure_store_edit.dart
│ │ │ ├── github_configure_store_edit.dart
│ │ │ ├── imgur_configure_store_edit.dart
│ │ │ ├── lskypro_configure_store_edit.dart
│ │ │ ├── qiniu_configure_store_edit.dart
│ │ │ ├── smms_configure_store_edit.dart
│ │ │ ├── tencent_configure_store_edit.dart
│ │ │ ├── upyun_configure_store_edit.dart
│ │ │ └── webdav_configure_store_edit.dart
│ │ ├── configure_store_file.dart
│ │ ├── configure_store_page.dart
│ │ └── configure_template.dart
│ └── default_picture_host_select.dart
├── picture_host_manage
│ ├── alist
│ │ ├── alist_bucket_information_page.dart
│ │ ├── alist_bucket_list_page.dart
│ │ ├── alist_file_explorer.dart
│ │ └── alist_file_information_page.dart
│ ├── aliyun
│ │ ├── aliyun_bucket_information_page.dart
│ │ ├── aliyun_bucket_list_page.dart
│ │ ├── aliyun_file_explorer.dart
│ │ ├── aliyun_file_information_page.dart
│ │ └── aliyun_new_bucket_configure.dart
│ ├── aws
│ │ ├── aws_bucket_list_page.dart
│ │ ├── aws_file_explorer.dart
│ │ ├── aws_file_information_page.dart
│ │ └── aws_new_bucket_configure.dart
│ ├── common
│ │ ├── base_file_explorer_page.dart
│ │ ├── base_manage_api.dart
│ │ ├── base_up_down_load_manage_page.dart
│ │ ├── build_bottom_widget.dart
│ │ ├── common_widget.dart
│ │ ├── download
│ │ │ ├── common_service
│ │ │ │ ├── base_download_manager.dart
│ │ │ │ ├── base_download_request.dart
│ │ │ │ ├── base_download_status.dart
│ │ │ │ └── base_download_task.dart
│ │ │ └── managers
│ │ │ │ ├── alist_download_manager.dart
│ │ │ │ ├── aliyun_download_manager.dart
│ │ │ │ ├── aws_download_manager.dart
│ │ │ │ ├── github_download_manager.dart
│ │ │ │ ├── imgur_download_manager.dart
│ │ │ │ ├── lskypro_download_manager.dart
│ │ │ │ ├── qiniu_download_manager.dart
│ │ │ │ ├── sftp_download_manager.dart
│ │ │ │ ├── smms_download_manager.dart
│ │ │ │ ├── tencent_downloade_manager.dart
│ │ │ │ ├── upyun_download_manager.dart
│ │ │ │ └── webdav_download_manager.dart
│ │ ├── file_explorer
│ │ │ ├── local_file_explorer.dart
│ │ │ ├── local_image_preview.dart
│ │ │ ├── md_preview.dart
│ │ │ └── pdf_viewer.dart
│ │ ├── file_list_widget.dart
│ │ ├── info_page_utils.dart
│ │ ├── loading_state.dart
│ │ ├── new_folder_widgets.dart
│ │ ├── rename_dialog_widgets.dart
│ │ └── upload
│ │ │ ├── common_service
│ │ │ ├── base_upload_manager.dart
│ │ │ ├── base_upload_request.dart
│ │ │ └── base_upload_task.dart
│ │ │ └── managers
│ │ │ ├── alist_upload_manager.dart
│ │ │ ├── aliyun_upload_manager.dart
│ │ │ ├── aws_upload_manager.dart
│ │ │ ├── github_upload_manager.dart
│ │ │ ├── imgur_upload_manager.dart
│ │ │ ├── lskypro_upload_manager.dart
│ │ │ ├── qiniu_upload_manager.dart
│ │ │ ├── sftp_upload_manager.dart
│ │ │ ├── smms_upload_manager.dart
│ │ │ ├── tencent_upload_manager.dart
│ │ │ ├── upyun_upload_manager.dart
│ │ │ └── webdav_upload_manager.dart
│ ├── ftp
│ │ ├── sftp_file_explorer.dart
│ │ ├── sftp_file_information_page.dart
│ │ └── sftp_local_image_preview.dart
│ ├── github
│ │ ├── github_file_explorer.dart
│ │ ├── github_file_information_page.dart
│ │ ├── github_manage_home_page.dart
│ │ ├── github_new_repo_configure.dart
│ │ ├── github_repo_information_page.dart
│ │ └── github_repos_list_page.dart
│ ├── imgur
│ │ ├── imgur_file_explorer.dart
│ │ ├── imgur_file_information_page.dart
│ │ ├── imgur_login.dart
│ │ └── imgur_token_manage_page.dart
│ ├── lskypro
│ │ ├── lskypro_file_explorer.dart
│ │ ├── lskypro_file_information_page.dart
│ │ └── lskypro_manage_home_page.dart
│ ├── manage_api
│ │ ├── alist_manage_api.dart
│ │ ├── aliyun_manage_api.dart
│ │ ├── aws_manage_api.dart
│ │ ├── ftp_manage_api.dart
│ │ ├── github_manage_api.dart
│ │ ├── imgur_manage_api.dart
│ │ ├── lskypro_manage_api.dart
│ │ ├── qiniu_manage_api.dart
│ │ ├── smms_manage_api.dart
│ │ ├── tencent_manage_api.dart
│ │ ├── upyun_manage_api.dart
│ │ └── webdav_manage_api.dart
│ ├── picture_host_manage_entry.dart
│ ├── qiniu
│ │ ├── qiniu_bucket_domain_area_set.dart
│ │ ├── qiniu_bucket_list_page.dart
│ │ ├── qiniu_file_explorer.dart
│ │ ├── qiniu_file_information_page.dart
│ │ └── qiniu_new_bucket_configure.dart
│ ├── smms
│ │ ├── smms_file_explorer.dart
│ │ ├── smms_file_information_page.dart
│ │ └── smms_manage_home_page.dart
│ ├── tencent
│ │ ├── tencent_bucket_information_page.dart
│ │ ├── tencent_bucket_list_page.dart
│ │ ├── tencent_file_explorer.dart
│ │ ├── tencent_file_information_page.dart
│ │ └── tencent_new_bucket_configure.dart
│ ├── upyun
│ │ ├── upyun_bucket_information_page.dart
│ │ ├── upyun_bucket_list_page.dart
│ │ ├── upyun_file_explorer.dart
│ │ ├── upyun_file_information_page.dart
│ │ ├── upyun_login.dart
│ │ ├── upyun_new_bucket_configure.dart
│ │ └── upyun_token_manage_page.dart
│ └── webdav
│ │ ├── webdav_file_explorer.dart
│ │ ├── webdav_file_information_page.dart
│ │ └── webdav_pic_preview.dart
├── router
│ ├── application.dart
│ ├── router_handler.dart
│ └── routers.dart
├── utils
│ ├── analytics_service.dart
│ ├── clear_cache.dart
│ ├── common_functions.dart
│ ├── deleter.dart
│ ├── dio_proxy_adapter.dart
│ ├── event_bus_utils.dart
│ ├── global.dart
│ ├── image_compressor.dart
│ ├── permission.dart
│ ├── picbed
│ │ └── upyun.dart
│ ├── system_font_provider.dart
│ ├── theme_provider.dart
│ └── uploader.dart
└── widgets
│ ├── common_widgets.dart
│ ├── configure_widgets.dart
│ ├── custom_speed_dial.dart
│ ├── load_state_change.dart
│ ├── net_loading_dialog.dart
│ └── web_view.dart
├── pubspec.lock
├── pubspec.yaml
├── supported_format.md
└── version.json
/.github/ISSUE_TEMPLATE/bug_report.yml:
--------------------------------------------------------------------------------
1 | name: " Bug Report"
2 | description: 提交一个问题
3 | title: "[Bug]: "
4 | labels: ["bug"]
5 | assignees:
6 | - Kuingsmile
7 | labels:
8 | - bug
9 | body:
10 | - type: markdown
11 | attributes:
12 | value: |+
13 | ## PicHoro Bug Report 模板
14 |
15 | 请依照该模板来提交,否则将会被关闭。
16 |
17 | - type: input
18 | id: version
19 | attributes:
20 | label: PicHoro的版本
21 | placeholder: 例如 V1.8.3
22 | validations:
23 | required: true
24 | - type: input
25 | id: platform
26 | attributes:
27 | label: 系统信息
28 | placeholder: 例如 ViVo X60 Pro
29 | validations:
30 | required: true
31 | - type: textarea
32 | id: reproduce
33 | attributes:
34 | label: 问题重现 | Bug reproduce
35 | description: 请复述Bug重现流程
36 | validations:
37 | required: true
38 | - type: textarea
39 | id: log
40 | attributes:
41 | label: 相关日志 | Logs
42 | description: 请附上 PicHoro 的相关报错日志(用文本的形式)。报错日志可以在 PicHoro 设置 -> 软件日志 后右上角导出到剪贴板和本地文件。
43 | - type: markdown
44 | attributes:
45 | value: |
46 | 最后,喜欢 PicHoro 的话不妨给它点个 star~
47 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.yml:
--------------------------------------------------------------------------------
1 | name: "Feature Request"
2 | description: 功能请求
3 | title: "[Feature]: "
4 | labels: ["feature request"]
5 | assignees:
6 | - Kuingsmile
7 | labels:
8 | - enhancement
9 | body:
10 | - type: markdown
11 | attributes:
12 | value: |+
13 | ## PicHoro Feature 模板
14 |
15 | 请依照该模板来提交,否则将会被关闭。
16 |
17 | - type: input
18 | id: version
19 | attributes:
20 | label: PicHoro的版本
21 | placeholder: 例如 V1.8.3
22 | validations:
23 | required: true
24 | - type: input
25 | id: platform
26 | attributes:
27 | label: 系统信息
28 | placeholder: 例如 ViVo X60 Pro
29 | validations:
30 | required: true
31 | - type: textarea
32 | id: reproduce
33 | attributes:
34 | label: 功能请求
35 | description: 详细描述你所预想的功能或者是现有功能的改进
36 | validations:
37 | required: true
38 | - type: markdown
39 | attributes:
40 | value: |
41 | 最后,喜欢 PicHoro 的话不妨给它点个 star~
42 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.log
4 | *.pyc
5 | *.swp
6 | .DS_Store
7 | .atom/
8 | .buildlog/
9 | .history
10 | .svn/
11 | migrate_working_dir/
12 |
13 | # IntelliJ related
14 | *.iml
15 | *.ipr
16 | *.iws
17 | .idea/
18 |
19 | # The .vscode folder contains launch configuration and tasks you configure in
20 | # VS Code which you may wish to be included in version control, so this line
21 | # is commented out by default.
22 | #.vscode/
23 |
24 | # Flutter/Dart/Pub related
25 | **/doc/api/
26 | **/ios/Flutter/.last_build_id
27 | .dart_tool/
28 | .flutter-plugins
29 | .flutter-plugins-dependencies
30 | .packages
31 | .pub-cache/
32 | .pub/
33 | /build/
34 |
35 | # Symbolication related
36 | app.*.symbols
37 |
38 | # Obfuscation related
39 | app.*.map.json
40 |
41 | # Android Studio will place build artifacts here
42 | /android/app/debug
43 | /android/app/profile
44 | /android/app/release
45 | # Android related
46 | **/android/**/gradle-wrapper.jar
47 | **/android/.gradle
48 | **/android/captures/
49 | **/android/gradlew
50 | **/android/gradlew.bat
51 | **/android/local.properties
52 | **/android/**/GeneratedPluginRegistrant.java
53 | **/android/key.properties
54 | *.jks
55 |
56 | # 针对flutter当做module集成进现有项目时,.android目录下的文件
57 | **/.android/**/gradle-wrapper.jar
58 | **/.android/.gradle
59 | **/.android/captures/
60 | **/.android/gradlew
61 | **/.android/gradlew.bat
62 | **/.android/local.properties
63 | **/.android/**/GeneratedPluginRegistrant.java
64 | **/.android/key.properties
65 |
66 |
67 | # iOS/XCode related
68 | **/ios/**/*.mode1v3
69 | **/ios/**/*.mode2v3
70 | **/ios/**/*.moved-aside
71 | **/ios/**/*.pbxuser
72 | **/ios/**/*.perspectivev3
73 | **/ios/**/*sync/
74 | **/ios/**/.sconsign.dblite
75 | **/ios/**/.tags*
76 | **/ios/**/.vagrant/
77 | **/ios/**/DerivedData/
78 | **/ios/**/Icon?
79 | **/ios/**/Pods/
80 | **/ios/**/.symlinks/
81 | **/ios/**/profile
82 | **/ios/**/xcuserdata
83 | **/ios/.generated/
84 | **/ios/Flutter/App.framework
85 | **/ios/Flutter/Flutter.framework
86 | **/ios/Flutter/Generated.xcconfig
87 | **/ios/Flutter/app.flx
88 | **/ios/Flutter/app.zip
89 | **/ios/Flutter/flutter_assets/
90 | **/ios/ServiceDefinitions.json
91 | **/ios/Runner/GeneratedPluginRegistrant.*
92 |
93 | # 针对flutter当做module集成进现有项目时,.ios目录下的文件
94 | **/.ios/**/*.mode1v3
95 | **/.ios/**/*.mode2v3
96 | **/.ios/**/*.moved-aside
97 | **/.ios/**/*.pbxuser
98 | **/.ios/**/*.perspectivev3
99 | **/.ios/**/*sync/
100 | **/.ios/**/.sconsign.dblite
101 | **/.ios/**/.tags*
102 | **/.ios/**/.vagrant/
103 | **/.ios/**/DerivedData/
104 | **/.ios/**/Icon?
105 | **/.ios/**/Pods/
106 | **/.ios/**/.symlinks/
107 | **/.ios/**/profile
108 | **/.ios/**/xcuserdata
109 | **/.ios/.generated/
110 | **/.ios/Flutter/App.framework
111 | **/.ios/Flutter/Flutter.framework
112 | **/.ios/Flutter/Generated.xcconfig
113 | **/.ios/Flutter/app.flx
114 | **/.ios/Flutter/app.zip
115 | **/.ios/Flutter/flutter_assets/
116 | **/.ios/ServiceDefinitions.json
117 | **/.ios/Runner/GeneratedPluginRegistrant.*
118 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022-present, Kuingsmile
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | # This file configures the analyzer, which statically analyzes Dart code to
2 | # check for errors, warnings, and lints.
3 | #
4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled
5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
6 | # invoked from the command line by running `flutter analyze`.
7 |
8 | # The following line activates a set of recommended lints for Flutter apps,
9 | # packages, and plugins designed to encourage good coding practices.
10 | include: package:flutter_lints/flutter.yaml
11 |
12 | linter:
13 | # The lint rules applied to this project can be customized in the
14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml`
15 | # included above or to enable additional rules. A list of all available lints
16 | # and their documentation is published at
17 | # https://dart-lang.github.io/linter/lints/index.html.
18 | #
19 | # Instead of disabling a lint rule for the entire project in the
20 | # section below, it can also be suppressed for a single line of code
21 | # or a specific dart file by using the `// ignore: name_of_lint` and
22 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file
23 | # producing the lint.
24 | rules:
25 | # avoid_print: false # Uncomment to disable the `avoid_print` rule
26 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
27 |
28 | # Additional information about this file can be found at
29 | # https://dart.dev/guides/language/analysis-options
30 |
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
9 | # Remember to never publicly share your keystore.
10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
11 | key.properties
12 | **/*.keystore
13 | **/*.jks
14 | key.jks
--------------------------------------------------------------------------------
/android/app/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
9 | # Remember to never publicly share your keystore.
10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
11 | key.properties
12 | **/*.keystore
13 | **/*.jks
14 |
--------------------------------------------------------------------------------
/android/app/build.gradle:
--------------------------------------------------------------------------------
1 | plugins {
2 | id "com.android.application"
3 | id "kotlin-android"
4 | id "dev.flutter.flutter-gradle-plugin"
5 | }
6 |
7 | def localProperties = new Properties()
8 | def localPropertiesFile = rootProject.file('local.properties')
9 | if (localPropertiesFile.exists()) {
10 | localPropertiesFile.withReader('UTF-8') { reader ->
11 | localProperties.load(reader)
12 | }
13 | }
14 |
15 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
16 | if (flutterVersionCode == null) {
17 | flutterVersionCode = '1'
18 | }
19 |
20 | def flutterVersionName = localProperties.getProperty('flutter.versionName')
21 | if (flutterVersionName == null) {
22 | flutterVersionName = '1.0'
23 | }
24 |
25 | def keystorePropertiesFile = rootProject.file("key.properties")
26 | def keystoreProperties = new Properties()
27 | keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
28 |
29 | android {
30 | //compileSdkVersion flutter.compileSdkVersion
31 | namespace "com.example.horopic"
32 | compileSdkVersion 35
33 | //ndkVersion flutter.ndkVersion
34 | ndkVersion "27.0.12077973"
35 |
36 | compileOptions {
37 | sourceCompatibility JavaVersion.VERSION_21
38 | targetCompatibility JavaVersion.VERSION_21
39 | }
40 |
41 | kotlinOptions {
42 | jvmTarget = '21'
43 | }
44 |
45 | sourceSets {
46 | main.java.srcDirs += 'src/main/kotlin'
47 | }
48 |
49 | defaultConfig {
50 | applicationId "com.example.horopic"
51 | // You can update the following values to match your application needs.
52 | // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
53 | minSdkVersion 24
54 | targetSdkVersion flutter.targetSdkVersion
55 | versionCode flutterVersionCode.toInteger()
56 | versionName flutterVersionName
57 | multiDexEnabled true
58 | }
59 |
60 | signingConfigs {
61 | release {
62 | keyAlias keystoreProperties['keyAlias']
63 | keyPassword keystoreProperties['keyPassword']
64 | storeFile file(keystoreProperties['storeFile'])
65 | storePassword keystoreProperties['storePassword']
66 | }
67 | }
68 | buildTypes {
69 | release {
70 | signingConfig signingConfigs.release
71 |
72 | minifyEnabled false
73 | shrinkResources false
74 |
75 | // proguard文件是混淆
76 | // proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
77 | }
78 | }
79 | }
80 |
81 | flutter {
82 | source '../..'
83 | }
84 |
85 | dependencies {
86 | implementation 'com.android.support:multidex:1.0.3'
87 | }
88 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/example/horopic/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.example.horopic
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | -
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | -
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/app_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-hdpi/app_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/favicon.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-hdpi/favicon.jpg
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-hdpi/favicon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/launch_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-hdpi/launch_image.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/launch_pic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-hdpi/launch_pic.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/app_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-mdpi/app_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-mdpi/favicon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/launch_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-mdpi/launch_image.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/launch_pic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-mdpi/launch_pic.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/app_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-xhdpi/app_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-xhdpi/favicon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/launch_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-xhdpi/launch_image.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/launch_pic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-xhdpi/launch_pic.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/app_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-xxhdpi/app_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-xxhdpi/favicon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/launch_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-xxhdpi/launch_image.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/launch_pic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-xxhdpi/launch_pic.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/app_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-xxxhdpi/app_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-xxxhdpi/favicon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/launch_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-xxxhdpi/launch_image.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/launch_pic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/android/app/src/main/res/mipmap-xxxhdpi/launch_pic.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values-night/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | allprojects {
2 | gradle.projectsEvaluated {
3 | tasks.withType(JavaCompile) {
4 | options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
5 | }
6 | }
7 |
8 | repositories {
9 | google()
10 | mavenCentral()
11 | jcenter()
12 | //maven { url 'https://maven.aliyun.com/repository/google' }
13 | //maven { url 'https://maven.aliyun.com/repository/jcenter' }
14 | // maven { url 'https://maven.aliyun.com/nexus/content/groups/public' }
15 | }
16 |
17 | subprojects {
18 | afterEvaluate { project ->
19 | if (project.hasProperty('android')) {
20 | project.android {
21 | if (namespace == null) {
22 | namespace project.group
23 | }
24 | }
25 | }
26 | if (project.plugins.hasPlugin("com.android.application") || project.plugins.hasPlugin("com.android.library")) {
27 | tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { kotlinTask ->
28 | def sourceCompatibility = project.android.compileOptions.sourceCompatibility?.toString() ?: "1.8"
29 | def jvmTarget = kotlinTask.kotlinOptions.jvmTarget ?: ""
30 | if (sourceCompatibility != jvmTarget) {
31 | kotlinTask.kotlinOptions.jvmTarget = sourceCompatibility
32 | println "INFO: Updated jvmTarget for ${project.name} to ${sourceCompatibility}"
33 | }
34 | }
35 | }
36 | }
37 | }
38 | // 修复由于高版本导致namespace检测为空的问题,没遇到可不添加
39 |
40 | }
41 |
42 | rootProject.buildDir = '../build'
43 | subprojects {
44 | project.buildDir = "${rootProject.buildDir}/${project.name}"
45 | }
46 | subprojects {
47 | project.evaluationDependsOn(':app')
48 | }
49 |
50 | tasks.register("clean", Delete) {
51 | delete rootProject.buildDir
52 | }
53 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx4608m
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Fri Aug 25 01:27:53 PDT 2023
2 | distributionBase=GRADLE_USER_HOME
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip
4 | distributionPath=wrapper/dists
5 | zipStorePath=wrapper/dists
6 | zipStoreBase=GRADLE_USER_HOME
7 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | def flutterSdkPath = {
3 | def properties = new Properties()
4 | file("local.properties").withInputStream { properties.load(it) }
5 | def flutterSdkPath = properties.getProperty("flutter.sdk")
6 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
7 | return flutterSdkPath
8 | }()
9 |
10 | includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
11 |
12 | repositories {
13 | google()
14 | mavenCentral()
15 | gradlePluginPortal()
16 | }
17 | }
18 |
19 | plugins {
20 | id "dev.flutter.flutter-plugin-loader" version "1.0.0"
21 | id "com.android.application" version "8.8.0" apply false
22 | id "org.jetbrains.kotlin.android" version "2.1.0" apply false
23 | id "com.google.protobuf" version "0.9.1" apply false
24 | }
25 |
26 | include ":app"
--------------------------------------------------------------------------------
/assets/app_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/app_icon.png
--------------------------------------------------------------------------------
/assets/app_icon_large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/app_icon_large.png
--------------------------------------------------------------------------------
/assets/fonts/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/fonts/iconfont.ttf
--------------------------------------------------------------------------------
/assets/icons/3g2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/3g2.png
--------------------------------------------------------------------------------
/assets/icons/3gp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/3gp.png
--------------------------------------------------------------------------------
/assets/icons/7z.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/7z.png
--------------------------------------------------------------------------------
/assets/icons/Imgur.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/Imgur.png
--------------------------------------------------------------------------------
/assets/icons/_blank.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/_blank.png
--------------------------------------------------------------------------------
/assets/icons/_page.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/_page.png
--------------------------------------------------------------------------------
/assets/icons/aac.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/aac.png
--------------------------------------------------------------------------------
/assets/icons/accdb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/accdb.png
--------------------------------------------------------------------------------
/assets/icons/adt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/adt.png
--------------------------------------------------------------------------------
/assets/icons/ai.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/ai.png
--------------------------------------------------------------------------------
/assets/icons/aiff.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/aiff.png
--------------------------------------------------------------------------------
/assets/icons/aliyun.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/aliyun.png
--------------------------------------------------------------------------------
/assets/icons/aly.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/aly.png
--------------------------------------------------------------------------------
/assets/icons/amiga.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/amiga.png
--------------------------------------------------------------------------------
/assets/icons/amr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/amr.png
--------------------------------------------------------------------------------
/assets/icons/ape.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/ape.png
--------------------------------------------------------------------------------
/assets/icons/apk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/apk.png
--------------------------------------------------------------------------------
/assets/icons/arj.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/arj.png
--------------------------------------------------------------------------------
/assets/icons/asf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/asf.png
--------------------------------------------------------------------------------
/assets/icons/asm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/asm.png
--------------------------------------------------------------------------------
/assets/icons/asx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/asx.png
--------------------------------------------------------------------------------
/assets/icons/au.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/au.png
--------------------------------------------------------------------------------
/assets/icons/avc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/avc.png
--------------------------------------------------------------------------------
/assets/icons/avi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/avi.png
--------------------------------------------------------------------------------
/assets/icons/avs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/avs.png
--------------------------------------------------------------------------------
/assets/icons/bak.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/bak.png
--------------------------------------------------------------------------------
/assets/icons/bas.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/bas.png
--------------------------------------------------------------------------------
/assets/icons/bat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/bat.png
--------------------------------------------------------------------------------
/assets/icons/bmp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/bmp.png
--------------------------------------------------------------------------------
/assets/icons/bom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/bom.png
--------------------------------------------------------------------------------
/assets/icons/c.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/c.png
--------------------------------------------------------------------------------
/assets/icons/cda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/cda.png
--------------------------------------------------------------------------------
/assets/icons/cdr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/cdr.png
--------------------------------------------------------------------------------
/assets/icons/chm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/chm.png
--------------------------------------------------------------------------------
/assets/icons/class.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/class.png
--------------------------------------------------------------------------------
/assets/icons/cmd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/cmd.png
--------------------------------------------------------------------------------
/assets/icons/com.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/com.png
--------------------------------------------------------------------------------
/assets/icons/cpp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/cpp.png
--------------------------------------------------------------------------------
/assets/icons/css.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/css.png
--------------------------------------------------------------------------------
/assets/icons/csv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/csv.png
--------------------------------------------------------------------------------
/assets/icons/dart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/dart.png
--------------------------------------------------------------------------------
/assets/icons/dat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/dat.png
--------------------------------------------------------------------------------
/assets/icons/ddb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/ddb.png
--------------------------------------------------------------------------------
/assets/icons/dif.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/dif.png
--------------------------------------------------------------------------------
/assets/icons/divx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/divx.png
--------------------------------------------------------------------------------
/assets/icons/dll.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/dll.png
--------------------------------------------------------------------------------
/assets/icons/dmg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/dmg.png
--------------------------------------------------------------------------------
/assets/icons/doc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/doc.png
--------------------------------------------------------------------------------
/assets/icons/docm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/docm.png
--------------------------------------------------------------------------------
/assets/icons/docx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/docx.png
--------------------------------------------------------------------------------
/assets/icons/dot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/dot.png
--------------------------------------------------------------------------------
/assets/icons/dotm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/dotm.png
--------------------------------------------------------------------------------
/assets/icons/dotx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/dotx.png
--------------------------------------------------------------------------------
/assets/icons/dsl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/dsl.png
--------------------------------------------------------------------------------
/assets/icons/dv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/dv.png
--------------------------------------------------------------------------------
/assets/icons/dvd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/dvd.png
--------------------------------------------------------------------------------
/assets/icons/dvdaudio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/dvdaudio.png
--------------------------------------------------------------------------------
/assets/icons/dwg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/dwg.png
--------------------------------------------------------------------------------
/assets/icons/dxf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/dxf.png
--------------------------------------------------------------------------------
/assets/icons/emf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/emf.png
--------------------------------------------------------------------------------
/assets/icons/env.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/env.png
--------------------------------------------------------------------------------
/assets/icons/eot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/eot.png
--------------------------------------------------------------------------------
/assets/icons/eps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/eps.png
--------------------------------------------------------------------------------
/assets/icons/exe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/exe.png
--------------------------------------------------------------------------------
/assets/icons/exif.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/exif.png
--------------------------------------------------------------------------------
/assets/icons/fakesmms.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/fakesmms.png
--------------------------------------------------------------------------------
/assets/icons/flc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/flc.png
--------------------------------------------------------------------------------
/assets/icons/fli.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/fli.png
--------------------------------------------------------------------------------
/assets/icons/flv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/flv.png
--------------------------------------------------------------------------------
/assets/icons/folder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/folder.png
--------------------------------------------------------------------------------
/assets/icons/fon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/fon.png
--------------------------------------------------------------------------------
/assets/icons/font.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/font.png
--------------------------------------------------------------------------------
/assets/icons/for.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/for.png
--------------------------------------------------------------------------------
/assets/icons/fpx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/fpx.png
--------------------------------------------------------------------------------
/assets/icons/fv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/fv.png
--------------------------------------------------------------------------------
/assets/icons/gif.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/gif.png
--------------------------------------------------------------------------------
/assets/icons/github.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/github.png
--------------------------------------------------------------------------------
/assets/icons/gitingore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/gitingore.png
--------------------------------------------------------------------------------
/assets/icons/gitkeep.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/gitkeep.png
--------------------------------------------------------------------------------
/assets/icons/gz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/gz.png
--------------------------------------------------------------------------------
/assets/icons/h.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/h.png
--------------------------------------------------------------------------------
/assets/icons/hdri.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/hdri.png
--------------------------------------------------------------------------------
/assets/icons/hlp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/hlp.png
--------------------------------------------------------------------------------
/assets/icons/hpp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/hpp.png
--------------------------------------------------------------------------------
/assets/icons/htm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/htm.png
--------------------------------------------------------------------------------
/assets/icons/html.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/html.png
--------------------------------------------------------------------------------
/assets/icons/ico.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/ico.png
--------------------------------------------------------------------------------
/assets/icons/ics.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/ics.png
--------------------------------------------------------------------------------
/assets/icons/int.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/int.png
--------------------------------------------------------------------------------
/assets/icons/ipynb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/ipynb.png
--------------------------------------------------------------------------------
/assets/icons/iso.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/iso.png
--------------------------------------------------------------------------------
/assets/icons/java.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/java.png
--------------------------------------------------------------------------------
/assets/icons/jpeg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/jpeg.png
--------------------------------------------------------------------------------
/assets/icons/jpg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/jpg.png
--------------------------------------------------------------------------------
/assets/icons/js.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/js.png
--------------------------------------------------------------------------------
/assets/icons/json.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/json.png
--------------------------------------------------------------------------------
/assets/icons/key.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/key.png
--------------------------------------------------------------------------------
/assets/icons/ksp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/ksp.png
--------------------------------------------------------------------------------
/assets/icons/lankong.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/lankong.png
--------------------------------------------------------------------------------
/assets/icons/less.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/less.png
--------------------------------------------------------------------------------
/assets/icons/lib.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/lib.png
--------------------------------------------------------------------------------
/assets/icons/lic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/lic.png
--------------------------------------------------------------------------------
/assets/icons/license.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/license.png
--------------------------------------------------------------------------------
/assets/icons/log.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/log.png
--------------------------------------------------------------------------------
/assets/icons/lskypro.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/lskypro.png
--------------------------------------------------------------------------------
/assets/icons/lst.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/lst.png
--------------------------------------------------------------------------------
/assets/icons/lua.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/lua.png
--------------------------------------------------------------------------------
/assets/icons/mac.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/mac.png
--------------------------------------------------------------------------------
/assets/icons/map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/map.png
--------------------------------------------------------------------------------
/assets/icons/markdown.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/markdown.png
--------------------------------------------------------------------------------
/assets/icons/md.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/md.png
--------------------------------------------------------------------------------
/assets/icons/mdf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/mdf.png
--------------------------------------------------------------------------------
/assets/icons/mht.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/mht.png
--------------------------------------------------------------------------------
/assets/icons/mhtml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/mhtml.png
--------------------------------------------------------------------------------
/assets/icons/mid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/mid.png
--------------------------------------------------------------------------------
/assets/icons/midi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/midi.png
--------------------------------------------------------------------------------
/assets/icons/mkv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/mkv.png
--------------------------------------------------------------------------------
/assets/icons/mmf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/mmf.png
--------------------------------------------------------------------------------
/assets/icons/mod.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/mod.png
--------------------------------------------------------------------------------
/assets/icons/mov.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/mov.png
--------------------------------------------------------------------------------
/assets/icons/mp2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/mp2.png
--------------------------------------------------------------------------------
/assets/icons/mp3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/mp3.png
--------------------------------------------------------------------------------
/assets/icons/mp4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/mp4.png
--------------------------------------------------------------------------------
/assets/icons/mpa.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/mpa.png
--------------------------------------------------------------------------------
/assets/icons/mpe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/mpe.png
--------------------------------------------------------------------------------
/assets/icons/mpeg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/mpeg.png
--------------------------------------------------------------------------------
/assets/icons/mpeg1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/mpeg1.png
--------------------------------------------------------------------------------
/assets/icons/mpeg2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/mpeg2.png
--------------------------------------------------------------------------------
/assets/icons/mpg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/mpg.png
--------------------------------------------------------------------------------
/assets/icons/mppro.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/mppro.png
--------------------------------------------------------------------------------
/assets/icons/msg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/msg.png
--------------------------------------------------------------------------------
/assets/icons/mts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/mts.png
--------------------------------------------------------------------------------
/assets/icons/mux.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/mux.png
--------------------------------------------------------------------------------
/assets/icons/mv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/mv.png
--------------------------------------------------------------------------------
/assets/icons/navi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/navi.png
--------------------------------------------------------------------------------
/assets/icons/obj.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/obj.png
--------------------------------------------------------------------------------
/assets/icons/odf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/odf.png
--------------------------------------------------------------------------------
/assets/icons/ods.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/ods.png
--------------------------------------------------------------------------------
/assets/icons/odt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/odt.png
--------------------------------------------------------------------------------
/assets/icons/ogg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/ogg.png
--------------------------------------------------------------------------------
/assets/icons/one.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/one.png
--------------------------------------------------------------------------------
/assets/icons/otf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/otf.png
--------------------------------------------------------------------------------
/assets/icons/otp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/otp.png
--------------------------------------------------------------------------------
/assets/icons/ots.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/ots.png
--------------------------------------------------------------------------------
/assets/icons/ott.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/ott.png
--------------------------------------------------------------------------------
/assets/icons/pas.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/pas.png
--------------------------------------------------------------------------------
/assets/icons/pcd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/pcd.png
--------------------------------------------------------------------------------
/assets/icons/pcx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/pcx.png
--------------------------------------------------------------------------------
/assets/icons/pdf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/pdf.png
--------------------------------------------------------------------------------
/assets/icons/php.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/php.png
--------------------------------------------------------------------------------
/assets/icons/pic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/pic.png
--------------------------------------------------------------------------------
/assets/icons/png.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/png.png
--------------------------------------------------------------------------------
/assets/icons/ppt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/ppt.png
--------------------------------------------------------------------------------
/assets/icons/pptx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/pptx.png
--------------------------------------------------------------------------------
/assets/icons/proe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/proe.png
--------------------------------------------------------------------------------
/assets/icons/prt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/prt.png
--------------------------------------------------------------------------------
/assets/icons/psd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/psd.png
--------------------------------------------------------------------------------
/assets/icons/py.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/py.png
--------------------------------------------------------------------------------
/assets/icons/pyc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/pyc.png
--------------------------------------------------------------------------------
/assets/icons/qiniu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/qiniu.png
--------------------------------------------------------------------------------
/assets/icons/qsv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/qsv.png
--------------------------------------------------------------------------------
/assets/icons/qt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/qt.png
--------------------------------------------------------------------------------
/assets/icons/quicktime.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/quicktime.png
--------------------------------------------------------------------------------
/assets/icons/ra.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/ra.png
--------------------------------------------------------------------------------
/assets/icons/ram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/ram.png
--------------------------------------------------------------------------------
/assets/icons/rar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/rar.png
--------------------------------------------------------------------------------
/assets/icons/raw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/raw.png
--------------------------------------------------------------------------------
/assets/icons/rb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/rb.png
--------------------------------------------------------------------------------
/assets/icons/realaudio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/realaudio.png
--------------------------------------------------------------------------------
/assets/icons/rm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/rm.png
--------------------------------------------------------------------------------
/assets/icons/rmvb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/rmvb.png
--------------------------------------------------------------------------------
/assets/icons/rp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/rp.png
--------------------------------------------------------------------------------
/assets/icons/rtf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/rtf.png
--------------------------------------------------------------------------------
/assets/icons/s48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/s48.png
--------------------------------------------------------------------------------
/assets/icons/sacd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/sacd.png
--------------------------------------------------------------------------------
/assets/icons/sass.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/sass.png
--------------------------------------------------------------------------------
/assets/icons/sch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/sch.png
--------------------------------------------------------------------------------
/assets/icons/scss.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/scss.png
--------------------------------------------------------------------------------
/assets/icons/sh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/sh.png
--------------------------------------------------------------------------------
/assets/icons/smms.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/smms.png
--------------------------------------------------------------------------------
/assets/icons/sql.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/sql.png
--------------------------------------------------------------------------------
/assets/icons/stp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/stp.png
--------------------------------------------------------------------------------
/assets/icons/svcd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/svcd.png
--------------------------------------------------------------------------------
/assets/icons/svg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/svg.png
--------------------------------------------------------------------------------
/assets/icons/swf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/swf.png
--------------------------------------------------------------------------------
/assets/icons/sys.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/sys.png
--------------------------------------------------------------------------------
/assets/icons/tcyun.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/tcyun.png
--------------------------------------------------------------------------------
/assets/icons/tga.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/tga.png
--------------------------------------------------------------------------------
/assets/icons/tgz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/tgz.png
--------------------------------------------------------------------------------
/assets/icons/tiff.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/tiff.png
--------------------------------------------------------------------------------
/assets/icons/tmp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/tmp.png
--------------------------------------------------------------------------------
/assets/icons/ts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/ts.png
--------------------------------------------------------------------------------
/assets/icons/ttc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/ttc.png
--------------------------------------------------------------------------------
/assets/icons/ttf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/ttf.png
--------------------------------------------------------------------------------
/assets/icons/txt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/txt.png
--------------------------------------------------------------------------------
/assets/icons/ufo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/ufo.png
--------------------------------------------------------------------------------
/assets/icons/unknown.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/unknown.png
--------------------------------------------------------------------------------
/assets/icons/upyun.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/upyun.png
--------------------------------------------------------------------------------
/assets/icons/vcd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/vcd.png
--------------------------------------------------------------------------------
/assets/icons/vob.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/vob.png
--------------------------------------------------------------------------------
/assets/icons/voc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/voc.png
--------------------------------------------------------------------------------
/assets/icons/vqf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/vqf.png
--------------------------------------------------------------------------------
/assets/icons/vue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/vue.png
--------------------------------------------------------------------------------
/assets/icons/wav.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/wav.png
--------------------------------------------------------------------------------
/assets/icons/wdl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/wdl.png
--------------------------------------------------------------------------------
/assets/icons/webm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/webm.png
--------------------------------------------------------------------------------
/assets/icons/webp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/webp.png
--------------------------------------------------------------------------------
/assets/icons/wki.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/wki.png
--------------------------------------------------------------------------------
/assets/icons/wma.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/wma.png
--------------------------------------------------------------------------------
/assets/icons/wmf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/wmf.png
--------------------------------------------------------------------------------
/assets/icons/wmv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/wmv.png
--------------------------------------------------------------------------------
/assets/icons/wmvhd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/wmvhd.png
--------------------------------------------------------------------------------
/assets/icons/woff.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/woff.png
--------------------------------------------------------------------------------
/assets/icons/woff2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/woff2.png
--------------------------------------------------------------------------------
/assets/icons/wps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/wps.png
--------------------------------------------------------------------------------
/assets/icons/wpt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/wpt.png
--------------------------------------------------------------------------------
/assets/icons/x_t.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/x_t.png
--------------------------------------------------------------------------------
/assets/icons/xls.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/xls.png
--------------------------------------------------------------------------------
/assets/icons/xlsm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/xlsm.png
--------------------------------------------------------------------------------
/assets/icons/xlsx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/xlsx.png
--------------------------------------------------------------------------------
/assets/icons/xlt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/xlt.png
--------------------------------------------------------------------------------
/assets/icons/xltm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/xltm.png
--------------------------------------------------------------------------------
/assets/icons/xltx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/xltx.png
--------------------------------------------------------------------------------
/assets/icons/xmind.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/xmind.png
--------------------------------------------------------------------------------
/assets/icons/xml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/xml.png
--------------------------------------------------------------------------------
/assets/icons/xv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/xv.png
--------------------------------------------------------------------------------
/assets/icons/xvid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/xvid.png
--------------------------------------------------------------------------------
/assets/icons/yaml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/yaml.png
--------------------------------------------------------------------------------
/assets/icons/yml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/yml.png
--------------------------------------------------------------------------------
/assets/icons/z.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/z.png
--------------------------------------------------------------------------------
/assets/icons/zip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/icons/zip.png
--------------------------------------------------------------------------------
/assets/images/alist.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/images/alist.png
--------------------------------------------------------------------------------
/assets/images/aws_s3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/images/aws_s3.png
--------------------------------------------------------------------------------
/assets/images/empty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/images/empty.png
--------------------------------------------------------------------------------
/assets/images/emptydir.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/images/emptydir.png
--------------------------------------------------------------------------------
/assets/images/ftp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/images/ftp.png
--------------------------------------------------------------------------------
/assets/images/ftp_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/images/ftp_back.png
--------------------------------------------------------------------------------
/assets/images/githubrepo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/images/githubrepo.png
--------------------------------------------------------------------------------
/assets/images/webdav.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/images/webdav.png
--------------------------------------------------------------------------------
/assets/launch_pic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/launch_pic.png
--------------------------------------------------------------------------------
/assets/menubar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/menubar.png
--------------------------------------------------------------------------------
/assets/roundLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/roundLogo.png
--------------------------------------------------------------------------------
/assets/validateImage/PicHoroValidate.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuingsmile/PicHoro/75e55f38c182aaee40c2206522959cdfefda4105/assets/validateImage/PicHoroValidate.jpeg
--------------------------------------------------------------------------------
/ios/Flutter/flutter_export_environment.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | # This is a generated file; do not edit or check into version control.
3 | export "FLUTTER_ROOT=D:\Program\flutter"
4 | export "FLUTTER_APPLICATION_PATH=D:\githubRepo\myProject\PicHoro"
5 | export "COCOAPODS_PARALLEL_CODE_SIGN=true"
6 | export "FLUTTER_TARGET=lib\main.dart"
7 | export "FLUTTER_BUILD_DIR=build"
8 | export "FLUTTER_BUILD_NAME=2.4.0"
9 | export "FLUTTER_BUILD_NUMBER=1"
10 | export "DART_OBFUSCATION=false"
11 | export "TRACK_WIDGET_CREATION=true"
12 | export "TREE_SHAKE_ICONS=false"
13 | export "PACKAGE_CONFIG=.dart_tool/package_config.json"
14 |
--------------------------------------------------------------------------------
/lib/album/action_button.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class ActionButton extends StatelessWidget {
4 | final IconData icon;
5 | final String label;
6 | final Color color;
7 | final VoidCallback onPressed;
8 |
9 | const ActionButton({
10 | super.key,
11 | required this.icon,
12 | required this.label,
13 | required this.color,
14 | required this.onPressed,
15 | });
16 |
17 | @override
18 | Widget build(BuildContext context) {
19 | return Column(
20 | mainAxisSize: MainAxisSize.min,
21 | children: [
22 | SizedBox(
23 | height: 36,
24 | width: 36,
25 | child: FloatingActionButton(
26 | heroTag: label,
27 | backgroundColor: color,
28 | onPressed: onPressed,
29 | elevation: 3,
30 | child: Icon(
31 | icon,
32 | color: Colors.white,
33 | size: 24,
34 | ),
35 | ),
36 | ),
37 | const SizedBox(height: 4),
38 | Text(
39 | label,
40 | style: TextStyle(
41 | fontSize: 12,
42 | color: Theme.of(context).textTheme.bodySmall?.color,
43 | ),
44 | ),
45 | ],
46 | );
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/lib/album/network_pic_preview.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:extended_image/extended_image.dart';
3 | import 'package:horopic/widgets/common_widgets.dart';
4 | import 'package:horopic/widgets/load_state_change.dart';
5 | import 'package:horopic/utils/common_functions.dart';
6 |
7 | class ImagePreview extends StatefulWidget {
8 | final int index;
9 | final List images;
10 |
11 | const ImagePreview({super.key, required this.index, required this.images});
12 |
13 | @override
14 | ImagePreviewState createState() => ImagePreviewState();
15 | }
16 |
17 | class ImagePreviewState extends State {
18 | int _index = 0;
19 | late PageController _pageController;
20 |
21 | @override
22 | void initState() {
23 | super.initState();
24 | _index = widget.index;
25 | _pageController = PageController(initialPage: _index);
26 | }
27 |
28 | @override
29 | Widget build(BuildContext context) {
30 | return Scaffold(
31 | appBar: AppBar(
32 | elevation: 0,
33 | centerTitle: true,
34 | leading: getLeadingIcon(context),
35 | title: titleText('图片预览'),
36 | flexibleSpace: getFlexibleSpace(context),
37 | ),
38 | body: PageView.builder(
39 | controller: _pageController,
40 | onPageChanged: (index) {
41 | setState(() {
42 | _index = index;
43 | });
44 | },
45 | physics: const BouncingScrollPhysics(),
46 | itemBuilder: (context, index) {
47 | return ExtendedImage.network(
48 | widget.images[index],
49 | fit: BoxFit.contain,
50 | mode: ExtendedImageMode.gesture,
51 | cache: true,
52 | loadStateChanged: (state) => defaultLoadStateChanged(state, iconSize: 60),
53 | initGestureConfigHandler: (state) {
54 | return GestureConfig(
55 | minScale: 0.9,
56 | animationMinScale: 0.7,
57 | maxScale: 3.0,
58 | animationMaxScale: 3.5,
59 | speed: 1.0,
60 | inertialSpeed: 100.0,
61 | initialScale: 1.0,
62 | inPageView: true);
63 | },
64 | );
65 | },
66 | itemCount: widget.images.length,
67 | ),
68 | );
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/lib/api/api.dart:
--------------------------------------------------------------------------------
1 | export 'alist_api.dart';
2 | export 'aliyun_api.dart';
3 | export 'aws_api.dart';
4 | export 'ftp_api.dart';
5 | export 'github_api.dart';
6 | export 'imgur_api.dart';
7 | export 'lskypro_api.dart';
8 | export 'qiniu_api.dart';
9 | export 'smms_api.dart';
10 | export 'tencent_api.dart';
11 | export 'upyun_api.dart';
12 | export 'webdav_api.dart';
13 |
--------------------------------------------------------------------------------
/lib/api/webdav_api.dart:
--------------------------------------------------------------------------------
1 | import 'dart:convert';
2 | import 'package:webdav_client/webdav_client.dart' as webdav;
3 |
4 | import 'package:horopic/utils/common_functions.dart';
5 | import 'package:horopic/picture_host_manage/manage_api/webdav_manage_api.dart';
6 |
7 | class WebdavImageUploadUtils {
8 | //上传接口
9 | static uploadApi({required String path, required String name, required Map configMap}) async {
10 | try {
11 | webdav.Client client = await WebdavManageAPI().getWebdavClient();
12 | String uploadPath = configMap['uploadPath'];
13 | String customUrl = configMap['customUrl'] ?? 'None';
14 | String webPath = configMap['webPath'] ?? 'None';
15 | if (uploadPath == 'None') {
16 | uploadPath = '/';
17 | } else {
18 | if (!uploadPath.startsWith('/')) {
19 | uploadPath = '/$uploadPath';
20 | }
21 | if (!uploadPath.endsWith('/')) {
22 | uploadPath = '$uploadPath/';
23 | }
24 | }
25 | String filePath = uploadPath + name;
26 |
27 | await client.writeFromFile(path, filePath);
28 |
29 | String returnUrl = '';
30 | String displayUrl = '';
31 | if (customUrl != 'None') {
32 | customUrl = customUrl.replaceAll(RegExp(r'/$'), '');
33 | if (webPath != 'None') {
34 | webPath = webPath.replaceAll(RegExp(r'^/*'), '').replaceAll(RegExp(r'/*$'), '');
35 | returnUrl = '$customUrl/$webPath/$name';
36 | } else {
37 | filePath = filePath.replaceAll(RegExp(r'^/*'), '');
38 | returnUrl = '$customUrl/$filePath';
39 | }
40 | displayUrl = returnUrl;
41 | } else {
42 | returnUrl = configMap['host'] + filePath;
43 | displayUrl = returnUrl + generateBasicAuth(configMap['webdavusername'], configMap['password']);
44 | }
45 |
46 | String formatedURL = getFormatedUrl(returnUrl, name);
47 | Map pictureKeyMap = Map.from(configMap);
48 | pictureKeyMap['pictureKey'] = filePath;
49 | String pictureKey = jsonEncode(pictureKeyMap);
50 |
51 | return [
52 | "success",
53 | formatedURL,
54 | returnUrl,
55 | pictureKey,
56 | displayUrl,
57 | ];
58 | } catch (e) {
59 | flogErr(
60 | e,
61 | {
62 | 'path': path,
63 | 'name': name,
64 | },
65 | "WebdavImageUploadUtils",
66 | "uploadApi");
67 |
68 | return ["failed"];
69 | }
70 | }
71 |
72 | static deleteApi({required Map deleteMap, required Map configMap}) async {
73 | try {
74 | Map configMapFromPictureKey = jsonDecode(deleteMap['pictureKey']);
75 |
76 | String host = configMapFromPictureKey['host'];
77 | String webdavusername = configMapFromPictureKey['webdavusername'];
78 | String password = configMapFromPictureKey['password'];
79 |
80 | webdav.Client client = webdav.newClient(
81 | host,
82 | user: webdavusername,
83 | password: password,
84 | );
85 | client.setHeaders({'accept-charset': 'utf-8'});
86 | client.setConnectTimeout(30000);
87 | client.setSendTimeout(30000);
88 | client.setReceiveTimeout(30000);
89 | await client.remove(configMapFromPictureKey['pictureKey']);
90 |
91 | return ["success"];
92 | } catch (e) {
93 | flogErr(
94 | e,
95 | {
96 | 'deleteMap': deleteMap,
97 | 'configMap': configMap,
98 | },
99 | "WebdavImageUploadUtils",
100 | "deleteApi");
101 | return ["failed"];
102 | }
103 | }
104 | }
105 |
--------------------------------------------------------------------------------
/lib/configure_page/others/author.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:dio/dio.dart';
3 | import 'package:external_path/external_path.dart';
4 | import 'package:extended_image/extended_image.dart';
5 | import 'package:horopic/widgets/common_widgets.dart';
6 | import 'package:horopic/widgets/load_state_change.dart';
7 | import 'package:horopic/utils/common_functions.dart';
8 |
9 | class AuthorInformation extends StatelessWidget {
10 | const AuthorInformation({super.key});
11 |
12 | final String qrCodeUrl = 'https://pichoro.msq.pub/wechat.png';
13 |
14 | Future _saveQRCodeToGallery(BuildContext context) async {
15 | try {
16 | var path = await ExternalPath.getExternalStoragePublicDirectory(ExternalPath.DIRECTORY_DCIM);
17 | await Dio().download(qrCodeUrl, '$path/wechat_picHoro.png');
18 | showToast('保存成功');
19 | } catch (e) {
20 | showToast('保存失败: ${e.toString()}');
21 | }
22 | }
23 |
24 | void _showSaveConfirmDialog(BuildContext context) {
25 | showCupertinoAlertDialogWithConfirmFunc(
26 | context: context,
27 | title: '保存到相册',
28 | content: '是否保存到相册?',
29 | onConfirm: () {
30 | _saveQRCodeToGallery(context);
31 | });
32 | }
33 |
34 | GestureConfig _getGestureConfig(ExtendedImageState state) {
35 | return GestureConfig(
36 | minScale: 0.9,
37 | animationMinScale: 0.7,
38 | maxScale: 3.0,
39 | animationMaxScale: 3.5,
40 | speed: 1.0,
41 | inertialSpeed: 100.0,
42 | initialScale: 1.0,
43 | inPageView: true);
44 | }
45 |
46 | @override
47 | Widget build(BuildContext context) {
48 | return Scaffold(
49 | appBar: AppBar(
50 | elevation: 0,
51 | centerTitle: true,
52 | leading: getLeadingIcon(context),
53 | title: titleText('交流群'),
54 | flexibleSpace: getFlexibleSpace(context),
55 | ),
56 | body: Center(
57 | child: ListView(
58 | padding: const EdgeInsets.all(10),
59 | children: [
60 | const SizedBox(height: 50),
61 | GestureDetector(
62 | onTap: () => _showSaveConfirmDialog(context),
63 | child: Center(
64 | child: ExtendedImage.network(
65 | qrCodeUrl,
66 | fit: BoxFit.contain,
67 | mode: ExtendedImageMode.gesture,
68 | cache: false,
69 | loadStateChanged: (state) => defaultLoadStateChanged(state, iconSize: 60),
70 | initGestureConfigHandler: _getGestureConfig,
71 | ),
72 | )),
73 | const SizedBox(height: 15),
74 | Center(
75 | child: Text(
76 | '点击二维码保存到相册',
77 | style: TextStyle(color: Colors.grey[600]),
78 | ),
79 | ),
80 | ],
81 | )),
82 | );
83 | }
84 | }
85 |
--------------------------------------------------------------------------------
/lib/configure_page/others/theme_data.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | // Theme color definitions
4 | const int lightPrimaryValue = 0xFF4596EB;
5 | const int darkPrimaryValue = 0xFF111213;
6 | const int greenPrimaryValue = 0xFF4CAF50;
7 | const int purplePrimaryValue = 0xFF673AB7;
8 | const int orangePrimaryValue = 0xFFFF9800;
9 | const int pinkPrimaryValue = 0xFFF8BBD0;
10 | const int cyanPrimaryValue = 0xFF00BCD4;
11 | const int goldPrimaryValue = 0xFFFFC107;
12 |
13 | // Theme data class to hold theme information
14 | class AppThemeData {
15 | final String name;
16 | final int primaryValue;
17 | final Brightness brightness;
18 |
19 | const AppThemeData({
20 | required this.name,
21 | required this.primaryValue,
22 | this.brightness = Brightness.light,
23 | });
24 | }
25 |
26 | // Available themes
27 | final List availableThemes = [
28 | const AppThemeData(name: 'Light', primaryValue: lightPrimaryValue),
29 | const AppThemeData(name: 'Dark', primaryValue: darkPrimaryValue, brightness: Brightness.dark),
30 | const AppThemeData(name: 'Green', primaryValue: greenPrimaryValue),
31 | const AppThemeData(name: 'Purple', primaryValue: purplePrimaryValue),
32 | const AppThemeData(name: 'Orange', primaryValue: orangePrimaryValue),
33 | const AppThemeData(name: 'Pink', primaryValue: pinkPrimaryValue),
34 | const AppThemeData(name: 'Cyan', primaryValue: cyanPrimaryValue),
35 | const AppThemeData(name: 'Gold', primaryValue: goldPrimaryValue),
36 | ];
37 |
38 | // Function to generate theme data
39 | ThemeData generateThemeData(AppThemeData themeData) {
40 | return ThemeData(
41 | brightness: themeData.brightness,
42 | useMaterial3: true,
43 | colorScheme: ColorScheme.fromSeed(
44 | seedColor: Color(themeData.primaryValue),
45 | brightness: themeData.brightness,
46 | ),
47 | fontFamily: 'SystemFont',
48 | appBarTheme: AppBarTheme(
49 | backgroundColor: Color(themeData.primaryValue),
50 | ),
51 | );
52 | }
53 |
54 | // Generated theme data instances
55 | final ThemeData lightThemeData = generateThemeData(availableThemes[0]);
56 | final ThemeData darkThemeData = generateThemeData(availableThemes[1]);
57 | final ThemeData greenThemeData = generateThemeData(availableThemes[2]);
58 | final ThemeData purpleThemeData = generateThemeData(availableThemes[3]);
59 | final ThemeData orangeThemeData = generateThemeData(availableThemes[4]);
60 | final ThemeData pinkThemeData = generateThemeData(availableThemes[5]);
61 | final ThemeData cyanThemeData = generateThemeData(availableThemes[6]);
62 | final ThemeData goldThemeData = generateThemeData(availableThemes[7]);
63 |
--------------------------------------------------------------------------------
/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_easyloading/flutter_easyloading.dart';
3 | import 'package:horopic/utils/analytics_service.dart';
4 | import 'package:horopic/utils/system_font_provider.dart';
5 | import 'package:provider/provider.dart';
6 |
7 | import 'package:horopic/router/application.dart';
8 | import 'package:horopic/utils/common_functions.dart';
9 | import 'package:horopic/utils/theme_provider.dart';
10 |
11 | void main() async {
12 | WidgetsFlutterBinding.ensureInitialized();
13 | try {
14 | await mainInit();
15 | AnalyticsService().trackAppOpen();
16 | } catch (e) {
17 | flogErr(
18 | e,
19 | {},
20 | 'main',
21 | 'mainInit',
22 | );
23 | }
24 |
25 | runApp(const MyApp());
26 | }
27 |
28 | class MyApp extends StatefulWidget {
29 | const MyApp({super.key});
30 |
31 | @override
32 | MyAppState createState() => MyAppState();
33 | }
34 |
35 | class MyAppState extends State {
36 | @override
37 | Widget build(BuildContext context) {
38 | return MultiProvider(
39 | providers: [
40 | ChangeNotifierProvider.value(value: AppInfoProvider()),
41 | ],
42 | child: Consumer(builder: (context, appInfo, child) {
43 | NativeFeatures.loadSystemFont();
44 | return MaterialApp(
45 | title: 'PicHoro',
46 | debugShowCheckedModeBanner: false,
47 | theme: themeDataMap[appInfo.keyThemeColor]!,
48 | initialRoute: '/',
49 | onGenerateRoute: Application.router.generator,
50 | builder: EasyLoading.init(),
51 | );
52 | }),
53 | );
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/lib/pages/pichoro_app.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:horopic/pages/home_page.dart';
3 | import 'package:horopic/album/album_page.dart';
4 | import 'package:horopic/configure_page/configure_page.dart';
5 | import 'package:horopic/picture_host_manage/picture_host_manage_entry.dart';
6 |
7 | class PicHoroAPP extends StatefulWidget {
8 | final int selectedIndex;
9 |
10 | const PicHoroAPP({super.key, this.selectedIndex = 0});
11 |
12 | @override
13 | State createState() => _PicHoroAPPState();
14 | }
15 |
16 | class _PicHoroAPPState extends State {
17 | late int _selectedIndex;
18 | late final PageController _pageController;
19 |
20 | final List _pages = const [
21 | HomePage(),
22 | UploadedImages(),
23 | PsHostHomePage(),
24 | ConfigurePage(),
25 | ];
26 |
27 | @override
28 | void initState() {
29 | super.initState();
30 | _selectedIndex = widget.selectedIndex;
31 | _pageController = PageController(initialPage: _selectedIndex);
32 | }
33 |
34 | @override
35 | void dispose() {
36 | _pageController.dispose();
37 | super.dispose();
38 | }
39 |
40 | void _onItemTapped(int index) {
41 | if (_selectedIndex == index) return;
42 |
43 | setState(() {
44 | _selectedIndex = index;
45 | _pageController.jumpToPage(index);
46 | });
47 | }
48 |
49 | @override
50 | Widget build(BuildContext context) {
51 | final theme = Theme.of(context);
52 |
53 | return Scaffold(
54 | body: PageView(
55 | controller: _pageController,
56 | physics: const NeverScrollableScrollPhysics(),
57 | children: _pages,
58 | ),
59 | bottomNavigationBar: _buildBottomNavigationBar(theme),
60 | );
61 | }
62 |
63 | Widget _buildBottomNavigationBar(ThemeData theme) {
64 | return Container(
65 | decoration: const BoxDecoration(
66 | boxShadow: [
67 | BoxShadow(
68 | color: Colors.black12,
69 | blurRadius: 8,
70 | offset: Offset(0, -1),
71 | ),
72 | ],
73 | ),
74 | child: BottomNavigationBar(
75 | currentIndex: _selectedIndex,
76 | showSelectedLabels: true,
77 | showUnselectedLabels: true,
78 | selectedItemColor: theme.colorScheme.primary,
79 | unselectedItemColor: Colors.grey.shade600,
80 | selectedFontSize: 12,
81 | unselectedFontSize: 10,
82 | elevation: 15,
83 | backgroundColor: theme.colorScheme.surface,
84 | onTap: _onItemTapped,
85 | type: BottomNavigationBarType.fixed,
86 | items: const [
87 | BottomNavigationBarItem(
88 | icon: Icon(Icons.file_upload_outlined),
89 | activeIcon: Icon(Icons.file_upload),
90 | label: '上传',
91 | ),
92 | BottomNavigationBarItem(
93 | icon: Icon(Icons.photo_outlined),
94 | activeIcon: Icon(Icons.photo),
95 | label: '相册',
96 | ),
97 | BottomNavigationBarItem(
98 | icon: Icon(Icons.storage_outlined),
99 | activeIcon: Icon(Icons.storage),
100 | label: '仓库',
101 | ),
102 | BottomNavigationBarItem(
103 | icon: Icon(Icons.settings_outlined),
104 | activeIcon: Icon(Icons.settings),
105 | label: '设置',
106 | ),
107 | ],
108 | ),
109 | );
110 | }
111 | }
112 |
--------------------------------------------------------------------------------
/lib/pages/upload_helper/upload_request.dart:
--------------------------------------------------------------------------------
1 | import 'package:dio/dio.dart';
2 |
3 | class UploadRequest {
4 | final String path;
5 | final String name;
6 | var cancelToken = CancelToken();
7 |
8 | UploadRequest(
9 | this.path,
10 | this.name,
11 | );
12 |
13 | @override
14 | bool operator ==(Object other) =>
15 | identical(this, other) ||
16 | other is UploadRequest && runtimeType == other.runtimeType && path == other.path && name == other.name;
17 |
18 | @override
19 | int get hashCode => path.hashCode ^ name.hashCode;
20 | }
21 |
--------------------------------------------------------------------------------
/lib/pages/upload_helper/upload_status.dart:
--------------------------------------------------------------------------------
1 | enum UploadStatus { queued, uploading, completed, failed, paused, canceled }
2 |
3 | extension UploadStatusExtension on UploadStatus {
4 | bool get isCompleted {
5 | switch (this) {
6 | case UploadStatus.completed:
7 | case UploadStatus.failed:
8 | case UploadStatus.canceled:
9 | return true;
10 | case UploadStatus.queued:
11 | case UploadStatus.uploading:
12 | case UploadStatus.paused:
13 | return false;
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/lib/pages/upload_helper/upload_task.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 | import 'package:flutter/material.dart';
3 | import 'package:horopic/pages/upload_helper/upload_request.dart';
4 | import 'package:horopic/pages/upload_helper/upload_status.dart';
5 |
6 | class UploadTask {
7 | final UploadRequest request;
8 | final ValueNotifier status = ValueNotifier(UploadStatus.queued);
9 | final ValueNotifier progress = ValueNotifier(0.0);
10 | String formattedUrl = ''; // Store the formatted URL for clipboard
11 |
12 | UploadTask(this.request);
13 |
14 | Future whenUploadComplete({Duration timeout = const Duration(hours: 2)}) {
15 | var completer = Completer();
16 |
17 | if (status.value.isCompleted) {
18 | completer.complete(status.value);
19 | }
20 |
21 | void listener() {
22 | if (status.value.isCompleted) {
23 | completer.complete(status.value);
24 | status.removeListener(listener);
25 | }
26 | }
27 |
28 | status.addListener(listener);
29 | return completer.future.timeout(timeout);
30 | }
31 |
32 | String? getFormattedUrl() {
33 | return status.value == UploadStatus.completed ? formattedUrl : null;
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/lib/picture_host_configure/configure_page/configure_export.dart:
--------------------------------------------------------------------------------
1 | export 'aliyun_configure.dart';
2 | export 'aws_configure.dart';
3 | export 'ftp_configure.dart';
4 | export 'github_configure.dart';
5 | export 'imgur_configure.dart';
6 | export 'qiniu_configure.dart';
7 | export 'smms_configure.dart';
8 | export 'tencent_configure.dart';
9 | export 'upyun_configure.dart';
10 | export 'lskypro_configure.dart';
11 | export 'alist_configure.dart';
12 | export 'webdav_configure.dart';
--------------------------------------------------------------------------------
/lib/picture_host_configure/configure_store/configure_store_edit_page/configure_store_edit_export.dart:
--------------------------------------------------------------------------------
1 | export 'alist_configure_store_edit.dart';
2 | export 'aliyun_configure_store_edit.dart';
3 | export 'aws_configure_store_edit.dart';
4 | export 'ftp_configure_store_edit.dart';
5 | export 'github_configure_store_edit.dart';
6 | export 'imgur_configure_store_edit.dart';
7 | export 'lskypro_configure_store_edit.dart';
8 | export 'qiniu_configure_store_edit.dart';
9 | export 'smms_configure_store_edit.dart';
10 | export 'tencent_configure_store_edit.dart';
11 | export 'upyun_configure_store_edit.dart';
12 | export 'webdav_configure_store_edit.dart';
--------------------------------------------------------------------------------
/lib/picture_host_configure/configure_store/configure_template.dart:
--------------------------------------------------------------------------------
1 | import 'package:horopic/picture_host_configure/configure_page/configure_export.dart';
2 |
3 | class ConfigureTemplate {
4 | static String placeholder = 'undetermined';
5 | static Map> psHostNameToTemplate = {
6 | 'lsky.pro': lskyproConfigureTemplate,
7 | 'aliyun': aliyunConfigureTemplate,
8 | 'qiniu': qiniuConfigureTemplate,
9 | 'tencent': tencentConfigureTemplate,
10 | 'upyun': upyunConfigureTemplate,
11 | 'aws': awsConfigureTemplate,
12 | 'ftp': ftpConfigureTemplate,
13 | 'github': githubConfigureTemplate,
14 | 'sm.ms': smmsConfigureTemplate,
15 | 'imgur': imgurConfigureTemplate,
16 | 'alist': alistConfigureTemplate,
17 | 'webdav': webdavConfigureTemplate,
18 | };
19 |
20 | static List alistConfigureTemplateKeys = AlistConfigModel.keysList;
21 | static List aliyunConfigureTemplateKeys = AliyunConfigModel.keysList;
22 | static List awsConfigureTemplateKeys = AwsConfigModel.keysList;
23 | static List ftpConfigureTemplateKeys = FTPConfigModel.keysList;
24 | static List githubConfigureTemplateKeys = GithubConfigModel.keysList;
25 | static List imgurConfigureTemplateKeys = ImgurConfigModel.keysList;
26 | static List lskyproConfigureTemplateKeys = HostConfigModel.keysList;
27 | static List qiniuConfigureTemplateKeys = QiniuConfigModel.keysList;
28 | static List smmsConfigureTemplateKeys = SmmsConfigModel.keysList;
29 | static List tencentConfigureTemplateKeys = TencentConfigModel.keysList;
30 | static List upyunConfigureTemplateKeys = UpyunConfigModel.keysList;
31 | static List webdavConfigureTemplateKeys = WebdavConfigModel.keysList;
32 |
33 | static final Map alistConfigureTemplate = {for (var k in alistConfigureTemplateKeys) k: placeholder};
34 |
35 | static final Map aliyunConfigureTemplate = {
36 | for (var k in aliyunConfigureTemplateKeys) k: placeholder
37 | };
38 |
39 | static final Map awsConfigureTemplate = {for (var k in awsConfigureTemplateKeys) k: placeholder};
40 |
41 | static final Map ftpConfigureTemplate = {for (var k in ftpConfigureTemplateKeys) k: placeholder};
42 |
43 | static final Map githubConfigureTemplate = {
44 | for (var k in githubConfigureTemplateKeys) k: placeholder
45 | };
46 |
47 | static final Map imgurConfigureTemplate = {for (var k in imgurConfigureTemplateKeys) k: placeholder};
48 |
49 | static final Map lskyproConfigureTemplate = {
50 | for (var k in lskyproConfigureTemplateKeys) k: placeholder
51 | };
52 |
53 | static final Map qiniuConfigureTemplate = {for (var k in qiniuConfigureTemplateKeys) k: placeholder};
54 |
55 | static final Map smmsConfigureTemplate = {for (var k in smmsConfigureTemplateKeys) k: placeholder};
56 |
57 | static final Map tencentConfigureTemplate = {
58 | for (var k in tencentConfigureTemplateKeys) k: placeholder
59 | };
60 |
61 | static final Map upyunConfigureTemplate = {for (var k in upyunConfigureTemplateKeys) k: placeholder};
62 |
63 | static final Map webdavConfigureTemplate = {
64 | for (var k in webdavConfigureTemplateKeys) k: placeholder
65 | };
66 | }
67 |
--------------------------------------------------------------------------------
/lib/picture_host_manage/aliyun/aliyun_bucket_information_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:horopic/picture_host_manage/manage_api/aliyun_manage_api.dart';
3 | import 'package:horopic/picture_host_manage/common/info_page_utils.dart';
4 | import 'package:horopic/utils/common_functions.dart';
5 | import 'package:horopic/widgets/common_widgets.dart';
6 | import 'package:horopic/widgets/custom_speed_dial.dart';
7 |
8 | class AliyunBucketInformation extends StatefulWidget {
9 | final Map bucketMap;
10 | const AliyunBucketInformation({super.key, required this.bucketMap});
11 |
12 | @override
13 | AliyunBucketInformationState createState() => AliyunBucketInformationState();
14 | }
15 |
16 | class AliyunBucketInformationState extends State {
17 | @override
18 | initState() {
19 | super.initState();
20 | }
21 |
22 | List _buildBasicInfoSection() {
23 | return [
24 | buildInfoSection(
25 | '基本信息',
26 | [
27 | buildInfoItem(
28 | context: context,
29 | title: '存储桶名称',
30 | value: widget.bucketMap['name'],
31 | icon: Icons.storage,
32 | copyable: true,
33 | ),
34 | const Divider(height: 1, indent: 56),
35 | buildInfoItem(
36 | context: context,
37 | title: '所属地域',
38 | value: '${widget.bucketMap['location']}(${AliyunManageAPI().areaCodeName[widget.bucketMap['location']]})',
39 | icon: Icons.location_on,
40 | ),
41 | const Divider(height: 1, indent: 56),
42 | buildInfoItem(
43 | context: context,
44 | title: '创建时间',
45 | value: widget.bucketMap['CreationDate'].substring(0, 19),
46 | icon: Icons.calendar_today,
47 | ),
48 | const Divider(height: 1, indent: 56),
49 | buildInfoItem(
50 | context: context,
51 | title: '访问域名',
52 | value: 'https://${widget.bucketMap['name']}.${widget.bucketMap['location']}.aliyuncs.com',
53 | icon: Icons.language,
54 | copyable: true,
55 | ),
56 | ],
57 | ),
58 | ];
59 | }
60 |
61 | @override
62 | Widget build(BuildContext context) {
63 | return Scaffold(
64 | appBar: AppBar(
65 | elevation: 0,
66 | centerTitle: true,
67 | leading: getLeadingIcon(context),
68 | title: titleText('基本信息'),
69 | flexibleSpace: getFlexibleSpace(context),
70 | ),
71 | body: ListView(
72 | physics: const BouncingScrollPhysics(),
73 | padding: const EdgeInsets.symmetric(vertical: 16),
74 | children: [
75 | ..._buildBasicInfoSection(),
76 | const SizedBox(height: 16),
77 | ],
78 | ),
79 | floatingActionButton: SpeedDial(
80 | icon: Icons.more_vert,
81 | activeIcon: Icons.close,
82 | children: [
83 | SpeedDialChild(
84 | child: const Icon(Icons.content_copy),
85 | backgroundColor: Theme.of(context).primaryColor,
86 | foregroundColor: Colors.white,
87 | label: '复制存储桶名称',
88 | onTap: () => copyToClipboard(context, widget.bucketMap['name']),
89 | ),
90 | SpeedDialChild(
91 | child: const Icon(Icons.language),
92 | backgroundColor: Colors.blue,
93 | foregroundColor: Colors.white,
94 | label: '复制访问域名',
95 | onTap: () => copyToClipboard(
96 | context, 'https://${widget.bucketMap['name']}.${widget.bucketMap['location']}.aliyuncs.com'),
97 | ),
98 | ],
99 | ),
100 | );
101 | }
102 | }
103 |
--------------------------------------------------------------------------------
/lib/picture_host_manage/common/base_manage_api.dart:
--------------------------------------------------------------------------------
1 | import 'dart:convert';
2 | import 'dart:io';
3 |
4 | import 'package:crypto/crypto.dart';
5 | import 'package:horopic/utils/common_functions.dart';
6 | import 'package:horopic/utils/global.dart';
7 | import 'package:path_provider/path_provider.dart';
8 |
9 | class BaseManageApi {
10 | /// override this
11 | String configFileName() => 'alist_config.txt';
12 |
13 | Future localFile() async {
14 | final path = await localPath();
15 | String defaultUser = Global.getUser();
16 | return ensureFileExists(File('$path/${defaultUser}_${configFileName()}'));
17 | }
18 |
19 | Future localPath() async {
20 | return (await getApplicationDocumentsDirectory()).path;
21 | }
22 |
23 | Future readCurrentConfig() async {
24 | try {
25 | final file = await localFile();
26 | return await file.readAsString();
27 | } catch (e) {
28 | return "Error";
29 | }
30 | }
31 |
32 | Future