36
Makefile
Normal file
36
Makefile
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
VERSION ?= 0.0.0
|
||||||
|
BINARY ?= slide
|
||||||
|
ARCH ?= noarch
|
||||||
|
|
||||||
|
.PHONY: all
|
||||||
|
all: build
|
||||||
|
|
||||||
|
.PHONY: install-deps-deb
|
||||||
|
install-deps-deb:
|
||||||
|
apt install qt5-qmake libexif12 qt5-default libexif-dev qt5-image-formats-plugins
|
||||||
|
|
||||||
|
check-deps-deb:
|
||||||
|
dpkg -l | grep qt5-qmake
|
||||||
|
dpkg -l | grep libexif12
|
||||||
|
dpkg -l | grep libexif-dev
|
||||||
|
dpkg -l | grep qt5-default
|
||||||
|
dpkg -l | grep qt5-image-formats-plugins
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
clean:
|
||||||
|
rm -rf build
|
||||||
|
|
||||||
|
build:
|
||||||
|
mkdir -p build
|
||||||
|
qmake src/slide.pro -o build/Makefile
|
||||||
|
make -C build
|
||||||
|
|
||||||
|
PACKAGE_DIR=build/slide_$(VERSION)
|
||||||
|
|
||||||
|
.PHONY: package
|
||||||
|
package: clean build
|
||||||
|
mkdir -p $(PACKAGE_DIR)
|
||||||
|
cp -r "./build/$(BINARY)" $(PACKAGE_DIR)
|
||||||
|
cp "INSTALL.md" $(PACKAGE_DIR)
|
||||||
|
cp "LICENSE" $(PACKAGE_DIR)
|
||||||
|
cd build && tar cfz slide_$(ARCH)_$(VERSION).tar.gz slide_$(VERSION)
|
||||||
29
README.md
29
README.md
@@ -5,6 +5,7 @@ Simple, lightweight slideshow selecting random images from specified directory.
|
|||||||
Tested versions:
|
Tested versions:
|
||||||
* Raspberry Pi 3 running Raspbian Stretch.
|
* Raspberry Pi 3 running Raspbian Stretch.
|
||||||
* Raspberry Pi 3 running Raspbian Buster.
|
* Raspberry Pi 3 running Raspbian Buster.
|
||||||
|
* Raspberry Pi Zero running Raspbian Buster.
|
||||||
|
|
||||||
Screen background is filled with a scaled version of the image to prevent pure black background.
|
Screen background is filled with a scaled version of the image to prevent pure black background.
|
||||||
|
|
||||||
@@ -44,26 +45,34 @@ slide [-t rotation_seconds] [-o background_opacity(0..255)] [-b blur_radius] -p
|
|||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
|
||||||
* libexif
|
* qt5-qmake
|
||||||
* qt5
|
* qt5
|
||||||
|
* qt5-image-formats-plugins
|
||||||
|
* libexif
|
||||||
|
|
||||||
|
Ubuntu/Raspbian:
|
||||||
|
|
||||||
```
|
```
|
||||||
sudo apt install libexif12 qt5-default
|
sudo make install-deps-deb
|
||||||
```
|
```
|
||||||
|
|
||||||
## Build
|
## Build
|
||||||
|
|
||||||
dev libs needed to build slide on from source:
|
Install dependencies
|
||||||
|
|
||||||
```
|
```
|
||||||
sudo apt install libexif-dev
|
make install-deps-deb
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Build project
|
||||||
|
|
||||||
```
|
```
|
||||||
mkdir -p make
|
|
||||||
cd make
|
|
||||||
qmake ../src/slide.pro
|
|
||||||
make
|
make
|
||||||
|
```
|
||||||
|
|
||||||
|
Install binaries
|
||||||
|
|
||||||
|
```
|
||||||
sudo make install
|
sudo make install
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -74,9 +83,7 @@ Prerequisite: brew
|
|||||||
```
|
```
|
||||||
brew install qt5
|
brew install qt5
|
||||||
brew install libexif
|
brew install libexif
|
||||||
mkdir -p build
|
brew install libexif
|
||||||
cd build
|
|
||||||
qmake ../src/slide.pro
|
|
||||||
make
|
make
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -87,7 +94,7 @@ This article has more helpful ways that you could use this repo as a picture fra
|
|||||||
https://opensource.com/article/19/2/wifi-picture-frame-raspberry-pi
|
https://opensource.com/article/19/2/wifi-picture-frame-raspberry-pi
|
||||||
```
|
```
|
||||||
|
|
||||||
## Removing black border
|
## Removing black border (Raspberry Pi)
|
||||||
|
|
||||||
```
|
```
|
||||||
if you find that you have a black border around your screen you can remove it by disabling overscan. This is done by editing /boot/config.txt and uncommenting disable_overscan=1
|
if you find that you have a black border around your screen you can remove it by disabling overscan. This is done by editing /boot/config.txt and uncommenting disable_overscan=1
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
|
|
||||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||||
ARCH=$1
|
export ARCH=$1
|
||||||
VERSION=$2
|
export VERSION=$2
|
||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
@@ -22,11 +22,8 @@ if [[ "$ARCH" == "osx" ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
cd "$DIR/.."
|
cd "$DIR/.."
|
||||||
mkdir -p make/slide_$VERSION
|
if ! make check-deps-deb; then
|
||||||
cd make
|
sudo make install-deps-deb
|
||||||
qmake ../src/slide.pro
|
fi
|
||||||
make
|
|
||||||
cp -r "$BINARY" "slide_$VERSION/"
|
make package
|
||||||
cp "../INSTALL.md" "slide_$VERSION/"
|
|
||||||
cp "../LICENSE" "slide_$VERSION/"
|
|
||||||
tar cfz slide_${ARCH}_$VERSION.tar.gz "slide_$VERSION"
|
|
||||||
|
|||||||
10
sbin/package_all.sh
Executable file
10
sbin/package_all.sh
Executable file
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -euxo pipefail
|
||||||
|
VERSION=$1
|
||||||
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||||
|
|
||||||
|
make clean
|
||||||
|
$DIR/package_remote.sh pi picframe pi $VERSION
|
||||||
|
$DIR/package_remote.sh pi raspberrypi pi-0 $VERSION
|
||||||
|
$DIR/package.sh amd64 $VERSION
|
||||||
|
mv build/slide_amd64_$VERSION.tar.gz .
|
||||||
@@ -9,7 +9,7 @@ VERSION=$4
|
|||||||
|
|
||||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||||
|
|
||||||
cd $DIR/..
|
cd "$DIR/.."
|
||||||
rsync -av --delete $(pwd)/* $USER@$HOSTNAME:/tmp/slide_build
|
rsync -av --delete "$(pwd)"/* "$USER@$HOSTNAME:/tmp/slide_build"
|
||||||
ssh $USER@$HOSTNAME "rm -rf /tmp/slide_build/build;/tmp/slide_build/sbin/package.sh $ARCH $VERSION"
|
ssh "$USER@$HOSTNAME" "rm -rf /tmp/slide_build/build;/tmp/slide_build/sbin/package.sh $ARCH $VERSION"
|
||||||
scp $USER@$HOSTNAME:/tmp/slide_build/make/slide_*.tar.gz .
|
scp "$USER@$HOSTNAME:/tmp/slide_build/build/slide_*.tar.gz" .
|
||||||
|
|||||||
@@ -13,6 +13,14 @@ PathTraverser::PathTraverser(const std::string path):
|
|||||||
|
|
||||||
PathTraverser::~PathTraverser() {}
|
PathTraverser::~PathTraverser() {}
|
||||||
|
|
||||||
|
QStringList PathTraverser::getImageFormats() const {
|
||||||
|
QStringList imageFormats;
|
||||||
|
imageFormats << "*.jpg" << "*.JPG" << "*.jpeg" << "*.JPEG";
|
||||||
|
imageFormats << "*.PNG" << "*.png";
|
||||||
|
imageFormats << "*.tiff" << "*.TIFF" << "*.tif" << "*.TIF";
|
||||||
|
return imageFormats;
|
||||||
|
}
|
||||||
|
|
||||||
RecursivePathTraverser::RecursivePathTraverser(const std::string path):
|
RecursivePathTraverser::RecursivePathTraverser(const std::string path):
|
||||||
PathTraverser(path)
|
PathTraverser(path)
|
||||||
{}
|
{}
|
||||||
@@ -22,7 +30,8 @@ RecursivePathTraverser::~RecursivePathTraverser() {}
|
|||||||
|
|
||||||
QStringList RecursivePathTraverser::getImages() const
|
QStringList RecursivePathTraverser::getImages() const
|
||||||
{
|
{
|
||||||
QDirIterator it(QString(path.c_str()), QStringList() << "*.jpg" << "*.JPG" << "*.jpeg" << "*.JPEG" << "*.PNG" << "*.png", QDir::Files, QDirIterator::Subdirectories);
|
QDirIterator it(QString(path.c_str()), getImageFormats(),
|
||||||
|
QDir::Files, QDirIterator::Subdirectories);
|
||||||
QStringList files;
|
QStringList files;
|
||||||
while (it.hasNext())
|
while (it.hasNext())
|
||||||
{
|
{
|
||||||
@@ -46,7 +55,7 @@ DefaultPathTraverser::~DefaultPathTraverser() {}
|
|||||||
|
|
||||||
QStringList DefaultPathTraverser::getImages() const
|
QStringList DefaultPathTraverser::getImages() const
|
||||||
{
|
{
|
||||||
return directory.entryList(QStringList() << "*.jpg" << "*.JPG" << "*.jpeg" << "*.JPEG" << "*.PNG" << "*.png", QDir::Files);
|
return directory.entryList(getImageFormats(), QDir::Files);
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string DefaultPathTraverser::getImagePath(const std::string image) const
|
const std::string DefaultPathTraverser::getImagePath(const std::string image) const
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ class PathTraverser
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
const std::string path;
|
const std::string path;
|
||||||
|
QStringList getImageFormats() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
class RecursivePathTraverser : public PathTraverser
|
class RecursivePathTraverser : public PathTraverser
|
||||||
|
|||||||
Reference in New Issue
Block a user