|
@@ -154,7 +154,33 @@
|
|
|
<span id="147">147</span>
|
|
|
<span id="148">148</span>
|
|
|
<span id="149">149</span>
|
|
|
-</pre><pre class="rust"><code><span class="kw">use</span> <span class="ident"><span class="kw">super</span>::types::EventType</span>;
|
|
|
+<span id="150">150</span>
|
|
|
+<span id="151">151</span>
|
|
|
+<span id="152">152</span>
|
|
|
+<span id="153">153</span>
|
|
|
+<span id="154">154</span>
|
|
|
+<span id="155">155</span>
|
|
|
+<span id="156">156</span>
|
|
|
+<span id="157">157</span>
|
|
|
+<span id="158">158</span>
|
|
|
+<span id="159">159</span>
|
|
|
+<span id="160">160</span>
|
|
|
+<span id="161">161</span>
|
|
|
+<span id="162">162</span>
|
|
|
+<span id="163">163</span>
|
|
|
+<span id="164">164</span>
|
|
|
+<span id="165">165</span>
|
|
|
+<span id="166">166</span>
|
|
|
+<span id="167">167</span>
|
|
|
+<span id="168">168</span>
|
|
|
+<span id="169">169</span>
|
|
|
+<span id="170">170</span>
|
|
|
+<span id="171">171</span>
|
|
|
+<span id="172">172</span>
|
|
|
+<span id="173">173</span>
|
|
|
+</pre><pre class="rust"><code><span class="kw">mod</span> <span class="ident">error</span>;
|
|
|
+
|
|
|
+<span class="kw">use</span> <span class="ident"><span class="kw">super</span>::types::EventType</span>;
|
|
|
<span class="kw">use</span> <span class="ident"><span class="kw">super</span>::types::Table</span>;
|
|
|
<span class="kw">use</span> <span class="ident"><span class="kw">super</span>::Event</span>;
|
|
|
<span class="kw">use</span> <span class="ident"><span class="kw">super</span>::Reactor</span>;
|
|
@@ -172,7 +198,7 @@
|
|
|
<span class="kw">use</span> <span class="ident">async_trait::async_trait</span>;
|
|
|
<span class="kw">use</span> <span class="ident">std::path::PathBuf</span>;
|
|
|
|
|
|
-<span class="kw">pub</span> <span class="kw">type</span> <span class="ident">Error</span> <span class="op">=</span> <span class="ident">std::convert::Infallible</span>;
|
|
|
+<span class="kw">pub</span> <span class="kw">type</span> <span class="ident">Error</span> <span class="op">=</span> <span class="ident">error::Error</span>;
|
|
|
|
|
|
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">EventReactor</span> {
|
|
|
<span class="ident">pool</span>: <span class="ident">SqlitePool</span>,
|
|
@@ -206,8 +232,16 @@
|
|
|
<span class="ident">EventType::Update</span> => {
|
|
|
<span class="comment">// NOTE: Library usually get marked as hidden before being deleted as a UX</span>
|
|
|
<span class="comment">// optimization. Sometimes library deletes can take a while.</span>
|
|
|
- <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">tx</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">pool</span>.<span class="ident">read_ref</span>().<span class="ident">begin</span>().<span class="kw">await</span>.<span class="ident">unwrap</span>();
|
|
|
- <span class="kw">let</span> <span class="ident">Library</span> { <span class="ident">hidden</span>, .. } <span class="op">=</span> <span class="ident">Library::get_one</span>(<span class="kw-2">&mut</span> <span class="ident">tx</span>, <span class="ident">event</span>.<span class="ident">id</span>).<span class="kw">await</span>.<span class="ident">unwrap</span>();
|
|
|
+ <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">tx</span> <span class="op">=</span> <span class="self">self</span>
|
|
|
+ .<span class="ident">pool</span>
|
|
|
+ .<span class="ident">read_ref</span>()
|
|
|
+ .<span class="ident">begin</span>()
|
|
|
+ .<span class="kw">await</span>
|
|
|
+ .<span class="ident">map_err</span>(<span class="ident">Error::ReadTransaction</span>)<span class="question-mark">?</span>;
|
|
|
+
|
|
|
+ <span class="kw">let</span> <span class="ident">Library</span> { <span class="ident">hidden</span>, .. } <span class="op">=</span> <span class="ident">Library::get_one</span>(<span class="kw-2">&mut</span> <span class="ident">tx</span>, <span class="ident">event</span>.<span class="ident">id</span>)
|
|
|
+ .<span class="kw">await</span>
|
|
|
+ .<span class="ident">map_err</span>(<span class="ident">Error::LibraryQuery</span>)<span class="question-mark">?</span>;
|
|
|
|
|
|
<span class="kw">if</span> <span class="op">!</span><span class="ident">hidden</span> {
|
|
|
<span class="kw">return</span> <span class="prelude-val">Ok</span>(());
|
|
@@ -224,7 +258,7 @@
|
|
|
|
|
|
<span class="ident">event_tx</span>
|
|
|
.<span class="ident">send</span>(<span class="ident">serde_json::to_string</span>(<span class="kw-2">&</span><span class="ident">event</span>).<span class="ident">expect</span>(<span class="string">"Serializing event should never fail"</span>))
|
|
|
- .<span class="ident">unwrap</span>();
|
|
|
+ .<span class="ident">map_err</span>(<span class="ident">Error::EventDispatch</span>)<span class="question-mark">?</span>;
|
|
|
|
|
|
<span class="prelude-val">Ok</span>(())
|
|
|
}
|
|
@@ -236,13 +270,20 @@
|
|
|
<span class="kw">return</span> <span class="prelude-val">Ok</span>(());
|
|
|
}
|
|
|
|
|
|
- <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">tx</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">pool</span>.<span class="ident">read_ref</span>().<span class="ident">begin</span>().<span class="kw">await</span>.<span class="ident">unwrap</span>();
|
|
|
+ <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">tx</span> <span class="op">=</span> <span class="self">self</span>
|
|
|
+ .<span class="ident">pool</span>
|
|
|
+ .<span class="ident">read_ref</span>()
|
|
|
+ .<span class="ident">begin</span>()
|
|
|
+ .<span class="kw">await</span>
|
|
|
+ .<span class="ident">map_err</span>(<span class="ident">Error::ReadTransaction</span>)<span class="question-mark">?</span>;
|
|
|
|
|
|
<span class="kw">let</span> <span class="ident">Asset</span> {
|
|
|
<span class="ident">remote_url</span>,
|
|
|
<span class="ident">local_path</span>,
|
|
|
..
|
|
|
- } <span class="op">=</span> <span class="ident">Asset::get_by_id</span>(<span class="kw-2">&mut</span> <span class="ident">tx</span>, <span class="ident">event</span>.<span class="ident">id</span>).<span class="kw">await</span>.<span class="ident">unwrap</span>();
|
|
|
+ } <span class="op">=</span> <span class="ident">Asset::get_by_id</span>(<span class="kw-2">&mut</span> <span class="ident">tx</span>, <span class="ident">event</span>.<span class="ident">id</span>)
|
|
|
+ .<span class="kw">await</span>
|
|
|
+ .<span class="ident">map_err</span>(<span class="ident">Error::AssetQuery</span>)<span class="question-mark">?</span>;
|
|
|
|
|
|
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">remote_url</span>) <span class="op">=</span> <span class="ident">remote_url</span> {
|
|
|
<span class="kw">let</span> <span class="ident">path</span> <span class="op">=</span> <span class="ident">PathBuf::from</span>(<span class="ident">local_path</span>);
|
|
@@ -262,11 +303,18 @@
|
|
|
|
|
|
<span class="macro">assert_eq!</span>(<span class="ident">event</span>.<span class="ident">table</span>, <span class="ident">Table::Media</span>);
|
|
|
|
|
|
- <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">tx</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">pool</span>.<span class="ident">read_ref</span>().<span class="ident">begin</span>().<span class="kw">await</span>.<span class="ident">unwrap</span>();
|
|
|
+ <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">tx</span> <span class="op">=</span> <span class="self">self</span>
|
|
|
+ .<span class="ident">pool</span>
|
|
|
+ .<span class="ident">read_ref</span>()
|
|
|
+ .<span class="ident">begin</span>()
|
|
|
+ .<span class="kw">await</span>
|
|
|
+ .<span class="ident">map_err</span>(<span class="ident">Error::ReadTransaction</span>)<span class="question-mark">?</span>;
|
|
|
|
|
|
<span class="kw">let</span> <span class="ident">event_type</span> <span class="op">=</span> <span class="kw">match</span> <span class="ident">event</span>.<span class="ident">event_type</span> {
|
|
|
<span class="ident">EventType::Insert</span> => {
|
|
|
- <span class="kw">let</span> (<span class="ident">library_id</span>, <span class="ident">media_type</span>) <span class="op">=</span> <span class="ident">Media::get_compact</span>(<span class="kw-2">&mut</span> <span class="ident">tx</span>, <span class="ident">event</span>.<span class="ident">id</span>).<span class="kw">await</span>.<span class="ident">unwrap</span>();
|
|
|
+ <span class="kw">let</span> (<span class="ident">library_id</span>, <span class="ident">media_type</span>) <span class="op">=</span> <span class="ident">Media::get_compact</span>(<span class="kw-2">&mut</span> <span class="ident">tx</span>, <span class="ident">event</span>.<span class="ident">id</span>)
|
|
|
+ .<span class="kw">await</span>
|
|
|
+ .<span class="ident">map_err</span>(<span class="ident">Error::MediaQuery</span>)<span class="question-mark">?</span>;
|
|
|
|
|
|
<span class="kw">if</span> <span class="op">!</span><span class="macro">matches!</span>(<span class="ident">media_type</span>, <span class="ident">MediaType::Movie</span> <span class="op">|</span> <span class="ident">MediaType::Tv</span>) {
|
|
|
<span class="kw">return</span> <span class="prelude-val">Ok</span>(());
|
|
@@ -285,7 +333,7 @@
|
|
|
|
|
|
<span class="ident">event_tx</span>
|
|
|
.<span class="ident">send</span>(<span class="ident">serde_json::to_string</span>(<span class="kw-2">&</span><span class="ident">event</span>).<span class="ident">expect</span>(<span class="string">"Serializing event should never fail"</span>))
|
|
|
- .<span class="ident">unwrap</span>();
|
|
|
+ .<span class="ident">map_err</span>(<span class="ident">Error::EventDispatch</span>)<span class="question-mark">?</span>;
|
|
|
|
|
|
<span class="prelude-val">Ok</span>(())
|
|
|
}
|