Compare commits
2 commits
cb905eec81
...
fbe4fe643a
Author | SHA1 | Date | |
---|---|---|---|
|
fbe4fe643a | ||
|
c90059f532 |
3 changed files with 103 additions and 1 deletions
24
build.gradle
24
build.gradle
|
@ -9,3 +9,27 @@ plugins {
|
||||||
task clean(type: Delete) {
|
task clean(type: Delete) {
|
||||||
delete rootProject.buildDir
|
delete rootProject.buildDir
|
||||||
}
|
}
|
||||||
|
|
||||||
|
task resolveDependencies {
|
||||||
|
doLast {
|
||||||
|
project.rootProject.allprojects.each { subProject ->
|
||||||
|
subProject.buildscript.configurations.each { configuration ->
|
||||||
|
resolveConfiguration(subProject, configuration, "buildscript config '${configuration.name}'")
|
||||||
|
}
|
||||||
|
subProject.configurations.each { configuration ->
|
||||||
|
resolveConfiguration(subProject, configuration, "config '${configuration.name}'")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void resolveConfiguration(subProject, configuration, name) {
|
||||||
|
// TODO: fix this
|
||||||
|
if (subProject.name == "app") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (configuration.canBeResolved) {
|
||||||
|
logger.info("Resolving project {} {}", subProject.name, name)
|
||||||
|
configuration.resolve()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
44
flake.nix
44
flake.nix
|
@ -19,7 +19,7 @@
|
||||||
allowUnfree = true;
|
allowUnfree = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
in {
|
in rec {
|
||||||
formatter = pkgs.alejandra;
|
formatter = pkgs.alejandra;
|
||||||
devShells.default = let
|
devShells.default = let
|
||||||
androidSdk = pkgs.androidenv.androidPkgs_9_0.androidsdk;
|
androidSdk = pkgs.androidenv.androidPkgs_9_0.androidsdk;
|
||||||
|
@ -35,5 +35,47 @@
|
||||||
# override the aapt2 that gradle uses with the nix-shipped version
|
# override the aapt2 that gradle uses with the nix-shipped version
|
||||||
GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${androidSdk}/libexec/android-sdk/build-tools/32.0.0/aapt2";
|
GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${androidSdk}/libexec/android-sdk/build-tools/32.0.0/aapt2";
|
||||||
};
|
};
|
||||||
|
packages = rec {
|
||||||
|
invtracker-deps = pkgs.stdenv.mkDerivation {
|
||||||
|
pname = "invtracker-deps";
|
||||||
|
version = self.lastModifiedDate;
|
||||||
|
src = self;
|
||||||
|
nativeBuildInputs = with pkgs; [gradle openjdk_headless perl];
|
||||||
|
buildPhase = ''
|
||||||
|
export GRADLE_USER_HOME=$(mktemp -d)
|
||||||
|
# Fetch the maven deps
|
||||||
|
gradle --no-daemon --info -Dorg.gradle.java.home=${pkgs.openjdk_headless} resolveDependencies
|
||||||
|
'';
|
||||||
|
installPhase = ''
|
||||||
|
find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(jar\|pom\)$' \
|
||||||
|
| perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/maven/$x/$3/$4/$5" #e' \
|
||||||
|
| sh
|
||||||
|
'';
|
||||||
|
outputHashAlgo = "sha256";
|
||||||
|
outputHashMode = "recursive";
|
||||||
|
outputHash = "sha256-OXNB19WPC5MyLEoDAtnVM9XykY7e0mKGRH5Aw8C/lMo=";
|
||||||
|
};
|
||||||
|
invtracker-server = pkgs.stdenv.mkDerivation {
|
||||||
|
pname = "invtracker-server";
|
||||||
|
version = self.lastModifiedDate;
|
||||||
|
src = self;
|
||||||
|
nativeBuildInputs = with pkgs; [gradle openjdk_headless];
|
||||||
|
buildPhase = ''
|
||||||
|
sed -i 's#gradlePluginPortal..#maven { url "${invtracker-deps}/maven" }#' settings.gradle
|
||||||
|
sed -i 's#google..#maven { url "${invtracker-deps}/maven" }#' settings.gradle
|
||||||
|
|
||||||
|
export GRADLE_USER_HOME=$(mktemp -d)
|
||||||
|
gradle --offline --no-daemon --info -Dorg.gradle.java.home=${pkgs.openjdk_headless} server:installDist
|
||||||
|
'';
|
||||||
|
installPhase = ''
|
||||||
|
cp -rv server/build/install/server $out/
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
hydraJobs =
|
||||||
|
if system == "x86_64-linux"
|
||||||
|
then devShells // packages
|
||||||
|
else {};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,18 +25,48 @@ import rs.chir.db.DBConnection;
|
||||||
import rs.chir.invtracker.model.Cursor;
|
import rs.chir.invtracker.model.Cursor;
|
||||||
import rs.chir.invtracker.model.GeoLocation;
|
import rs.chir.invtracker.model.GeoLocation;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A table for storing locations for tracked items.
|
||||||
|
*/
|
||||||
public class LocationLogTable implements Map<Long, GeoLocation> {
|
public class LocationLogTable implements Map<Long, GeoLocation> {
|
||||||
|
/**
|
||||||
|
* The page size to use for API cursors
|
||||||
|
*/
|
||||||
private static final int PAGE_SIZE = 50;
|
private static final int PAGE_SIZE = 50;
|
||||||
|
/**
|
||||||
|
* The database connection to use for accessing the table.
|
||||||
|
*/
|
||||||
private final DBConnection dbConnection;
|
private final DBConnection dbConnection;
|
||||||
|
/**
|
||||||
|
* The user ID to use for accessing the table.
|
||||||
|
*/
|
||||||
private final long userId;
|
private final long userId;
|
||||||
|
/**
|
||||||
|
* The item ID to use for accessing the table.
|
||||||
|
*/
|
||||||
private final long itemId;
|
private final long itemId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new table.
|
||||||
|
*
|
||||||
|
* @param dbConnection the database connection to use for accessing the table.
|
||||||
|
* @param userId the user ID to use for accessing the table.
|
||||||
|
* @param itemId the item ID to use for accessing the table.
|
||||||
|
*/
|
||||||
private LocationLogTable(DBConnection dbConnection, long userId, long itemId) {
|
private LocationLogTable(DBConnection dbConnection, long userId, long itemId) {
|
||||||
this.dbConnection = dbConnection;
|
this.dbConnection = dbConnection;
|
||||||
this.userId = userId;
|
this.userId = userId;
|
||||||
this.itemId = itemId;
|
this.itemId = itemId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the table for the given user and item.
|
||||||
|
*
|
||||||
|
* @param dbConnection the database connection to use for accessing the table.
|
||||||
|
* @param userId the user ID to use for accessing the table.
|
||||||
|
* @param itemId the item ID to use for accessing the table.
|
||||||
|
* @return the new table.
|
||||||
|
*/
|
||||||
@NonNull
|
@NonNull
|
||||||
public static LocationLogTable getInstance(@NonNull DBConnection dbConnection, long userId, long itemId) {
|
public static LocationLogTable getInstance(@NonNull DBConnection dbConnection, long userId, long itemId) {
|
||||||
// TODO: add caching maybe
|
// TODO: add caching maybe
|
||||||
|
@ -45,6 +75,12 @@ public class LocationLogTable implements Map<Long, GeoLocation> {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a row from the database to a location.
|
||||||
|
* @param resultSet the result set to convert.
|
||||||
|
* @return the location.
|
||||||
|
* @throws SQLException if an error occurs.
|
||||||
|
*/
|
||||||
@NonNull
|
@NonNull
|
||||||
@Contract("_ -> new")
|
@Contract("_ -> new")
|
||||||
private static GeoLocation fromResultSet(@NonNull ResultSet rs) throws SQLException {
|
private static GeoLocation fromResultSet(@NonNull ResultSet rs) throws SQLException {
|
||||||
|
|
Loading…
Reference in a new issue