feat: add some plugins.
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
# Miscellaneous
|
||||
*.class
|
||||
*.log
|
||||
*.pyc
|
||||
*.swp
|
||||
.DS_Store
|
||||
.atom/
|
||||
.buildlog/
|
||||
.history
|
||||
.svn/
|
||||
|
||||
# IntelliJ related
|
||||
*.iml
|
||||
*.ipr
|
||||
*.iws
|
||||
.idea/
|
||||
|
||||
# The .vscode folder contains launch configuration and tasks you configure in
|
||||
# VS Code which you may wish to be included in version control, so this line
|
||||
# is commented out by default.
|
||||
#.vscode/
|
||||
|
||||
# Flutter/Dart/Pub related
|
||||
**/doc/api/
|
||||
.dart_tool/
|
||||
.flutter-plugins
|
||||
.flutter-plugins-dependencies
|
||||
.packages
|
||||
.pub-cache/
|
||||
.pub/
|
||||
build/
|
||||
|
||||
# Android related
|
||||
**/android/**/gradle-wrapper.jar
|
||||
**/android/.gradle
|
||||
**/android/captures/
|
||||
**/android/gradlew
|
||||
**/android/gradlew.bat
|
||||
**/android/local.properties
|
||||
**/android/**/GeneratedPluginRegistrant.java
|
||||
|
||||
# iOS/XCode related
|
||||
**/ios/**/*.mode1v3
|
||||
**/ios/**/*.mode2v3
|
||||
**/ios/**/*.moved-aside
|
||||
**/ios/**/*.pbxuser
|
||||
**/ios/**/*.perspectivev3
|
||||
**/ios/**/*sync/
|
||||
**/ios/**/.sconsign.dblite
|
||||
**/ios/**/.tags*
|
||||
**/ios/**/.vagrant/
|
||||
**/ios/**/DerivedData/
|
||||
**/ios/**/Icon?
|
||||
**/ios/**/Pods/
|
||||
**/ios/**/.symlinks/
|
||||
**/ios/**/profile
|
||||
**/ios/**/xcuserdata
|
||||
**/ios/.generated/
|
||||
**/ios/Flutter/App.framework
|
||||
**/ios/Flutter/Flutter.framework
|
||||
**/ios/Flutter/Flutter.podspec
|
||||
**/ios/Flutter/Generated.xcconfig
|
||||
**/ios/Flutter/app.flx
|
||||
**/ios/Flutter/app.zip
|
||||
**/ios/Flutter/flutter_assets/
|
||||
**/ios/Flutter/flutter_export_environment.sh
|
||||
**/ios/ServiceDefinitions.json
|
||||
**/ios/Runner/GeneratedPluginRegistrant.*
|
||||
|
||||
# Exceptions to above rules.
|
||||
!**/ios/**/default.mode1v3
|
||||
!**/ios/**/default.mode2v3
|
||||
!**/ios/**/default.pbxuser
|
||||
!**/ios/**/default.perspectivev3
|
||||
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
# This file tracks properties of this Flutter project.
|
||||
# Used by Flutter tool to assess capabilities and perform upgrades etc.
|
||||
#
|
||||
# This file should be version controlled and should not be manually edited.
|
||||
|
||||
version:
|
||||
revision: d8c0deb1b6c116be79ceeca005f893be34ab5df2
|
||||
channel: master
|
||||
|
||||
project_type: package
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
## 0.2.0
|
||||
|
||||
* Migrated to null safety.
|
||||
|
||||
## 0.1.2
|
||||
|
||||
* Broaden dependencies to allow nullsafety version of process, meta, and path to be OK.
|
||||
|
||||
## 0.1.1
|
||||
|
||||
* Remove flutter, flutter_test from pubspec dependencies.
|
||||
|
||||
## 0.1.0
|
||||
|
||||
* Initial release includes all the features described in the README.md
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
Copyright 2020 The Flutter Authors. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following
|
||||
disclaimer in the documentation and/or other materials provided
|
||||
with the distribution.
|
||||
* Neither the name of Google Inc. nor the names of its
|
||||
contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
# `xdg_directories`
|
||||
|
||||
A Dart package for reading XDG directory configuration information on Linux.
|
||||
|
||||
## Getting Started
|
||||
|
||||
On Linux, `xdg` is a system developed by [freedesktop.org](freedesktop.org), a
|
||||
project to work on interoperability and shared base technology for free software
|
||||
desktop environments for Linux.
|
||||
|
||||
This Dart package can be used to determine the directory configuration
|
||||
information defined by `xdg`, such as where the Documents or Desktop directories
|
||||
are. These are called "user directories" and are defined in configuration file
|
||||
in the user's home directory.
|
||||
|
||||
See [this wiki](https://wiki.archlinux.org/index.php/XDG_Base_Directory) for
|
||||
more details of the XDG Base Directory implementation.
|
||||
|
||||
To use this package, the basic XDG values for the following are available via a Dart API:
|
||||
|
||||
- `dataHome` - The single base directory relative to which user-specific data
|
||||
files should be written. (Corresponds to `$XDG_DATA_HOME`).
|
||||
|
||||
- `configHome` - The a single base directory relative to which user-specific
|
||||
configuration files should be written. (Corresponds to `$XDG_CONFIG_HOME`).
|
||||
|
||||
- `dataDirs` - The list of preference-ordered base directories relative to
|
||||
which data files should be searched. (Corresponds to `$XDG_DATA_DIRS`).
|
||||
|
||||
- `configDirs` - The list of preference-ordered base directories relative to
|
||||
which configuration files should be searched. (Corresponds to
|
||||
`$XDG_CONFIG_DIRS`).
|
||||
|
||||
- `cacheHome` - The base directory relative to which user-specific
|
||||
non-essential (cached) data should be written. (Corresponds to
|
||||
`$XDG_CACHE_HOME`).
|
||||
|
||||
- `runtimeDir` - The base directory relative to which user-specific runtime
|
||||
files and other file objects should be placed. (Corresponds to
|
||||
`$XDG_RUNTIME_DIR`).
|
||||
|
||||
- `getUserDirectoryNames()` - Returns a set of the names of user directories
|
||||
defined in the `xdg` configuration files.
|
||||
|
||||
- `getUserDirectory(String dirName)` - Gets the value of the user dir with the
|
||||
given name. Requesting a user dir that doesn't exist returns `null`. The
|
||||
`dirName` argument is case-insensitive. See [this
|
||||
wiki](https://wiki.archlinux.org/index.php/XDG_user_directories) for more
|
||||
details and what values of `dirName` might be available.
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
// Copyright 2020 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
library xdg_directories;
|
||||
|
||||
import 'package:universal_io/io.dart';
|
||||
|
||||
import 'xdg_directories_web.dart' if (dart.library.io) 'xdg_directories_linux.dart';
|
||||
|
||||
typedef EnvironmentAccessor = String? Function(String envVar);
|
||||
|
||||
abstract class XDGDirectories {
|
||||
factory XDGDirectories() => getXDGDirectories();
|
||||
|
||||
/// The base directory relative to which user-specific
|
||||
/// non-essential (cached) data should be written. (Corresponds to
|
||||
/// `$XDG_CACHE_HOME`).
|
||||
///
|
||||
/// Throws [StateError] if the HOME environment variable is not set.
|
||||
Directory get cacheHome;
|
||||
|
||||
/// The list of preference-ordered base directories relative to
|
||||
/// which configuration files should be searched. (Corresponds to
|
||||
/// `$XDG_CONFIG_DIRS`).
|
||||
///
|
||||
/// Throws [StateError] if the HOME environment variable is not set.
|
||||
List<Directory> get configDirs;
|
||||
|
||||
/// The a single base directory relative to which user-specific
|
||||
/// configuration files should be written. (Corresponds to `$XDG_CONFIG_HOME`).
|
||||
///
|
||||
/// Throws [StateError] if the HOME environment variable is not set.
|
||||
Directory get configHome;
|
||||
|
||||
/// The list of preference-ordered base directories relative to
|
||||
/// which data files should be searched. (Corresponds to `$XDG_DATA_DIRS`).
|
||||
///
|
||||
/// Throws [StateError] if the HOME environment variable is not set.
|
||||
List<Directory> get dataDirs;
|
||||
|
||||
/// The base directory relative to which user-specific data files should be
|
||||
/// written. (Corresponds to `$XDG_DATA_HOME`).
|
||||
///
|
||||
/// Throws [StateError] if the HOME environment variable is not set.
|
||||
Directory get dataHome;
|
||||
|
||||
/// The base directory relative to which user-specific runtime
|
||||
/// files and other file objects should be placed. (Corresponds to
|
||||
/// `$XDG_RUNTIME_DIR`).
|
||||
///
|
||||
/// Throws [StateError] if the HOME environment variable is not set.
|
||||
Directory? get runtimeDir;
|
||||
|
||||
/// Gets the xdg user directory named by `dirName`.
|
||||
///
|
||||
/// Use [getUserDirectoryNames] to find out the list of available names.
|
||||
Directory? getUserDirectory(String dirName);
|
||||
|
||||
/// Gets the set of user directory names that xdg knows about.
|
||||
///
|
||||
/// These are not paths, they are names of xdg values. Call [getUserDirectory]
|
||||
/// to get the associated directory.
|
||||
///
|
||||
/// These are the names of the variables in "[configHome]/user-dirs.dirs", with
|
||||
/// the `XDG_` prefix removed and the `_DIR` suffix removed.
|
||||
Set<String> getUserDirectoryNames();
|
||||
}
|
||||
@@ -0,0 +1,154 @@
|
||||
// Copyright 2020 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
library xdg_directories;
|
||||
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:path/path.dart' as path;
|
||||
import 'package:process/process.dart';
|
||||
|
||||
import 'xdg_directories.dart';
|
||||
|
||||
XDGDirectories getXDGDirectories() => XDGDirectoriesLinux();
|
||||
|
||||
class XDGDirectoriesLinux implements XDGDirectories {
|
||||
EnvironmentAccessor _getenv = (String value) => Platform.environment[value];
|
||||
|
||||
ProcessManager _processManager = const LocalProcessManager();
|
||||
|
||||
List<Directory> _directoryListFromEnvironment(String envVar, List<Directory> fallback) {
|
||||
ArgumentError.checkNotNull(envVar);
|
||||
ArgumentError.checkNotNull(fallback);
|
||||
final String? value = _getenv(envVar);
|
||||
if (value == null || value.isEmpty) {
|
||||
return fallback;
|
||||
}
|
||||
return value.split(':').where((String value) {
|
||||
return value.isNotEmpty;
|
||||
}).map<Directory>((String entry) {
|
||||
return Directory(entry);
|
||||
}).toList();
|
||||
}
|
||||
|
||||
Directory? _directoryFromEnvironment(String envVar) {
|
||||
ArgumentError.checkNotNull(envVar);
|
||||
final String? value = _getenv(envVar);
|
||||
if (value == null || value.isEmpty) {
|
||||
return null;
|
||||
}
|
||||
return Directory(value);
|
||||
}
|
||||
|
||||
Directory _directoryFromEnvironmentWithFallback(String envVar, String fallback) {
|
||||
ArgumentError.checkNotNull(envVar);
|
||||
final String? value = _getenv(envVar);
|
||||
if (value == null || value.isEmpty) {
|
||||
return _getDirectory(fallback);
|
||||
}
|
||||
return Directory(value);
|
||||
}
|
||||
|
||||
// Creates a Directory from a fallback path.
|
||||
Directory _getDirectory(String subdir) {
|
||||
ArgumentError.checkNotNull(subdir);
|
||||
assert(subdir.isNotEmpty);
|
||||
final String? homeDir = _getenv('HOME');
|
||||
if (homeDir == null || homeDir.isEmpty) {
|
||||
throw StateError('The "HOME" environment variable is not set. This package (and POSIX) '
|
||||
'requires that HOME be set.');
|
||||
}
|
||||
return Directory(path.joinAll(<String>[homeDir, subdir]));
|
||||
}
|
||||
|
||||
/// The base directory relative to which user-specific
|
||||
/// non-essential (cached) data should be written. (Corresponds to
|
||||
/// `$XDG_CACHE_HOME`).
|
||||
///
|
||||
/// Throws [StateError] if the HOME environment variable is not set.
|
||||
Directory get cacheHome => _directoryFromEnvironmentWithFallback('XDG_CACHE_HOME', '.cache');
|
||||
|
||||
/// The list of preference-ordered base directories relative to
|
||||
/// which configuration files should be searched. (Corresponds to
|
||||
/// `$XDG_CONFIG_DIRS`).
|
||||
///
|
||||
/// Throws [StateError] if the HOME environment variable is not set.
|
||||
List<Directory> get configDirs {
|
||||
return _directoryListFromEnvironment(
|
||||
'XDG_CONFIG_DIRS',
|
||||
<Directory>[Directory('/etc/xdg')],
|
||||
);
|
||||
}
|
||||
|
||||
/// The a single base directory relative to which user-specific
|
||||
/// configuration files should be written. (Corresponds to `$XDG_CONFIG_HOME`).
|
||||
///
|
||||
/// Throws [StateError] if the HOME environment variable is not set.
|
||||
Directory get configHome => _directoryFromEnvironmentWithFallback('XDG_CONFIG_HOME', '.config');
|
||||
|
||||
/// The list of preference-ordered base directories relative to
|
||||
/// which data files should be searched. (Corresponds to `$XDG_DATA_DIRS`).
|
||||
///
|
||||
/// Throws [StateError] if the HOME environment variable is not set.
|
||||
List<Directory> get dataDirs {
|
||||
return _directoryListFromEnvironment(
|
||||
'XDG_DATA_DIRS',
|
||||
<Directory>[Directory('/usr/local/share'), Directory('/usr/share')],
|
||||
);
|
||||
}
|
||||
|
||||
/// The base directory relative to which user-specific data files should be
|
||||
/// written. (Corresponds to `$XDG_DATA_HOME`).
|
||||
///
|
||||
/// Throws [StateError] if the HOME environment variable is not set.
|
||||
Directory get dataHome => _directoryFromEnvironmentWithFallback('XDG_DATA_HOME', '.local/share');
|
||||
|
||||
/// The base directory relative to which user-specific runtime
|
||||
/// files and other file objects should be placed. (Corresponds to
|
||||
/// `$XDG_RUNTIME_DIR`).
|
||||
///
|
||||
/// Throws [StateError] if the HOME environment variable is not set.
|
||||
Directory? get runtimeDir => _directoryFromEnvironment('XDG_RUNTIME_DIR');
|
||||
|
||||
/// Gets the xdg user directory named by `dirName`.
|
||||
///
|
||||
/// Use [getUserDirectoryNames] to find out the list of available names.
|
||||
Directory? getUserDirectory(String dirName) {
|
||||
final ProcessResult result = _processManager.runSync(
|
||||
<String>['xdg-user-dir', dirName],
|
||||
includeParentEnvironment: true,
|
||||
stdoutEncoding: utf8,
|
||||
);
|
||||
final String path = result.stdout.split('\n')[0];
|
||||
return Directory(path);
|
||||
}
|
||||
|
||||
/// Gets the set of user directory names that xdg knows about.
|
||||
///
|
||||
/// These are not paths, they are names of xdg values. Call [getUserDirectory]
|
||||
/// to get the associated directory.
|
||||
///
|
||||
/// These are the names of the variables in "[configHome]/user-dirs.dirs", with
|
||||
/// the `XDG_` prefix removed and the `_DIR` suffix removed.
|
||||
Set<String> getUserDirectoryNames() {
|
||||
final File configFile = File(path.join(configHome.path, 'user-dirs.dirs'));
|
||||
List<String> contents;
|
||||
try {
|
||||
contents = configFile.readAsLinesSync();
|
||||
} on FileSystemException {
|
||||
return const <String>{};
|
||||
}
|
||||
final Set<String> result = <String>{};
|
||||
final RegExp dirRegExp = RegExp(r'^\s*XDG_(?<dirname>[^=]*)_DIR\s*=\s*(?<dir>.*)\s*$');
|
||||
for (String line in contents) {
|
||||
final RegExpMatch? match = dirRegExp.firstMatch(line);
|
||||
if (match == null) {
|
||||
continue;
|
||||
}
|
||||
result.add(match.namedGroup('dirname')!);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
// Copyright 2020 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
library xdg_directories;
|
||||
|
||||
import 'package:universal_io/io.dart';
|
||||
|
||||
import 'xdg_directories.dart';
|
||||
|
||||
XDGDirectories getXDGDirectories() => XDGDirectoriesWeb();
|
||||
|
||||
class XDGDirectoriesWeb implements XDGDirectories {
|
||||
@override
|
||||
Directory get cacheHome => throw UnimplementedError();
|
||||
|
||||
@override
|
||||
List<Directory> get configDirs => throw UnimplementedError();
|
||||
|
||||
@override
|
||||
Directory get configHome => throw UnimplementedError();
|
||||
|
||||
@override
|
||||
List<Directory> get dataDirs => throw UnimplementedError();
|
||||
|
||||
@override
|
||||
Directory get dataHome => throw UnimplementedError();
|
||||
|
||||
@override
|
||||
Directory? getUserDirectory(String dirName) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Set<String> getUserDirectoryNames() {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Directory? get runtimeDir => throw UnimplementedError();
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
name: xdg_directories
|
||||
description: A Dart package for reading XDG directory configuration information on Linux.
|
||||
version: 0.2.0
|
||||
homepage: https://github.com/flutter/packages/tree/master/packages/xdg_directories
|
||||
|
||||
environment:
|
||||
sdk: ">=2.12.0-0 <3.0.0"
|
||||
|
||||
dependencies:
|
||||
meta: ^1.3.0
|
||||
path: ^1.8.0
|
||||
process: ^4.0.0
|
||||
universal_io: ^2.0.4
|
||||
|
||||
dev_dependencies:
|
||||
test: ^1.16.0
|
||||
Reference in New Issue
Block a user